Вызов хранимой процедуры Oracle с записью в качестве параметра

2

Можно ли вызвать хранимую процедуру Oracle с типом записи как параметр IN?

В Oracle у меня есть определение записи:

TYPE R_InData_tab IS RECORD ( ... );
TYPE InData_tab IS TABLE OF R_InData_tab INDEX BY BINARY_INTEGER;

Теперь я хочу установить этот тип записи как параметр:

PROCEDURE myProcedure (inRecord IN myPackage.InData_tab);

И вызовите эту процедуру из моего кода на С#.

Есть ли у кого-нибудь идеи?

Спасибо

Теги:
stored-procedures
parameters
record

3 ответа

1

Вы можете сделать это, отправив блок кода в качестве инструкции (прошло некоторое время с тех пор, как я работал с Oracle, поэтому синтаксис может быть слегка отключен:

DECLARE
    param indata_tab;
BEGIN
    FOR i IN 1 .. :field1%COUNT LOOP
         param(i).field1 := :field1(i);
         param(i).field2 := :field2(i);
    END LOOP;
    myProcedure(param);
END;

а затем вы привязываете параметры field1 и field2 к массивам.

1

Я думаю, что вы ограничены встроенными типами Oracle, определенными в OracleType. Если это так, вам придется написать хранимую процедуру, которая принимает регулярные параметры, создает значение типа и вызывает исходную процедуру.

0

Если вы используете Oracle Data Provider для .NET(ODP.NET), то определенно можно напрямую вызвать процедуру без использования массажа, предложенного erikkallen.

Однако я не уверен, что это решит вашу проблему. Похоже, вы определяете типы в пакете, который содержит процедуру. Чтобы использовать метод, связанный выше, ваши типы должны быть созданы как отдельные объекты в базе данных, используя DDL, например:

CREATE TYPE R_InData_tab AS OBJECT ( ... );
CREATE TYPE InData_tab AS TABLE OF R_InData_tab;

Это может потребовать незначительных изменений в пакете, поскольку типы INDEX BY не поддерживаются как объекты схемы, поэтому необходимо использовать вложенные таблицы (или varrays).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню