在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个字节的字符数。