Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Returning recordsets from dynamic sql
Hello
Try this:
set serveroutput on;
set feedback off;
create table tabletest (f1 varchar2(30), f2 varchar2(30));
insert into tabletest values ('R', 'Roaming'); insert into tabletest values ('T', 'Taco Bell'); insert into tabletest values ('F', 'Fine'); insert into tabletest values ('M', 'Monsun');
CREATE OR REPLACE PACKAGE MYTEST IS type TestCur is ref cursor;
procedure TestSelect(
tab_name in varchar2, field_name in varchar2, val in varchar2, TestCursor in out TestCur);
procedure openCursor;
END MYTEST;
/
CREATE OR REPLACE PACKAGE BODY MYTEST as
procedure TestSelect(
tab_name in varchar2, field_name in varchar2, val in varchar2, TestCursor in out TestCur) IS strSQL VARCHAR (100); BEGIN strSQL := 'select * from ' || tab_name || ' where ' || field_name || ' = :1 '; open TestCursor for strSQL using val;END TestSelect;
procedure openCursor is
tc TestCur; f1 tabletest.f1%type; f2 tabletest.f2%type; begin TestSelect('tabletest','f1','F',tc); loop fetch tc into f1,f2; exit when tc%notfound; dbms_output.put_line(f2); end loop; end openCursor; END MYTEST;
begin
MYTEST.openCursor;
end;
/
drop table tabletest;
HTH Rene
> I want to return a recordset from my stored procedure in Oracle. I
> call the stored procedure from VB using ADO. The following stored
> procedure works fine.
>
> CREATE OR REPLACE PACKAGE MYTEST IS
>
> type TestCur is ref cursor;
> procedure TestSelect(TestCursor in out TestCur);
>
> END MYTEST;
> /
>
> CREATE OR REPLACE PACKAGE BODY MYTEST as
>
> procedure TestSelect(TestCursor in out TestCur)
> IS
> BEGIN
> open TestCursor for select * from sa3206dt;
> END TestSelect;
> END MYTEST;
> /
>
> My problem is that I want to build the select statement dynamically. I
> tried the procedure below, but get error when trying to call it via
> ADO.
>
> CREATE OR REPLACE PACKAGE MYTEST IS
>
> type TestCur is ref cursor;
> procedure TestSelect(TestCursor in out TestCur);
>
> END MYTEST;
> /
>
> CREATE OR REPLACE PACKAGE BODY MYTEST as
>
> procedure TestSelect(TestCursor in out TestCur)
> IS
> strSQL VARCHAR (100);
> BEGIN
> strSQL := 'open TestCursor for select * from sa3206dt'
> execute immediate strSQL;
> END TestSelect;
> END MYTEST;
> /
>
> Naturally I don't want to hardcode the selectstring, I will build it
> from inparameters, this is just for test.
>
>
> /Hakan
Received on Wed May 29 2002 - 06:24:58 CDT