格式化SQL输出

时间:2012-04-15 16:06:51

标签: sql oracle select plsql cursor

我需要让我的输出可读。对于我直接写的查询,我已经成功地这样做了。

  1. 我需要对涉及游标的查询执行相同的操作,即具体而言,我还需要将游标返回的记录进行格式化。但我无能为力。

  2. 我改为明确打印列名,然后打印记录。还是一样。有什么办法,我也可以检索标题,然后根据它们的长度,格式化收到的记录吗?

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您需要的是动态分析和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;