ITPub博客

首页 > Linux操作系统 > Linux操作系统 > How to select the one column per row in display?

How to select the one column per row in display?

原创 Linux操作系统 作者:jlandzpa 时间:2019-04-21 09:06:05 0 删除 编辑

从网上找到的一个脚本,自己改了改.


create or replace procedure print_table
(qry in varchar2)
as
q_cursor         integer;
column_val       varchar2(256);
tretval          integer;
col_cnt          integer;
desc_t           dbms_sql.desc_tab;
error_position   integer;
fileid           utl_file.file_type;
filedir          varchar2(250);
filename         varchar2(250);
t_query          varchar2(4000);
tstr             varchar2(200);
statement_error  exception;
pragma exception_init(statement_error,-921);
begin
  t_query := ltrim(rtrim(qry));
  dbms_output.enable(1000000);
  if substr(t_query,length(t_query),1) in (';','/') then
     t_query := substr(t_query,1,length(t_query)-1);
  end if;
  q_cursor  := dbms_sql.open_cursor;
  dbms_sql.parse(q_cursor,t_query,dbms_sql.v7);
  error_position := dbms_sql.last_error_position;
  dbms_sql.describe_columns(q_cursor,col_cnt,desc_t);
  for i in 1 .. col_cnt loop
    dbms_sql.define_column(q_cursor,i,column_val,255);
  end loop;
  tretval := dbms_sql.execute(q_cursor);
  loop
    tretval := dbms_sql.fetch_rows(q_cursor);
    if tretval = 0 then
       exit;
    end if;
    for i in 1 .. col_cnt loop
        dbms_sql.column_value(q_cursor, i,column_val);
        dbms_output.put_line(rpad(desc_t(i).col_name,30,' ') || ':'||nvl(column_val,'空值'));
    end loop;
    dbms_output.put_line('-------------结束-------------');
  end loop;
  exception when others then
  error_position := dbms_sql.last_error_position;
  raise_application_error(-20001,sqlcode||' '||sqlerrm||' Error at '||error_position);
end;
/

set serveroutput on
exec print_table('select * from tab where rownum < 3')

过程已创建。

SQL>
SQL> set serveroutput on
SQL> exec print_table('select * from tab where rownum < 3')
TNAME                         :AAA
TABTYPE                       :TABLE
CLUSTERID                     :空值
-------------结束-------------
TNAME                         :AQ$DEF$_AQCALL
TABTYPE                       :VIEW
CLUSTERID                     :空值
-------------结束-------------

PL/SQL 过程已成功完成。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/936/viewspace-60478/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2001-10-12

  • 博文量
    240
  • 访问量
    172291