非常簡單的一個PROCEDURE,COMPILER 也OK,但是一執行就會有

錯誤 ORA-00903: invalid table name

TABLE真的存在,為何說INVALID呢?

CREATE OR REPLACE PROCEDURE TEST2
IS
   sql_stmt   VARCHAR2 (4000);
   tablen varchar2(10);
BEGIN
   tablen := 'test1';
   sql_stmt := 'TRUNCATE TABLE :1';
   EXECUTE IMMEDIATE sql_stmt USING tablen  ;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;

 

原因就是tablename 不能當作參數來使用,

改成下面的做法就OK了

CREATE OR REPLACE PROCEDURE TEST2
IS
   sql_stmt   VARCHAR2 (4000);
   tablen varchar2(10);
BEGIN
   tablen := 'test1';
   sql_stmt := 'TRUNCATE TABLE ' || tablen;
   EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;

 

FUNCTION 裡應該也是相同適用

arrow
arrow
    文章標籤
    ORACLE
    全站熱搜

    味味A 發表在 痞客邦 留言(0) 人氣()