我正在尝试使用 dbms_output 执行 pl/sql 块以获取控制台输出,但 SQL 开发人员的唯一答案是“匿名块已完成”。
declare
v_count integer;
lines dbms_output.chararr;
num_lines number;
begin
dbms_output.ENABLE;
num_lines := 0;
for r in (select table_name, owner from all_tables
where owner = 'SYSAME'
and table_name like 'SYZ%'
and table_name not in (select distinct table_name from all_tab_columns
where OWNER = 'SYSAME'
and table_name like '%SYZ%'
and column_name not like '%FL_IDE_FILIALE%'))
loop
execute immediate 'select count(*) from ' || r.table_name || ' where fl_ide_filiale = 12'
into v_count;
dbms_output.Put_line(r.table_name ||';'|| r.owner ||';'|| v_count ||';'|| SYSDATE );
num_lines := num_lines + 1;
end loop;
dbms_output.get_lines(lines, num_lines);
dbms_output.Put_line(num_lines);
FOR i IN 1..num_lines LOOP
dbms_output.Put_line(lines(i));
END LOOP;
end;
知道为什么我没有获得任何输出吗?
Q2:有没有办法不使用字符串线和类似表格的方式绘制输出。在这种情况下,类似于具有此值的选择:
r.table_name, r.owner, v_count, SYSDATE
您必须
SET SERVEROUTPUT ON
在执行 PL/SQL 脚本之前运行。回答问题2:
在 PL-SQL 中构建匿名块时,无法像 Sql Server 一样显示结果。您必须使用过程或函数来完成。ps:函数必须返回一个 sys_refcursor。
但是,嘿,我有类似的问题......我为这个案例所做的是创建一个存储过程来传递一串值并使用简单的数学和绘图技术将其显示为表格。(我没有存储过程,这是我以前的工作)