Oracle中Long類型的使用與不可使用


ORA-01754 表只能包含一個LONG類型的列
alter table 表名 add 字段名 long raw
錯誤原因:數據表中同時建立了LONG RAW類型和LONG類型。
--------------------------------------------------------------------------------------------------
一、可以在以下情況使用long字段:
1、 select的list列表。
SQL> insert into test_long values (1,'tgfdsfgdsgfsd');
已創建 1 行。
SQL> insert into test_long values (2,'asfafafasd');
已創建 1 行。
SQL> commit;
提交完成。
SQL> col id for 9999;
SQL> col description for a30;
SQL> select * from test_long;
ID DESCRIPTION
----- ------------------------------
1 tgfdsfgdsgfsd
2 asfafafasd
2、 update語句中的set子句:
SQL> update test_long
2 set description='hsy'
3 where id=2;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from test_long;
ID DESCRIPTION
----- ------------------------------
1 tgfdsfgdsgfsd
2 hsy
3、 insert語句中的values子句中。
SQL> insert into test_long values (1,'tgfdsfgdsgfsd');
已創建 1 行。
二、 限制使用long型字段的情況:
1、 一個表中只能使用一個long型字段。
SQL> alter table test_long add (description1 long);
alter table test_long add (description1 long)
*
ERROR 位於第 1 行:
ORA-01754: 表只能包含一個 LONG 類型的列
2、 使用long屬性來定義對象type。
SQL> Create type test_list as object(str1 varchar2(50),str2 long);
2 /
警告: 創建的類型帶有編譯錯誤。
SQL> Create type test_list as object(str1 varchar2(50),str2 number(5)) ;
2 /
類型已創建。
3、 Long字段不能出現在where子句中和完整性約束中。【除了null和not null約束】。
4、 Long字段不能用來indexed。
5、 存儲函數不能用來返回long值。
6、 在plsql程序單元中可以使用long數據類型來定義變量或者參數。但是不能從sql中調用這個程序單元。
7、 在一個單一的sql語句中,所有的long字段,updated tables和locked tables必須位於同一個數據庫。
8、 Long和long raw不能用在分布式sql語句中,不能復制。
9、如果表中同時有long和lob字段,在同一個sql語句中long和lob字段不能bind超過4000字節的數據。然而可以單獨bind超多4000字節在只有long或者lob字段時。
10、 擁有long字段的表不能位於assm【自動段管理表空間】中。
三、 long字段不能出現在sql語句的部分位置:
1、 含有group by 、order by、connect by、distinct關鍵字的select語句中。
2、 帶有unique操作的select語句。
3、 Create cluster語句的字段列表中。
4、 Create materialized view語句的cluster子句中。
5、 在function、expressions或contitions的內嵌sql中。
6、 含有group by子句的select列表查詢中。
7、 含有union、intersect、minus的查詢或者子查詢中。
8、 Create table …as select語句的select 列表中。
9、 Alter table…move 語句中。
10、 Insert語句的子查詢select 列表中。
四、 觸發器可以用以下方式使用long字段:
1、 一個sql語句內部的trigger可以插入一個long字段。
2、 如果long字段的數據可以轉換為constrained 數據類型(比如char和varchar2),此時可以引用在帶有trigger的sql語句。
3、 觸發器中的變量不能使用long定義。
4、 new和:old不能使用long字段。
總之:使用long字段的限制很多,使用情況很少,再加上oracle后期版本支持沒有提高,所以強烈建議使用lob型來代替long型字段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM