PL/SQL实现获得所有表名及列名到表

首先创建保存表

CREATE TABLE table_tmp(user_name varchar2(20),table_name VARCHAR2(100),col_name VARCHAR2(200));
COMMIT;


然后执行匿名块如下(注意匿名块中用不了DDL操作,所以先创建表):

DECLARE
  CURSOR CUR_TABLE IS --定义游标取出表名和列名
    SELECT TABLE_NAME, COLUMN_NAME FROM USER_TAB_COLUMNS;
  CUR01   CUR_TABLE%ROWTYPE;
  U_NAME  VARCHAR2(100) := '&a';--自定义输入用户名
  U_COUNT INTEGER;              --存储行数用
  T_NAME  USER_TAB_COLUMNS.TABLE_NAME%TYPE; --存储表名
  C_NAME  USER_TAB_COLUMNS.COLUMN_NAME%TYPE;--存储列名 
BEGIN
  OPEN CUR_TABLE; --打开游标
  LOOP
    FETCH CUR_TABLE
      INTO CUR01;
    EXIT WHEN CUR_TABLE%NOTFOUND; --没有数据就退出
    T_NAME := CUR01.TABLE_NAME;   --取出游标的值赋给变量
    C_NAME := CUR01.COLUMN_NAME;
    INSERT INTO TABLE_TMP VALUES (U_NAME, T_NAME, C_NAME); --插入到table_tmp表
  END LOOP;
  U_COUNT := CUR_TABLE%ROWCOUNT; --获得行数
  CLOSE CUR_TABLE;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Success,effect lines:'||U_COUNT); --成功输出影响行数
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('no_data_found');
  WHEN OTHERS THEN
    ROLLBACK;  --没成功就回滚
    DBMS_OUTPUT.PUT_LINE(U_COUNT || 'error');
END;

执行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值