第一步:查询语句如下:
DECLARE
v_table tabs.table_name%TYPE;
v_sql VARCHAR2(888);
v_q NUMBER;
CURSOR c1 IS
SELECT table_name tn FROM tabs;
TYPE c IS REF CURSOR;
c2 c;
BEGIN
DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');
FOR r1 IN c1 LOOP
v_table :=r1.tn;
v_sql :='SELECT count(*) q FROM '||v_table||' where rownum = 1';
OPEN c2 FOR v_sql;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
IF v_q=0 THEN
DBMS_OUTPUT.PUT_LINE(v_table);
END IF;
END LOOP;
CLOSE c2;
END LOOP;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');
END; /(在plsql developer执行查询语句即可,可以在commd file中也可以直接在查询页面中)
第二步:但是如果不进行设置的话在plsql developer中执行会报错的;
报错11:不显示输出结果
解决方法:设置DBMS_OUTPUT.put_line输出显示
SET SERVEROUTPUT ON
另外还有几个关于DBMS_OUTPUT.put_line的设置:
(2 、关闭DBMS_OUTPUT.put_line输出显示
SET SERVEROUTPUT OFF
3、设置DBMS_OUTPUT缓冲区大小
SET SERVEROUTPUT ON SIZE number(1000)
dbms_output.enable(1000)
4、设置只显示DBMS_OUTPUT默认的长度
SET SERVEROUTPUT ON FORMAT TRUNCATED
5 、设置空格的输出
SET SERVEROUTPUT ON FORMAT WRAPPED
6、取消空格的输出
第三步:要用dbms_output.put_line来输出语句,遇到以下错误:
ERROR 位于第 1 行:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: 在"SYS.DBMS_OUTPUT", line 35
ORA-06512: 在"SYS.DBMS_OUTPUT", line 198
ORA-06512: 在"SYS.DBMS_OUTPUT", line 139
ORA-06512: 在"TEST.RUNSTATS_PKG", line 45
ORA-06512: 在line 1
这是因为在sqlplus下,如果set serveroutput on此时就会用dbms_output将相关的信息打印到屏幕上,如果sqlplus登录环境没有设置buffer的大小,默认情况下是20000,将打印打开也同时赋予20000的buffer,如果输出超过这个值,则会报以上错误!
设置更大的buffer值,最大支持1000000!
可以使用 exec dbms_output.enable(200000)来设置该buffer值。
注意千万不要忘了exec这个词,否则不会执行的。