delphi调用oracle存储过程,ODAC

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;