使用LONG的限制

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值