我有我需要刪除和創建表的功能。在下面的例子中我嘗試創建表,但它無法如何在Oracle函數內創建和刪除表?
CREATE OR REPLACE FUNCTION DEVTEST
RETURN NUMBER
IS
COMMAND VARCHAR2(256);
ID VARCHAR2(128);
NAME VARCHAR2(128);
TMP_LIST VARCHAR2(128);
BEGIN
ID := '12345';
NAME := 'ABCdef';
TMP_LIST := 'tmpTest';
command := 'create table ' || TMP_LIST || ' (USER_ID VARCHAR2(11), USER_NAME VARCHAR2(36))';
DBMS_OUTPUT.PUT_LINE('command = ' || command);
EXECUTE IMMEDIATE command;
return 0;
END;
我調用該函數:
select NSB_DEVTEST() from dual
並且得到錯誤:
ORA-14552:無法執行DDL,在查詢或DML中提交或回滾ORA-06512:在「DEV1_SERVER.DEVTEST」,第15行
如何更正此問題以在函數內創建/刪除表?
我的服務器的詳細信息:
- Oracle數據庫10g企業版發佈10.2.0.5.0 - 64bi
- PL/SQL發佈10.2.0.5.0 - 生產
- CORE 10.2.0.5.0生產
- TNS用於Solaris:版本10.2.0.5.0 - 生產
- NLSRTL版10.2.0.5.0 - 生產
爲什麼一個函數而不是一個過程? – Mat
這並不回答你的問題,但動態創建/刪除表幾乎總是錯誤的方法。你需要一個'TEMPORARY TABLE'嗎? –
使用過程,而不是函數 –