Oracle中幾個限制的說明:
1、IN 子句中的LIST個數最長為1000,超過該數目將報錯,這裡可轉用一個臨時表來解決;
2、CREATE TRIGGER語句文本的字符長度不能超過32KB(觸發器中不能使用LONG, LONG RAW 類型;觸發器內可以參照LOB 類型列的列值,但不能通過 :NEW 修改LOB列中的數據;)順便說一下,觸發器中的PARENT關鍵字,只在嵌套表觸發器中有效,
3、11G以前,DBMS_SQL對輸入的SQL長度不能超過32K,原因是輸入參數只能是VARCHAR2類型,11G後,可以用CLOB作為輸入參數,則取消了這個限制
4、一個PL/SQL的包、過程、函數、觸發器的大小,在UNIX上最大是64K,而Windows則是32K大小(32K這個應該不准,看下面的測試)
5、SQL語句可以有多長?(網友說)Oracle文檔說是64K,實際受一些工具的限制會較這個值低,但網友測試發現可以很長,甚至超過1M(我測試過170K的都沒問題)。具體多長,10G也未說明,只是與很多環境有關:數據庫配置,磁盤空間,內存多少。。。,實際上本人在用PL/SQL中測試發現:
(PL/SQL中,表達式/SQL本身的長度是可以達到比較長的長度(50K)左右,如:v_str:=:new.f1||:ndw.f2。。。 ; select :new.f1||:new.f2。。。 into v_str from dual; 另外發現,如果這樣寫:v_str := ‘a’||’b’||。。。則允許的表達式長度將大大的減少。如果表達式/SQL過長,超過了一個Oracle包/過程允許的最大程序長度,則在編譯時報pls-123:program too large錯誤,這是pl/sql編譯器本身的限制造成的,即表達式/SQL的長度在PL/SQL中受限於包/過程的最大大小 )
通過本文的講解,現在大家對Oracle數據庫中的限制已經有了大體的了解,希望大家在以後的Oracle數據庫操作過程中要特別注意上文中講到的問題,以免給大家的工作帶來不必要的麻煩。