" DESC TABLE_NAME" Oracle中的命令不能与pl / sql块

时间:2015-09-30 10:07:19

标签: oracle plsql oracle11g

我使用的是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;
    /

我尝试了一切,但不断得到错误。 请帮我。非常感谢你

4 个答案:

答案 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'

来源:http://ss64.com/ora/desc.html

答案 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