浏览 2756 次
锁定老帖子 主题:查看当前用户所有表信息存储过程(输出)
精华帖 (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; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |