Connecting Tech Pros Worldwide Help | Site Map

Dynamically execute PL/SQL statement

  #1  
Old July 19th, 2005, 11:18 PM
Agoston Bejo
Guest
 
Posts: n/a
I am looking for the PL/SQL equivalent of the VBScript Exec and/or Eval
functions, i.e. I want to be able to dynamically create a statement, then
execute it in the current PL/SQL context, e.g.

declare
x integer := 5;
begin
ExecuteStatement('x := 10');
dbms_output.put_line(x); -- should put "10"
if EvaluateExpression('x*2 = 20') then
dbms_output.put_line('Yes');
else
dbms_output.put_line('No');
end if; -- should put 'Yes'
end;


EXECUTE IMMEDIATE doesn't seem to work, because it runs the statement in the
global context, not inside the context of the current function.


  #2  
Old July 19th, 2005, 11:18 PM
Kamal
Guest
 
Posts: n/a

re: Dynamically execute PL/SQL statement


"Agoston Bejo" <gusz1@freemail.hu> wrote in message news:<clt7a9$ruj$1@news.caesar.elte.hu>...
[color=blue]
> [...] because it runs the statement in the
> global context, not inside the context of the current function.[/color]

You could you use global variables in packages, but it is often a bad
practice, prone to errors.

You can write:

execute immediate ('begin pkname.glob_var0 := something; end;');

Kamal
  #3  
Old July 19th, 2005, 11:18 PM
Jan
Guest
 
Posts: n/a

re: Dynamically execute PL/SQL statement


DECLARE

v NUMBER;

BEGIN

EXECUTE IMMEDIATE
'BEGIN :1:=10;END;'
USING OUT v;

DBMS_OUTPUT.PUT_LINE(v);

END;

Jan
  #4  
Old July 19th, 2005, 11:18 PM
GQ
Guest
 
Posts: n/a

re: Dynamically execute PL/SQL statement


"Agoston Bejo" <gusz1@freemail.hu> wrote in message news:<clt7a9$ruj$1@news.caesar.elte.hu>...[color=blue]
> I am looking for the PL/SQL equivalent of the VBScript Exec and/or Eval
> functions, i.e. I want to be able to dynamically create a statement, then
> execute it in the current PL/SQL context, e.g.
>
> declare
> x integer := 5;
> begin
> ExecuteStatement('x := 10');
> dbms_output.put_line(x); -- should put "10"
> if EvaluateExpression('x*2 = 20') then
> dbms_output.put_line('Yes');
> else
> dbms_output.put_line('No');
> end if; -- should put 'Yes'
> end;
>
>
> EXECUTE IMMEDIATE doesn't seem to work, because it runs the statement in the
> global context, not inside the context of the current function.[/color]


What is it you would like to do that you can't do ?
The following is an example using an anonymous block
to create a table in the schema running the script,
followed by the same thing in a procedure (that could take
parameters).

Declare
v_obj number;
v_tblsp varchar2(30);
Begin
Select count(*) into v_obj
from user_tables
where table_name = 'T_EMP';
If v_obj = 0 then
Select tablespace_name into v_tblsp
from user_tables
where table_name = 'EMPLOYEE';
execute immediate 'Create table T_EMP (c1 number primary key, c2
varchar2(20))'||
' tablespace '|| v_tblsp;
end if;
End;
/
Create or replace procedure testx authid current_user as
v_obj number;
v_tblsp varchar2(30);
Begin
Select count(*) into v_obj
from user_tables
where table_name = 'T_EMP';
If v_obj = 0 then
Select tablespace_name into v_tblsp
from user_tables
where table_name = 'EMPLOYEE';
execute immediate 'Create table HR_OWN.T_EMP (c1 number, c2
varchar2(20))'||
' tablespace '|| v_tblsp;
end if;
End;
/
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Dynamically execute PL/SQL statement Agoston Bejo answers 3 June 27th, 2008 07:53 PM
Need to dynamically generate a SQL SELECT which excludes NULL columns Tom Urbanowicz answers 4 June 27th, 2008 05:58 PM
DB2 SQL Procedural Language Outside Procedure Spencer answers 10 November 12th, 2005 09:12 AM
Need to dynamically generate a SQL SELECT which excludes NULL columns Tom Urbanowicz answers 4 July 19th, 2005 09:57 PM