**URGENT** Problem using execute immediate in a procedure ...
Hi all,
I am writing this procedure
create or replace procedure pr_test is
begin
EXECUTE IMMEDIATE 'CREATE or replace view test1 as select * from table_name';
end ;
when I execute this procedure even in the same schema who owns this table it gives me this message.
BEGIN pr_test; END;
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "COLIS.PR_TEST", line 3
ORA-06512: at line 1
can any body lets me know the solution????
Thanks in advance
Take Care !
Ghulam
Thank you very much fellows.
But I have reached at this point that one has to have create view privellege explicitly to create view using a dynamic sql statemetn. Actually I could create the view using SQL*Plus and every thing was working fine through SQL*Plus. But I granted the rights of create user from a user having DBA role.
Anyways! Thank you very much for contributing this discussion. I really appreciate it.
Ghulam Mustafa Butt
Similar Messages
-
Problem using EXECUTE IMMEDIATE
Hi,
I am running the following procedure..
table emp ( empno number,ename varchar2 , dept varchar2 )
CREATE OR REPLACE PROCEDURE Sp_Test11 ( p_dept IN VARCHAR2 )
IS
m_count NUMBER := NULL;
m_sql_query VARCHAR2(32767) := 'SELECT COUNT(*) INTO m_count FROM emp WHERE dept = ';
BEGIN
m_sql_query := m_sql_query||''''||p_dept||''''||';';
EXECUTE IMMEDIATE m_sql_query ;
END Sp_Test11;
I am getting the "Invalid character" error on execute immediate statement when i debug ..
Please guide.venkata wrote:
Use RETURN or RETURNING INTO Keywords in execute immediate statement.RETURNING INTO is used with INSERT/UPDATE/DELETE statements when there will be triggers that will populate something on the table after an insert or update etc. e.g. when you insert a new record and you want to return the primary key that is automatically generated from a sequence so you can use it in your code for something else.
If you are SELECTing data then you would use the INTO keyword as Gj demonstrated.
SQL> ed
Wrote file afiedt.buf
1 declare
2 v_cnt number;
3 begin
4 execute immediate 'select count(*) from x' returning into v_cnt;
5* end;
SQL> /
declare
ERROR at line 1:
ORA-06547: RETURNING clause must be used with INSERT, UPDATE, or DELETE statements
ORA-06512: at line 4
SQL> ed
Wrote file afiedt.buf
1 declare
2 v_cnt number;
3 begin
4 execute immediate 'select count(*) from x' into v_cnt;
5* end;
SQL> /
PL/SQL procedure successfully completed.
SQL>It's amazing how many people are just jumping in here with wrong answers. -
Problem with execute immediate code
I have the following anonymous block:
declare
v_id_char varchar2(50) := '2072018827821663';
trace_flg number := 0;
v_exe_imm varchar2(500) := 'univdb.EML_CAMPUS_200605(v_id_char, trace_flg)';
v_exe_imm2 varchar2(500) := 'univdb.EML_CAMPUS_200605(:v_id_char, :trace_flg)';
begin
--1) execute immediate v_exe_imm;
--2) execute immediate v_exe_imm2 using v_id_char, trace_flg);
univdb.EML_CAMPUS_200605(v_id_char, trace_flg);
end;
The compiled procedure that is getting called is defined like this:
CREATE OR REPLACE PROCEDURE univdb.eml_campus_200605(
hist_str IN VARCHAR2,
trace_flg IN NUMBER := 0) IS ...
As you might expect, when I execute the block without execute immediate it works.
But either of the execute immediate statements results in ORA-00900: invalid SQL statment.
I want to use execute immediate because the procedure that gets called will need to be dynamic.
Help appreciated,
...elsaFor me, thats crude if you have a procedure thats
getting created dynamically.
anyway, you could try a
execute immediate ' begin ' || your_funny_proc || '
end;';But for sure the whole stuff is very error prone.Actually, the procedure itself isn't getting built dynamically, only which procedure to call. It's really quite clever in my opinion.
Anyway, I tried you suggestion:
declare
v_id_char varchar2(50) := '2072018827821663';
trace_flg number := 0;
v_exe_imm varchar2(500) := 'univdb.EML_CAMPUS_200605(v_id_char, trace_flg)';
v_exe_imm2 varchar2(500) := 'univdb.EML_CAMPUS_200605(:v_id_char, :trace_flg)';
begin
execute immediate 'BEGIN ' || v_exe_imm || '; END;';
--execute immediate v_exe_imm2 using v_id_char, trace_flg);
--univdb.EML_CAMPUS_200605(v_id_char, trace_flg);
end;
and got
ORA-06550: line 1, column 32:
PLS-00201: identifier 'V_ID_CHAR' must be declared
Did I misunderstand what you were trying for? -
Problem in Update statement using Execute Immediate
Hi All,
I am facing problem in update statement.
I am creating dynamic sql and use "execute immediate" statement to execute a update statement.
But it is not updating any thing there in the table.
I have created a query like :
update_query='Update '|| Table_Name ||' t set t.process_status =''Y'' where t.tid=:A';
Execute immediate update_query using V_Id;
commit;
But it is not updating the table.
I have a question , is execute immediate only does insert and delete?
Thanks
AshokSQL> select * from t;
TID P
101 N
SQL> declare
2 V_Id number := 101;
3 Table_Name varchar2(30) := 'T';
4 update_query varchar2(1000);
5 begin
6 update_query := 'Update '|| Table_Name ||' t set t.process_status =''Y'' where t.tid=:A';
7 Execute immediate update_query using V_Id;
8 commit;
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> select * from t;
TID P
101 Y -
Problem to insert using execute immediate
Have a procedure like this:
create or replace procedure proc_set_category(
VC_object_id IN number,
VC_object IN varchar2,
VC_category_id IN varchar2
is
sq varchar2(200);
BEGIN
sq:='INSERT INTO ' || VC_object ||'_category (' || VC_object || '_id,category_id) VALUES (' || VC_object_id || ',' || VC_category_id ||')';
EXECUTE IMMEDIATE sq;
END;
Procedure created.
but when i try to execute the following query it generates an error
execute proc_set_category(1,'news','event')
ERROR at line 1:
ORA-00984: column not allowed here
ORA-06512: at "SCOTT.PROC_SET_CATEGORY", line 10
ORA-06512: at line 1
I have a news_category table.where is the problem?sq:='INSERT INTO ' || VC_object ||'_category (' || VC_object || '_id,category_id) VALUES (' || VC_object_id || ',' || VC_category_id ||')';
EXECUTE IMMEDIATE sq;
execute immediate 'INSERT INTO ' || VC_object ||'_category (' || VC_object || '_id,category_id) VALUES (:1, :2)'
using VC_object_id, VC_category_id; -
Have problem when using EXECUTE IMMEDIATE.
Hi, i'm new here... i having problem when trying to use execute immediate statement... :(
procedure code as below:
create procedure copy_row(
p_table varchar2,
p_key varchar2,
p_keyval varchar2,
p_user varchar2,
p_frmto varchar2 default 'FROM')
IS
V_SQL VARCHAR2(500);
BEGIN
if upper(p_frmto)='FROM' then
V_SQL:='INSERT INTO '||P_TABLE||
' SELECT * FROM '||P_USER||'.'||P_TABLE||' WHERE '||P_KEY||' = '''||P_KEYVAL||'''';
elsif upper(p_frmto)='TO' then
V_SQL:='INSERT INTO '||P_USER||'.'||P_TABLE||
' SELECT * FROM '||P_TABLE||' WHERE '||P_KEY||' = '''||P_KEYVAL||'''';
end if;
EXECUTE IMMEDIATE V_SQL;
exception
when others then
raise_application_error(-20000,'PROCEDURE: COPY_ROW - UNABLE TO COPY ROWS! SQL='||V_SQL,TRUE);
end;
is there any limitation on using EXECUTE IMMEDIATE command? i need to use procedure because i'm using old form builder.... but the database server was 9i which able to use this command, so... i decide to use procedure....
i've done some testing on this.... assume the structure of schema1.table1 and schema2.table1 are same....
SQL> CREATE PROCEDURE TESTING IS
2 BEGIN
3 exeCute IMMEDIATE 'INSERT INTO schema1.table1 SELECT * FROM schema2.table1 WHERE column1 = ''abc''';
4 END;
5 /
Procedure created.
SQL> BEGIN
2 TESTING;
3 END;
4 /
BEGIN
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "SCHEMA1.TESTING", line 3
ORA-06512: at line 2
any idea?? or have better solution other than this?
database server:9i
sqlplus:SQL*Plus: Release 8.0.6.0.0Do you have an access to tables you are going to insert into / select from ?
Dynamic SQL checks the access permissions at runtime, not at the compilation stage:
SQL> create user master identified by master default tablespace users temporary
2 tablespace temp;
User created.
SQL> alter user master quota unlimited on users;
User altered.
SQL> grant create session to master;
Grant succeeded.
SQL> grant create table to master;
Grant succeeded.
SQL> grant create procedure to master;
Grant succeeded.
SQL> conn master/master
Connected.
SQL> create procedure wrong_prc
2 is
3 begin
4 execute immediate 'insert into master.t select * from scott.t';
5 end;
6 /
Procedure created.
SQL> create table t (id number);
Table created.
SQL> exec wrong_prc;
BEGIN wrong_prc; END;
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "MASTER.WRONG_PRC", line 4
ORA-06512: at line 1
SQL> conn scott/tiger
Connected.
SQL> grant select on t to master;
Grant succeeded.
SQL> conn master/master
Connected.
SQL> exec wrong_prc;
PL/SQL procedure successfully completed.
SQL> select * from t;
ID
1And don't use literals in dynamic SQL - you should use binding variables instead.
Rgds. -
How to use Execute Immediate to execute a procedure and return a cursor?
The procedure name is unknown until run time so I have to use Execute immediate to execute the procedure, the procedure return a cursor, but I can't figure out the right syntax to pass the cursor out.
To simplify the issue here, I create two procedures as examples.Assume I have a procedure called XDTest:
p_cur OUT SYS_REFCURSOR
IS
BEGIN
OPEN p_cur FOR
Select * from dummy_table;
END XDTest;
In another procedure, I want to use Execute Immediate to execute XDTest and obtain the result that return from the cursor into a local cursor so I can process the records:
p_cur OUT SYS_REFCURSOR
IS
l_cur SYS_REFCURSOR;
BEGIN
execute immediate 'BEGIN XDTest (:1); END;' using OUT l_cur;
END XDTest2;
However, this is not working, I get ORA-03113: end-of-file on communication channel error.
What syntax should I use here?
Cheerswell...
I update the XDTest2 procedure as below but when execute it get exceptions.I think the v_sqlstmt syntax is wrong, but I don't know what meant to be correct, please give some suggestions .
Cheers
-------------------- XDTest procedure --------------------------------------------------
p_cur OUT SYS_REFCURSOR
--AUTHID CURRENT_USER
IS
BEGIN
OPEN p_cur FOR
Select Table_Name from USER_Tables;
END XDTest;
-------------------- XDTest2 procedure --------------------------------------------------
p_cur OUT SYS_REFCURSOR
IS
TYPE T1 IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER ;
v_sqlstmt varchar2(1000):=null;
v_cursor number;
x_num number;
LN$Lig number := 0 ;
LN$MaxCol number := 0 ;
t T1 ;
v VARCHAR2(4000) ;
userTb User_Tables%ROWTYPE;
l_cur number;
BEGIN
LN$Lig := 0 ;
LN$MaxCol := 1 ;
--OPEN p_cur FOR
--execute immediate 'BEGIN XDTest (:1); END;' using OUT l_cur;
v_cursor:=dbms_sql.open_cursor;
v_sqlstmt:='begin :p_cur:="XDTest"(); END; ';
dbms_sql.parse(v_cursor,v_sqlstmt,DBMS_SQL.NATIVE);
dbms_sql.bind_variable(v_cursor,':p_cur',l_cur);
dbms_output.put_line('1');
-- Define the columns --
dbms_sql.DEFINE_COLUMN(v_cursor, 1, userTb.Table_Name, 30);
x_num:=dbms_sql.execute(v_cursor);
dbms_output.put_line('2');
-- Fetch the rows from the source query --
LOOP
IF dbms_sql.FETCH_ROWS(v_cursor)>0 THEN
-- get column values of the row --
dbms_sql.COLUMN_VALUE(v_cursor, 1,userTb.Table_Name);
dbms_output.put_line(userTb.Table_Name);
ELSE
-- No more rows --
EXIT;
END IF;
END LOOP;
dbms_sql.close_cursor(v_cursor);
END XDTest2;
---------------------- Error when execute ------------------------------------------------
1
BEGIN DevD0DB.XDTest2(:l_cur); END;
ERROR at line 1:
ORA-01007: variable not in select list
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1010
ORA-06512: at "SYS.DBMS_SQL", line 212
ORA-06512: at "DEVD0DB.XDTEST2", line 35
ORA-06512: at line 1
---------------------------------------------------------------------------------------------------- -
Using execute immediate creating a table from another
hi friend i wanted to create a table from a select statement in a pl sql procedure. i am using execute immediate but getting problems with it pls can anyone help me.
here is the query i am using
EXECUTE IMMEDIATE 'CREATE TABLE table_name AS (SELECT * FROM a_view WHERE column_name LIKE '%some_string%');
i need to know if this can be done and if yes how. pls help me its bit urgent too. the schema name is same and the privileges are available to create tables too.Your syntax is wrong.
If you would use a syntax higlighted editor, it would show.
Yout try to execute a string where another string is embedded. Please use two times single quote or use the 'q' function:
This one is correct:
EXECUTE IMMEDIATE 'CREATE TABLE table_name AS (SELECT * FROM a_view WHERE column_name LIKE ''%some_string%'')';
or this one:
EXECUTE IMMEDIATE q'|CREATE TABLE table_name AS (SELECT * FROM a_view WHERE column_name LIKE '%some_string%')|';
good luck -
Using EXECUTE IMMEDIATE with an NVARCHAR2 parameter
Hi everyone,
In the system I'm working on, my stored procedure receives an NVARCHAR2 parameter which contains a complete SQL statement. e.g.
'UPDATE SomeTable SET SomeTable.Value = 0'
I want to be able to execute this dynamically, using EXECUTE IMMEDIATE, but I've encountered a problem where this is apparently not supported (because the string is Unicode).
It is crucial that the string stays as Unicode, because of the data that may possible be baked into the SQL statement, and so casting it off to a VARCHAR2, or changing the parameter type, is not acceptable.
Is there a work-around for this issue? Even if it has a performance hit, it will be better than nothing :)
I've tried something like this;
declare
myVal VARCHAR2(256);
begin
myVal := 'UPDATE SomeTable SET SomeTable.Value = 2';
execute immediate 'BEGIN :x; END;' using myVal;
end;
But I get an error;
"bind variable 'X' not allowed in this context"
Has anyone any ideas?
Thanks for your help,
Chrisuhmm, I'm not sure if this is a valid testcase. the string could still be converted into ascii or we8iso8859p1 or whatever 1byte-character set you want.
What I think you should test is a two-byte character as part of SQL, PL/SQL resp. as in SQL all words are defined you can not enlarge it with a 2byte word. But in PL/SQL you could define your own variable. If this variable name itself contains a 2byte character, I guess it will fail.
(I have used l_vär and l_vér as variable names in my example)
Message was edited by:
Leo Mannhart
According to the PL/SQL Reference Guide PL/SQL consists of:
PL/SQL programs are written as lines of text using a specific set of characters:
Upper- and lower-case letters A .. Z and a .. z
Numerals 0 .. 9
Symbols ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ]
Tabs, spaces, and carriage returns
This seems no longer up-to-date as I could define a variable l_vär for instance as long as I use a 1byte char set (like iso8859p1). The same variable name as a n-byte char set like UTF-8 will give an error as my example shows. -
CREATE TEMPORARY TABLE USING EXECUTE IMMEDIATE
Hi All,
i have a question,
how can i create a temporary table using EXECUTE IMMEDIATE ??
Like:
CREATE GLOBAL TEMPORARY table new_table as (Select * from old_table);
Thanks,
Edited by: xDeviates on Jun 11, 2012 3:13 PMIt looks like you are approaching the problem incorrectly. As I suggested in Dynamic Select, it sounds like you, at most, want a function that returns a SYS_REFCURSOR (it's still not obvious to me why you would even want/ need to resort to dynamic SQL in the first place)
CREATE OR REPLACE FUNCTION get_dynamic_cursor( p_table_name IN VARCHAR2 )
RETURN sys_refcursor
IS
l_rc sys_refcursor;
BEGIN
OPEN l_rc FOR 'SELECT * FROM ' || dbms_assert.sql_object_name( p_table_name );
RETURN l_rc;
END;which you can then call from your application
SQL> variable rc refcursor;
SQL> exec :rc := get_dynamic_cursor( 'EMP' );
PL/SQL procedure successfully completed.
SQL> print rc
EMPNO ENAME JOB MGR HIREDATE SAL COMM
DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 801
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1601 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1251 500
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
DEPTNO
7566 JONES MANAGER 7839 02-APR-81 2976
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1251 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2851
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
DEPTNO
7782 CLARK MANAGER 7839 09-JUN-81 2451
10
7788 SCOTT ANALYST 7566 19-APR-87 3001
20
7839 KING PRESIDENT 17-NOV-81 5001
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
DEPTNO
7844 TURNER SALESMAN 7698 08-SEP-81 1501 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1101
20
7900 JAMES CLERK 7698 03-DEC-81 951
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
DEPTNO
7902 FORD ANALYST 7566 03-DEC-81 3001
20
7934 MILLER CLERK 7782 23-JAN-82 1301
10
14 rows selected.Justin -
Single quotes problem with execute immediate
Thanks for considering to solve the issue.
[i]Situation:
I am trying to create a procedure to perform a set of operations. As part of that, I am trying to create a table using execute immediate statement. This create table statement has a select sub query where p_LOB3 is the variable for the procedure of datatype varchar2.
Problem :
I need to pass the variable p_LOB3 as single quoted as it is of type Varchar2. Also I need to enclose the entire create table query within single quotes. How do I specify this as it is throwing an error when the PL/SQL engine is parsing the single quotes in the query used twice for different purposes as mention earlier.
Query:
execute immediate'create table test5 as select min(contract_number)as contract_number,contact_id,max(line_of_business) as line_of_business from mytable group by contact_id having min(contract_number) = max(contract_number) and max(Line_of_business) = 'p_LOB3' ';Thank you Todd,
Is just worked fine.
New issue is: I am not able to put 2 such statements in a single procedure and execute. Before I give parameters to the procedure, PL/SQL engine is actually creating a view of the mytable and naming is as test5, as a result I am not able to create a table as there is a view with the same name.
Right now, the workaround I am using is to create three different procedures to create three such tables. I know this is not a good idea....can you please tell me if there is a better way.
Procedure
CREATE OR REPLACE PROCEDURE SP_CREATE_0_0(p_LOB1 IN varchar2, p_LOB2 IN varchar2)
IS
BEGIN
execute immediate 'create table test5 as select min(contract_number) as
contract_number,contact_id,max(line_of_business) as line_of_business from
mytable group by contact_id having min(contract_number) = max(contract_number)
and max(Line_of_business) = ' ' ' || p_LOB1 || ' ' ' ';
execute immediate 'create table test5 as select min(contract_number) as
contract_number,contact_id,max(line_of_business) as line_of_business from
mytable group by contact_id having min(contract_number) = max(contract_number)
and max(Line_of_business) = ' ' ' || p_LOB1 || ' ' ' ';
END SP_CREATE_0_0;
/ -
Error while insert data using execute immediate in dynamic table in oracle
Error while insert data using execute immediate in dynamic table created in oracle 11g .
first the dynamic nested table (op_sample) was created using the executed immediate...
object is
CREATE OR REPLACE TYPE ASI.sub_mark AS OBJECT (
mark1 number,
mark2 number
t_sub_mark is a class of type sub_mark
CREATE OR REPLACE TYPE ASI.t_sub_mark is table of sub_mark;
create table sam1(id number,name varchar2(30));
nested table is created below:
begin
EXECUTE IMMEDIATE ' create table '||op_sample||'
(id number,name varchar2(30),subject_obj t_sub_mark) nested table subject_obj store as nest_tab return as value';
end;
now data from sam1 table and object (subject_obj) are inserted into the dynamic table
declare
subject_obj t_sub_mark;
begin
subject_obj:= t_sub_mark();
EXECUTE IMMEDIATE 'insert into op_sample (select id,name,subject_obj from sam1) ';
end;
and got the below error:
ORA-00904: "SUBJECT_OBJ": invalid identifier
ORA-06512: at line 7
then when we tried to insert the data into the dynam_table with the subject_marks object as null,we received the following error..
execute immediate 'insert into '||dynam_table ||'
(SELECT887684 wrote:
ORA-00904: "SUBJECT_OBJ": invalid identifier
ORA-06512: at line 7The problem is that your variable subject_obj is not in scope inside the dynamic SQL you are building. The SQL engine does not know your PL/SQL variable, so it tries to find a column named SUBJECT_OBJ in your SAM1 table.
If you need to use dynamic SQL for this, then you must bind the variable. Something like this:
EXECUTE IMMEDIATE 'insert into op_sample (select id,name,:bind_subject_obj from sam1) ' USING subject_obj;Alternatively you might figure out to use static SQL rather than dynamic SQL (if possible for your project.) In static SQL the PL/SQL engine binds the variables for you automatically. -
Selecting data from a table using Execute Immediate in 9i
Hi,
I was wondering how I would be able to do a SELECT on a table using EXECUTE IMMEDIATE. When I tried it (with the proc below), I got the following below. Can anyone tell me what I am doing wrong?
Using Scott/Tiger I tried this:
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE PROCEDURE P2
2 IS
3 v_SQL VARCHAR2(100);
4 BEGIN
5 v_SQL := 'Select * from Emp';
6 EXECUTE IMMEDIATE v_SQL;
7* END;
SQL> /
Procedure created.
SQL> exec p2
PL/SQL procedure successfully completed.
SQL> set serveroutput on
SQL> exec p2
PL/SQL procedure successfully completed.
SQL>
Thanks in advance.
Sincerely,
Nikhil Kulkarni1 CREATE OR REPLACE PROCEDURE P2
2 IS
3 v_SQL VARCHAR2(100);
erec emp%rowtype;
4 BEGIN
5 v_SQL := 'Select * from Emp';
6 EXECUTE IMMEDIATE v_SQL into erec;
7* END;
SQL> / -
Oracle 11G Copying a table using execute immediate
I want to copy the contents of one table into another using execute immediate.
This keeps failing with the following error
ORA-00903: invalid table name
ORA-06512: at "TABLE_COPY", line 6
ORA-06512: at line 8
create or replace
procedure TABLE_COPY(
TABLE1 varchar2,
TABLE2 varchar2)
is
begin
execute immediate 'insert into '||TABLE2||' (select * from '||TABLE1||')';
end;
Edited by: user9213000 on 24-Jan-2013 07:38user9213000 wrote:
I want to copy the contents of one table into another using execute immediate.
This keeps failing with the following error
ORA-00903: invalid table name
ORA-06512: at "TABLE_COPY", line 6
ORA-06512: at line 8
create or replace
procedure TABLE_COPY(
TABLE1 varchar2,
TABLE2 varchar2)
is
begin
execute immediate 'insert into '||TABLE2||' (select * from '||TABLE1||')';
end;
Edited by: user9213000 on 24-Jan-2013 07:38The standard advice when (ab)using EXECUTE IMMEDIATE is to compose the SQL statement in a single VARCHAR2 variable
Then print the variable before passing it to EXECUTE IMMEDIATE.
COPY the statement & PASTE into sqlplus to validate its correctness. -
Create temp table using EXECUTE IMMEDIATE
Is there any performance issue in creating globally temp table
using EXECUTE IMMEDIATE or creating globally temp table from
SQL PLUS.
Any response will be greatly appreciated.
nullAnish,
Creating tables is likely to be an expensive operation.
Performance issues can only be considered in comparison to
alternatives.
Alternatives include: PLSQL tables, cursors and/or recoding so
that tmp tables are not required. (One of our consultants reckons
that sqlserver temp tables are usually used to get around
limitations in sqlserver, ie slightly more complicated sql
statements could be used instead of simpler sql and temporary
tables).
I would think creating the temp table once during sqlplus would
be cheaper than creating and deleting it repeatedly at run time.
Note that EXECUTE IMMEDIATE may do an implicit commit (dbms_sql
certainly does). This may be got over my using the PRAGMA
AUTONOMOUS_TRANSACTION; direction which places a
procedure/function in a seperate transaction.
Turloch
P.S. We have some difficulty in getting information back from the
field/customer sites. If you have questions and answers that are
likely to be useful to other Oracle Migration Workbench
users, and migrators in general, please send them in for possible
inclusion in our Frequently Asked Question list.
Oracle Migration Workbench Team
Anish (guest) wrote:
: Is there any performance issue in creating globally temp table
: using EXECUTE IMMEDIATE or creating globally temp table from
: SQL PLUS.
: Any response will be greatly appreciated.
Oracle Technology Network
http://technet.oracle.com
null
Maybe you are looking for
-
Field status as mandatory while creation of RE-FX Lease Out Contract
Hi SAP Real Estate Friends, I have a requirement wherein we need to make the field status of some specific fields as mandatory for data input in RE-FX Lease Out Contract. The fields are mentioned below: 1. Profit Centre in Organizational Assignment T
-
As said in the question, my ipod touch will not connect to the newest version of itunes. When I plug it in, my compter recognizes that a device has been connected, yet it will not show up in itunes. I didn't have this problem until I just updated to
-
Case Insenstive Search using CLOB
Can you do case insenstive search in CLOB, using DBMS_LOB.instr or any other way or is it necessary to install inter media for that??
-
help me please to remove my old email address on my iphone. I already changed the address on the apple id page, but it hasn't tranferred to the phone and I cannot use my iphone. My head is about to explode!
-
Assigning custom process Account geneartion process window in GL/AP
Hi gurus, We have customized the project supplier account geneartion workflow for projects. BUt, when we try to assigne the work flow in GL-->flex fiel-->key--->account. we dont find out custome process in LOV. Plz help us to solve the problem. Regar