我有一個PL/SQL函數可以創建一個新的臨時表。爲了創建表格我使用execute immediate
。當我在oracle sql developer中運行我的函數時,一切正常;該函數創建臨時表而沒有錯誤。但是,當U使用SQL:創建表並從sql中調用它
Select function_name from table_name
我得到一個例外:
ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
ORA-06512: at "SYSTEM.GET_USERS", line 10
14552. 00000 - "cannot perform a DDL, commit or rollback inside a query or DML "
*Cause: DDL operations like creation tables, views etc. and transaction
control statements such as commit/rollback cannot be performed
inside a query or a DML statement.
更新
對不起,從平板電腦和寫有格式的文本問題。我的功能:
CREATE OR REPLACE FUNCTION GET_USERS
(
USERID IN VARCHAR2
)
RETURN VARCHAR2
AS
request VARCHAR2(520) := 'CREATE GLOBAL TEMPORARY TABLE ';
BEGIN
request := request || 'temp_table_' || userid ||
'(user_name varchar2(50), user_id varchar2(20), is_administrator varchar2(5)') ||
' ON COMMIT PRESERVE ROWS';
EXECUTE IMMEDIATE (request);
RETURN 'true';
END GET_USERS;
有一些代碼,我們沒有看到?什麼是第10行? – awright18
使用編輯功能將代碼添加到原始文章中,請勿將其添加爲評論。 – GrandMasterFlush
謝謝。快點,犯了一個錯誤。更正 – Arol