CREATE OR REPLACE PACKAGE p_lee01
IS
TYPE cur_lee01 IS REF CURSOR;
END;
CREATE OR REPLACE PROCEDURE pro_lee01(in_a IN NUMBER,out_01 OUT NUMBER,cur_01 OUT p_lee01.cur_lee01) IS
BEGIN
out_01 := 3;
OPEN cur_01 FOR
SELECT * FROM TLEE01;
dbms_output.put_line(IN_a);
END;
-- Create table
create table TLEE01
(
ID NUMBER,
FNAME VARCHAR2(10)
)
----------------------------------
ODAC 两种调用方式
procedure TForm1.Button15Click(Sender: TObject);
begin
orastoredproc1.Params.clear;
OraStoredProc1.StoredProcName := 'pro_lee01';
orastoredproc1.PrepareSQL;
orastoredproc1.ParamByName('in_a').Value := 5;
orastoredproc1.prepare;
OraStoredProc1.ExecProc;
showmessage(OraStoredProc1.ParamByName('out_01').AsString);
ShowValue(OraStoredProc1, Button8.Caption);
end;
procedure TForm1.Button9Click(Sender: TObject);
var
s: string;
begin
s := 'begin pro_lee01(:a,:b,:cur_01 ); end;';
OraQuery1.SQL.Clear;
OraQuery1.SQL.Add(s);
OraQuery1.AutoCommit := false;
OraQuery1.FetchAll := true;
OraQuery1.ParamByName('a').value := 4;
OraQuery1.ParamByName('b').ParamType := ptoutput;
OraQuery1.ParamByName('b').DataType:= ftinteger;
OraQuery1.ParamByName('cur_01').ParamType := ptoutput;
OraQuery1.ParamByName('cur_01').DataType:= ftcursor;
OraQuery1.Open;
showmessage(OraQuery1.ParamByName('b').AsString); //显示返回值
ShowValue(OraQuery1, Button8.Caption);
end;