1. 程式人生 > >Sybase IQ使用過程中註意事項

Sybase IQ使用過程中註意事項

別名 || set div error 就是 表關聯 date 函數

Sybase IQ使用過程中註意事項

1,字母大小寫比對不敏感,也就是在值比對判斷時大小寫字母都一樣;

2,等值,或<>判斷,系統默認對等式兩邊比對值去右邊空格再進行比較;

3,GROUP BY 可以根據SELECT字段或表達式的別名來 匯總,在編寫時也盡量避免SELECT 語句的別名與FROM表中的字段有重復,不然會出現莫名其妙的錯誤;

4,FROM後的子查詢 要定義別名才可使用;

5,存儲過程要返回IQ系統錯誤信息 SQLCODE || ERRORMSG(*) :(兩者都為EXCEPTION後第一條SQL語句才有效果);

6,IQ中若采用 FULL JOIN 連接則不能使用 WHERE 條件,否則FULL JOIN將失效,要篩選條件則用子查詢先過濾記錄後再FULL JOIN;

7,建表時,字段默認為非空;

8,UPDATE語句,如果與目標表關聯的表有多條,則不會報錯,而是隨機取一條更新(第一條);

9,RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值一樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼為一個字段(待確認,該問題以前碰過一次,再次驗證卻不存在這問題))

10,返回可讀的 全局唯一字符:UUIDTOSTR(NEWID())

11,存儲過程隱式遊標語法:
FOR A AS B CURSOR FOR SELECT ... FROM ...
DO
.... 過程語句
END FOR;
需要註意的時,這邊的A 和 B 在 過程語句中都不能引用,所以為避免過程語句其他字段名與FOR SELECT 語句的字段名稱重復,FOR SELECT 語句的字段最好都定義別名區分

12,根據SELECT 語句建立[臨時]表的方法(ORACLE的CREATE TABLE)為 SELECT ..[*] INTO [#]table_name FROM ..; 其中如果在table_name加前綴#,則為會話級臨時表,否則為實體表;

13,因Sybase為列存儲模式,在執行上INSERT語句會比UPDATE語句慢,尤其表數據越多INSERT效率就越慢;所以在ETL時建議多用UPDATE而不是INSERT

14,雖說Sybase為列存儲模式,每個字段上都有默認索引,但對於經常的兩表的關聯鍵還是要建立索引否則會經常報QUERY_TEMP_SPACE_LIMIT不足的錯誤;

15,存儲過程中也可以顯示的執行DDL語句,這點與Oracle不同;

16,空字符串‘‘在Sybase中也是個字符而不是null值,這點要註意;

17,調整SESSION的臨時空間SET TEMPORARY OPTION QUERY_TEMP_SPACE_LIMIT = ‘150000‘; 15000為大小,如寫0則沒限制大小

Sybase IQ使用過程中註意事項