我正在编写一个PL SQL块,用于检索数据库中所有表的列和数据类型。我能够获得列,但不能获取数据类型。寻找一个好方法的建议。任何帮助,将不胜感激。我的代码如下在PLSQL中检索列名和数据类型
ACCEPT p_1 PROMPT 'Please enter the Table Name'
DECLARE
v_table_name VARCHAR2(40) :='&p_1';
-- First cursor
CURSOR get_tables IS
SELECT DISTINCT table_name
FROM user_tables
WHERE UPPER(table_name) = UPPER(v_table_name);
--Second cursor
CURSOR get_columns IS
SELECT DISTINCT column_name
FROM user_tab_columns
WHERE table_name = v_table_name;
v_column_name VARCHAR2(100);
-- Third Cursor
CURSOR get_types IS
SELECT data_type
FROM user_tab_columns
WHERE table_name = v_table_name;
v_data_type user_tab_columns.data_type%type;
BEGIN
-- Open first cursor
OPEN get_tables;
FETCH get_tables INTO v_table_name;
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('Table = ' || v_table_name);
DBMS_OUTPUT.PUT_LINE('=========================');
CLOSE get_tables;
-- Open second cursor
OPEN get_columns;
FETCH get_columns INTO v_column_name;
WHILE get_columns%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(' ' || v_column_name);
FETCH get_columns INTO v_column_name;
END LOOP;
CLOSE get_columns;
--Open Third Cursor
OPEN get_types;
FETCH get_types into v_data_type;
WHILE get_types%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(' ' || v_data_type);
FETCH get_types into v_data_type;
END LOOP;
CLOSE get_types;
END;
我的错误状态PLS-00371:最多一个声明“V_DATA_TYPE”允许
我主要关心的是如何做我宣布,将从您的select语句接受的值的变量,考虑的事实,数据类型可以是日期,数字,字符等的varchar – user1576782 2012-08-07 01:55:56
我不知道你想什么完成这个变量。但是我会将data_type查询的结果放在一个普通的简单字符串中(转换或做你必须做的)并从那里向前移动。 – 2012-08-07 02:00:52
那么,我目前的查询返回所有的表与列,我也希望返回数据类型。我很困惑如何使用你给出的select语句。你能给一个编码例子吗? – user1576782 2012-08-07 02:03:26