论坛首页 综合技术论坛

查看当前用户所有表信息存储过程(输出)

浏览 2718 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-02  
下午没事写了个简单的存储过程,功能:查看当前用户所有表信息存储过程(输出在控制台)
刚开始考虑使用 execute immediate str_sql; 后考虑到与需求不符,放弃
用到了 动态游标,record, 代码很粗拙,请大家多指点!

create or replace procedure print_tablesinfo3
as
  str_sql varchar2(500);
  -- 创建一个数据行类型
  type rowdata is record (col_name   VARCHAR2(30),
                            col_type   VARCHAR2(106),
                            isnull   VARCHAR2(1),
                            col_desc VARCHAR2(4000)
                            );
   myrow rowdata;
   tab_name varchar2(50);--表名
   TYPE TCUR IS REF CURSOR; -- 动态游标声明
   CUR TCUR;--列信息游标
   TAB_CUR TCUR;--表信息游标
   v_user varchar2(50);-- 用户名
begin
 select user into v_user from dual;--查询当前用户名
 dbms_output.put_line('当前用户名: '||v_user);
-- 查询用户的所有表
  str_sql :=  'select object_name from user_objects  where object_type=' || q'!'TABLE'!';
  --dbms_output.put_line(str_sql);
  open TAB_CUR FOR str_sql;
  loop
  fetch TAB_CUR into tab_name;
        exit when TAB_CUR%notfound;
        dbms_output.put_line('');
         dbms_output.put_line('表名:'||tab_name);
         str_sql :=  'select  t.COLUMN_NAME,t.DATA_TYPE,t.NULLABLE, col.COMMENTS  from user_tab_columns t,user_col_comments col
          where col.table_name = t.table_name and  
t.COLUMN_NAME = col.COLUMN_NAME and t.TABLE_NAME = '||q'! '!' || tab_name || q'!' !' ;
          --dbms_output.put_line(str_sql); -- 调试时用
          dbms_output.put_line('列名   '||'   类型   '||'   是否为空   '||'   描述   ');
          dbms_output.put_line('=================================');
          open CUR FOR str_sql;
          loop
          fetch cur into myrow;
            exit when cur%notfound;
            dbms_output.put_line(myrow.col_name || '  ' || myrow.col_type || '  ' || myrow.isnull || '   '||myrow.col_desc );
          end loop;
          close cur;
          --dbms_output.put_line('=================================');
        end loop;
   close TAB_CUR;
end;
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics