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;