首先创建保存表
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;
执行结果如下: