procedure SqlQueryVariables(SQLText: string; Variables: TOraVariableArr; LogFile: string); var i: integer; begin SQLText := 'begin' + CRLF + SQLText + ';' + CRLF + 'end;'; OracleQuery.SQL.Clear; OracleQuery.SQL.Text := SQLText; OracleQuery.ClearVariables; OracleQuery.DeleteVariables; for i := Low(Variables) to High(Variables) do begin OracleQuery.DeclareAndSet(Variables[i].Variable, Variables[i].VarType, Variables[i].Value); {OracleQuery.DeclareVariable(Variables[i].Variable, Variables[i].VarType); OracleQuery.SetVariable(Variables[i].Variable, Variables[i].Value);} end; try OracleQuery.Execute; for i := Low(Variables) to High(Variables) do if OracleQuery.VariableIndex(Variables[i].Variable) >= 0 then begin Variables[i].Value := OracleQuery.GetVariable(Variables[i].Variable); end; except on E: EOracleError do begin {TODO: вспомнить как ловить ошибки :) } Log(['Error. Oracle OracleQuery return exception: ', OraSession.ErrorMessage(E.ErrorCode), CRLF], LogFile); for i := Low(Variables) to High(Variables) do if OracleQuery.VariableIndex(Variables[i].Variable) >= 0 then Variables[i].Value := 0; end; end; end;