Finally we were able to upgrade to the latest version (8.4.3) so I just tried the suggested code, but I''m affraid it's not working.
ORACLE:
Code: Select all
create or replace type t_number_tbl is table of number;
create or replace procedure dyn_param_test_1
(
io_params in out t_number_tbl
)
as
begin
null;
end;
Delphi dfm:
Code: Select all
object conMain: TUniConnection
AutoCommit = False
ProviderName = 'Oracle'
Port = 1521
SpecificOptions.Strings = (
'Oracle.Direct=True')
Username = ...
Server = ...
Connected = True
LoginPrompt = False
end
object trMain: TUniTransaction
DefaultConnection = conMain
end
object spTest: TUniStoredProc
StoredProcName = 'DYN_PARAM_TEST_1'
SQL.Strings = (
'begin'
' DYN_PARAM_TEST_1(:IO_PARAMS);'
'end;')
Connection = conMain
Transaction = trMain
ParamData = <
item
DataType = ftUnknown
Name = 'IO_PARAMS'
ParamType = ptInputOutput
end>
CommandStoredProcName = 'DYN_PARAM_TEST_1'
end
Delphi pas, test case 1:
Code: Select all
procedure TfrmMain.Button1Click(Sender: TObject);
begin
conMain.Connect;
spTest.Params.ValueCount := 7;
spTest.ParamByName('io_params').Values[0].AsFloat := 20;
spTest.ParamByName('io_params').Values[1].AsFloat := 120;
spTest.ParamByName('io_params').Values[2].AsFloat := 220;
spTest.ParamByName('io_params').Values[3].AsFloat := 320;
spTest.ParamByName('io_params').Values[4].AsFloat := 420;
spTest.ParamByName('io_params').Values[5].AsFloat := 520;
spTest.ParamByName('io_params').Values[6].AsFloat := 620;
spTest.Execute;
end;
Delphi pas, test case 2:
Code: Select all
procedure TfrmMain.Button1Click(Sender: TObject);
begin
conMain.Connect;
spTest.ParamByName('io_params').ValueCount := 7;
spTest.ParamByName('io_params').Values[0].AsFloat := 20;
spTest.ParamByName('io_params').Values[1].AsFloat := 120;
spTest.ParamByName('io_params').Values[2].AsFloat := 220;
spTest.ParamByName('io_params').Values[3].AsFloat := 320;
spTest.ParamByName('io_params').Values[4].AsFloat := 420;
spTest.ParamByName('io_params').Values[5].AsFloat := 520;
spTest.ParamByName('io_params').Values[6].AsFloat := 620;
spTest.Execute;
end;
result in both case: exception
message:
ORA-06550: line 2, column3:
PLS-00306: wrong number or types of arguments in call to 'DYN_PARAM_TEST_1'
ORA-06550: line 2, column3:
PL/SQL: statement ignored
Can you provide me a working sample code please?