Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old July 19th, 2005, 11:18 PM
Agoston Bejo
Guest
 
Posts: n/a
Default Dynamically execute PL/SQL statement

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
Default 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
Default 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
Default 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;
/
 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles