Create table and call it from sql

Posted by user1770816 on Stack Overflow See other posts from Stack Overflow or by user1770816
Published on 2012-10-24T10:22:46Z Indexed on 2012/10/24 11:01 UTC
Read the original article Hit count: 194

Filed under:
|

I have a PL/SQL function which creates a new temporary table. For creating the table I use execute immediate. When I run my function in oracle sql developer everything is ok; the function creates the temp table without errors. But when U use SQL:

Select function_name from table_name

I get an exceptions:

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.

Update

Sorry, write from tablet PC and have problems with format text. My function:

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;

© Stack Overflow or respective owner

Related posts about sql

Related posts about plsql