2012-04-15 85 views
0

我需要使输出可读。对于我直接编写的查询,我成功地这样做了。格式SQL输出

  1. 我需要对涉及游标的查询做同样的事情,也就是说,我需要将游标返回的记录格式化。但我无法做到。

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

+1

你可以把光标的结果放到临时表中,然后查询那个临时表达到你想要的格式吗? – DOK 2012-04-15 16:12:16

+2

如果你有一个游标,你肯定知道列名是什么,然后再选择它们? – Ben 2012-04-15 16:16:43

+0

@本人想要隐式打印。 – user980411 2012-04-16 01:29:21

回答

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;