on 2011 Jun 03 1:13 PM
I'm trying to set up a stored procedure that will handle calling another stored procedure that is passed in as a long varchar variable. I've been experimenting with EXECUTE IMMEDIATE, but so far I'm not getting anywhere with it.
I feel like I'm missing something simple, but haven't stumbled across it yet. Is there a way to do this or do I need to change the call to use the second stored proc normally?
Request clarification before answering.
Here is an example:
1) first create the procedure that is going to be called:
create or replace procedure callme( in @v long varchar ) begin message 'callme has been called with length(v) = ' || length(@v); end;
2) now call the "callme" procedure using execute immediate:
begin declare @bigv long varchar; set @bigv = repeat( 'x', 10000 ); execute immediate 'call callme( @bigv )'; end;
You should see in your database server console the message:
callme has been called with length(v) = 10000
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If my first sample solution doesn't answer your question, here is a more elaborate example:
1) first create a few procedures that can be called:
create or replace procedure callme1( in @v long varchar ) begin message 'callme1 has been called with length(v) = ' || length(@v); end; create or replace procedure callme2( in @v long varchar ) begin message 'callme2 has been called with length(v) = ' || length(@v); end; create or replace procedure callme3( in @v long varchar ) begin message 'callme3 has been called with length(v) = ' || length(@v); end;
2) Create a procedure that is given an integer that selects which procedure is to be called and the value that is to be passed:
create or replace procedure call_some_proc( in @i int, in @v long varchar ) begin declare @stmt long varchar; set @stmt = 'call "callme' || @i || '"( @v )'; -- compose call statement execute immediate @stmt; exception when others then message 'Attempt to call proc #' || @i || ' failed: ' || errormsg(); end;
3) now try calling each of the procedures:
begin declare @bigv long varchar; set @bigv = repeat( 'x', 10000 ); call call_some_proc( 1, @bigv ); call call_some_proc( 2, @bigv ); call call_some_proc( 3, @bigv ); call call_some_proc( 4, @bigv ); -- this will generate an error end;
You should see in your database server console these messages:
callme1 has been called with length(v) = 10000 callme2 has been called with length(v) = 10000 callme3 has been called with length(v) = 10000 Attempt to call proc #4 failed: Procedure 'callme4' not found
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
9 | |
9 | |
7 | |
6 | |
6 | |
5 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.