我需要使我的输出可读。对于我直接编写的查询,我已经成功地做到了。
我需要对涉及游标的查询执行相同的操作,也就是说,我还需要对游标返回的记录进行格式化。但我做不到。
我改为显式打印列名,然后打印记录。还是一样。有什么办法,我也可以检索标题,然后根据它们的长度,格式化接收到的记录吗?
如果我理解正确,您需要的是动态解析和lpad-rpad
函数。
使用DBMS_SQL包,您可以动态解析 SQL 语句。我把下面的代码块扔在了我的头上,所以可能会有语法错误,但它应该会给你这个想法。
declare
ln_cur number;
ln_colCnt number;
l_sqlDesc DBMS_SQL.DESC_TAB;
begin
ln_cur := DBMS_SQL.open_cursor;
DBMS_SQL.parse(ln_cur, 'select * from dual', DBMS_SQL.NATIVE);
DBMS_SQL.describe_columns(ln_cur, ln_colCnt, l_sqlDesc);
DBMS_OUTPUT.put_line(l_sqlDesc(1).col_name); --First Column Name.
DBMS_SQL.close_cursor(ln_cur);
end;
lpad-rpad
如果要格式化输出,还需要检查函数。试试这个,自己看看:
begin
DBMS_OUTPUT.put_line(lpad(20, "Ford"));
DBMS_OUTPUT.put_line(lpad(20, "Prefect"));
end;