Board index » delphi » How to execute Stored Proc without using TStoredProc?
andru123
![]() Delphi Developer |
How to execute Stored Proc without using TStoredProc?2003-10-28 04:47:23 PM delphi232 Hi, I have a problem with BDE+Oracle : the TStoredProc component I use would not execute the stored proc on the server. The error is "Invalid numeric value", and I have no idea (and there is no way to determine) which parameter causes it. So I decided to abandon TStoredProc component and try using something else. But apparently, it is not possible to call stored proc using TQuery! What else can be done? The procedure works on the server, I tested. The code is below, for reference. -------------------------------- Stored procedure ---------------------- CREATE OR REPLACE FUNCTION kiw_imt_ins_proc (p_1 kiw_imt.werkverz_nr%TYPE ,p_2 kiw_imt.taaknummer%TYPE ,p_3 kiw_imt.regelnr%TYPE ,p_4 kiw_imt.regel%TYPE ,p_object INTEGER ,p_h_trans_van DATE ,p_h_geldig_van DATE ,p_h_gebruiker VARCHAR2 ,p_h_actief CHAR ,vv_result OUT NUMBER ,vv_sqlerror OUT NUMBER ,vv_isamerror OUT NUMBER ,vv_errordata OUT VARCHAR2 ) RETURN NUMBER IS BEGIN vv_result := 1; SELECT kiw_imt_seq.NEXTVAL INTO vv_result FROM DUAL; INSERT INTO kiw_imt (oid ,werkverz_nr ,taaknummer ,regelnr ,regel ,object ,h_trans_van ,h_geldig_van ,h_gebruiker ,h_actief ) VALUES (vv_result ,p_1 ,p_2 ,p_3 ,p_4 ,p_object ,p_h_trans_van ,p_h_geldig_van ,p_h_gebruiker ,p_h_actief ) ; UPDATE kiw_imt SET object = vv_result WHERE oid = vv_result; vv_isamerror := 0; vv_sqlerror := 0; vv_errordata :=''; RETURN vv_result; EXCEPTION WHEN OTHERS THEN vv_sqlerror := SQLCODE; vv_errordata := SQLERRM; vv_result:= -1; RETURN -1; END kiw_imt_ins_proc; / GRANT EXECUTE ON kiw_imt_ins_proc TO PUBLIC; ----------------------------------------- Delphi call ---------------------- storProc.DatabaseName := cbxDatabase.Text; storProc.StoredProcName := 'KDBA.KIW_IMT_INS_PROC'; storProc.Params.Clear; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_1'; par.AsCurrency := 0; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_2'; par.AsCurrency := 0; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_3'; par.AsFloat := 0; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_4'; par.AsString := 'aaa'; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_object'; par.AsCurrency := 0; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_h_trans_van'; par.AsDate := StrToDate('1-1-1900'); par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_h_geldig_van'; par.AsDate := StrToDate('1-1-1900'); par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_h_gebruiker'; par.AsString := inspect.currentUser.UserName; par := TParam.Create(storProc.Params, ptInput); par.Name := 'p_h_actief'; par.AsString := ' '; par := TParam.Create(storProc.Params, ptOutput); par.Name := 'vv_result'; par.DataType := ftInteger; par := TParam.Create(storProc.Params, ptOutput); par.Name := 'vv_sqlerror'; par.DataType := ftInteger; par := TParam.Create(storProc.Params, ptOutput); par.Name := 'vv_isamerror'; par.DataType := ftInteger; par := TParam.Create(storProc.Params, ptOutput); par.Name := 'vv_errordata'; par.DataType := ftString; par := TParam.Create(storProc.Params, ptResult); par.Name := 'result'; par.DataType := ftInteger; storProc.Prepare; storProc.ExecProc; --------------------------------------- Error message ------------------- Key violation. [Oracle][ODBC][Ora]ORA-04043: object "KDBA" does not exist General SQL error. [Oracle][ODBC]Numeric value out of range. --------------------------- OK --------------------------- |