我有一个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