我使用的是Oracle 11g R2,我一直在尝试执行下面给出的pl / sql过程: -
SET SERVEROUTPUT ON
DECLARE
TABLENAME VARCHAR2(100) := 'TABLE_NAME';
BEGIN
DESC TABLENAME;
END;
/
或
SET SERVEROUTPUT ON
DECLARE
TABLENAME VARCHAR2(100) := 'TABLE_NAME';
BEGIN
EXECUTE IMMEDIATE 'DESC TABLENAME';
END;
/
我尝试了一切,但不断得到错误。 请帮我。非常感谢你
答案 0 :(得分:1)
如果您对user_tab_columns视图具有读取权限,那么这将返回相同的内容。刚刚验证过。
SELECT
column_name "Name",
nullable "Null?",
concat(concat(concat(data_type,'('),data_length),')') "Type"
FROM user_tab_columns
WHERE table_name='TABLE_NAME'
答案 1 :(得分:1)
SET SERVEROUTPUT ON
DECLARE
TABLENAME VARCHAR2(100) := 'TABLE_NAME';
BEGIN
DESC TABLENAME;
END;
您误解了DESC的使用。 SQL * PLUS命令中的DESC描述了Oracle表,视图,同义词,包或函数。你不能在pl sql块中使用它。
由于不清楚你要做什么,我假设你只想打印存储在变量中的字符串。你可以使用dbms_output.put_line()。试试这个
DECLARE
TABLENAME VARCHAR2(100) := 'TABLE_NAME';
BEGIN
DBMS_OUTPUT.PUT_LINE(TABLENAME);
END;
答案 2 :(得分:0)
set serveroutput on
begin
FOR cursor1 IN (SELECT * FROM ALL_TABLES where OWNER='ABC' ORDER BY TABLE_NAME)
LOOP
DBMS_OUTPUT.PUT_LINE(cursor1.TABLE_NAME);
FOR cursor2 IN (select * from cols where TABLE_NAME=cursor1.TABLE_NAME ORDER BY COLUMN_NAME)
LOOP
DBMS_OUTPUT.PUT_LINE(cursor2.COLUMN_NAME);
END LOOP;
END LOOP;
end;
答案 3 :(得分:0)
select 'desc '||table_name
from all_tables
order by 1