Передача ассоциативных массивов в качестве параметров

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов
Закрыто
dgrigoryev
Сообщения: 6
Зарегистрирован: Чт 07 мар 2013 09:41

Передача ассоциативных массивов в качестве параметров

Сообщение dgrigoryev » Ср 20 мар 2013 14:34

Доброго времени суток.
Подскажите пожалуйста, есть ли возможность в ODAC 8.5.9 передавать ассоциативные массивы в качестве аргументов хранимых процедур Oracle версии 10 или 11 из Delphi Embarcadero 2007 ?
Какую версию ODAC предпочтительнее использовать для данных задач?
Спасибо.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Передача ассоциативных массивов в качестве параметров

Сообщение Alexp » Ср 20 мар 2013 15:22

Добрый день,

Ниже приведен простой пример демонстрирующий работу с ассоциативным массивом в качестве IN OUT параметра процедуры

Код: Выделить всё

CREATE OR replace PACKAGE pcg_pls_type AS
   
TYPE PLS_TYPE IS TABLE OF NUMBER INDEX BY PLS_INTEGER;

PROCEDURE sp_fill_pls(A_VAL IN OUT PLS_TYPE);

END;
/
CREATE OR replace PACKAGE BODY pcg_pls_type AS

PROCEDURE sp_fill_pls(A_VAL IN OUT PLS_TYPE) AS
  i NUMBER;
BEGIN
  FOR i IN 1..a_val.COUNT LOOP
    A_VAL(i) := i*10;
  END LOOP;
END;

END;
/

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject);
var
  OraSession: TOraSession;
  OraStoredProc: TOraStoredProc;
  i: integer;
begin
  OraSession := TOraSession.Create(nil);
  try
    OraSession.ConnectString := 'scott/tiger@orcl1020';
    OraSession.Connect;

    OraStoredProc := TOraStoredProc.Create(nil);
    try
      OraStoredProc.StoredProcName := 'PCG_PLS_TYPE.SP_FILL_PLS';
      OraStoredProc.Prepare;
      OraStoredProc.ParamByName('A_VAL').DataType := ftInteger;
      OraStoredProc.ParamByName('A_VAL').ParamType := ptOutput;
      OraStoredProc.ParamByName('A_VAL').Table := true;
      OraStoredProc.ParamByName('A_VAL').Length := 10;
      OraStoredProc.Execute;
      for i := 1 to 10 do
        ShowMessage(IntToStr(OraStoredProc.ParamByName('A_VAL').ItemAsInteger[i]));
    finally
      OraStoredProc.Free;
    end;
  finally
    OraSession.Free;
  end;
end;


Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Передача ассоциативных массивов в качестве параметров

Сообщение Alexp » Чт 21 мар 2013 10:30

Добрый день,

Пожалуйста, если у Вас возникнут дальнейшие вопросы по ОDAC, пишите нам.

Закрыто