新しい一時テーブルを作成するPL/SQL関数があります。テーブルの作成には。を使用しますexecute immediate
。oracle sqldeveloperで関数を実行すると、すべて問題ありません。この関数は、エラーなしで一時テーブルを作成します。しかし、Uが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.
アップデート
申し訳ありませんが、タブレットPCから書き込み、テキストのフォーマットに問題があります。私の機能:
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;