1、每个表仅能有一个LONG列
--创建带一个字段long型的表
CREATE TABLE FFF (ID NUMBER,NAME LONG);
--再增加一个long型后,提示:ORA-01754: 表只能包含一个 LONG 类型的列
ALTER TABLE FFF ADD CODE LONG;
2、LONG列不能出现在完整性约束中(除了NULL和NOT NULL约束)
--比如主键约束,如下创建long型字段为主键的话提示:ORA-02269: 关键字列不能是 LONG 数据类型
DROP TABLE FFF;
CREATE TABLE FFF (ID NUMBER,NAME LONG primary key);
3、LONG列不能被索引
CREATE TABLE FFF (ID NUMBER,NAME LONG);
--如果在long型的字段上创建索引会提示:ORA-00997: 非法使用 LONG 数据类型
CREATE INDEX INX_NAME ON FFF(NAME);
4、存储函数不能返回LONG值
--如下函数所示,返回long型,执行该函数会提示(ORA-00997: 非法使用 LONG 数据类型)
CREATE OR REPLACE FUNCTION funny2 RETURN LONG IS
v_yct LONG;
BEGIN
v_yct := rpad('a', 32760, 'b');
RETURN length(v_yct);
END;
5、LONG列不能出现在SQL语句的某些部分中:
在SELECT语句中的 WHERE,GROUP BY,ORDER BY、CONNECT BY 子句或 DISTINCT 操作符中;
SQL函数(如SUBSTR、INSTR);
子查询或被集合操作符结合的查询中的选择列表;
CREATE TABLE AS SELECT 语句中的选择列表若包含long型的字段则不能创建。
INSERT INTO FFF SELECT OBJECT_ID,OBJECT_NAME FROM USER_OBJECTS WHERE ROWNUM<4;
--如下查询均会提示:ORA-00997: 非法使用 LONG 数据类型
SELECT * FROM FFF WHERE NAME='1';
SELECT name FROM FFF GROUP BY name;
SELECT * FROM FFF ORDER BY name;
SELECT DISTINCT NAME FROM FFF;
SELECT * FROM user_objects WHERE object_name IN (SELECT name FROM fff);
SELECT name FROM fff UNION
SELECT name FROM fff ;
CREATE TABLE ffff AS SELECT * FROM fff;
--如下查询提示:ORA-00932: 数据类型不一致: 应为NUMBER, 但却获得LONG
SELECT substr(name,1,2) FROM fff;
SELECT instr(name,'1') FROM fff;
--long类型是不是存储字符的时候只能有32760个字节?如果将其加到32761就提示(ORA-06502: PL/SQL: 数字或值错误)
CREATE OR REPLACE FUNCTION funny2 RETURN VARCHAR2 IS
v_yct LONG;
BEGIN
v_yct := rpad('a', 32760, 'b');
RETURN length(v_yct);
END;
对于字符过长的字段或变量可以采用clob类型,一般不要使用long型。
转自:http://www.cnblogs.com/lanzi/archive/2011/06/24/2089291.html