在Oracle系统的历史中,Oracle旧版本一直使用LONG类型存储大对象数据,即使现在Oracle版本支持使用LOB(即BLOB、CLOB、BFILE)类型,但LONG类型仍然支持,特别是Oracle系统的数据字典许多还使用LONG类型存储大文本数据。
✿ 问题的提出
若表的大文本数据以LONG类型存储,在SQL*Plus下对LONG列进行查询时,只能看到LONG列的前80个字符(行宽的默认值是80个字符)。那么,如何才能看到LONG类型的完整信息呢?
✿ 实现技术
可通过SET LONG {80 | n}命令来实现显示更多的LONG列的结果,这里的n表示字节数,可以是1~2,000,000,000之间的数。
✿ 实现步骤
在SQL>提示下,可随时用SET LONG命令设置LONG类型的显示字节数,当没有设置前默认的LONG类型的显示字节数一直是80字节,如:
SQL> desc dba_views
名称 是否为空? 类型
----------------------------------------------------- -------- ------------
--
OWNER NOT NULL VARCHAR2(30)
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
… …
SQL> show LONG
LONG 80
SQL> col owner for a20
SQL> col view_name for a20
SQL> set line 180
SQL> select owner,view_name,text from dba_views where owner='SCOTT';
OWNER VIEW_NAME TEXT
-------------- -------------- --------------------------------------------
SCOTT CLERK select empno,ename,deptno,job
From emp where job= 'CLERK'
With check o
SCOTT DEPT20 select ename,deptno,job, sal*12 sal12
From emp where deptno=20
SCOTT DML_EMP select empno,ename,job,deptno
From emp
SCOTT EMP20 select deptno,count(*) tot_emp,sum(sal) tot_sal
from emp group by deptno
SCOTT V_DEPT select "DEPTNO","DNAME","LOC" from dept
SQL>--设置LONG 类型的显示字节为3200 后,再运行同样的查询语句:
SQL> set LONG 32000
SQL> l
1* select owner,view_name,text from dba_views where owner='SCOTT'
SQL> /
OWNER VIEW_NAME TEXT
------------------------------------------------------ -------- -----------
SCOTT CLERK select empno,ename,deptno,job
From emp where job= 'CLERK'
With check option
SCOTT DEPT20 select ename,deptno,job, sal*12 sal12
From emp where deptno=20
SCOTT DML_EMP select empno,ename,job,deptno
From emp
SCOTT EMP20 select deptno,count(*) tot_emp,sum(sal) tot_sal
from emp group by deptno
SCOTT V_DEPT select "DEPTNO","DNAME","LOC" from dept
✿ 说明
在SQL>下查询带LONG类型前,建议先用SET LONG n命令设置LONG类型的显示字节数,否则只能看到前80个字节的字符数。