powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
4 сообщений из 4, страница 1 из 1
В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
    #35856381
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю package
Код: plaintext
1.
2.
3.
4.
CREATE or replace PACKAGE owner.Pkg1 IS
	TYPE Collection IS TABLE OF tbl.fld%TYPE INDEX BY BINARY_INTEGER;
PROCEDURE Proc(
	param Collection);
и пытаюсь вызвать эту процедуру с использованием Oracle.DataAccess.Client.OracleCommand
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
par = cmd.CreateParameter();
par.ParameterName = "PARAM";
par.OracleDbType = OracleDbType.Decimal;
par.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
par.Direction = ParameterDirection.Input;
par.Value = new decimal[] { 1, 2, 3};
par.Size = 3;
cmd.Parameters.Add(par);
Выдает ошибку OCI-22303: type "OWNER"."PKG1" not found
Все списано с аналогичного работающего примера. Единственное отличие моего случая от примера, которое я вижу - пример работал с пакетом в своей схеме, а мне необходимо использовать чужую схему (в данном примере owner)
Вожможно ли побороть это?
...
Рейтинг: 0 / 0
В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
    #35859496
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал 3 типа коллекции:
ассоциативный массив, как на примере в первом посте (TABLE OF ... INDEX BY BINARY_INTEGER)
nested table (TABLE OF ..., без index by )
VARRAY

Результат один и тот же (код и текст ошибки в первом посте). Временно решаю проблему методом передачи списка в параметре VARCHAR2 через разделитель, а в процедуре делаю разбор. Но ведь это "решение", извините, - через одно место.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
    #36787949
ge0L0g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Molchanov,

Каковы операции над переданной коллекцией в хранимке?
Если, например, так:
http://www.dbasupport.com/forums/archive/index.php/t-9108.html

то SQL-выражения для пакетных типов не разрешаются. Нужны системные типы, что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
create or replace
TYPE yourType AS OBJECT
( onlyfield integer);

create or replace
TYPE yourCollection AS TABLE OF yourType ;

Соответственно в хранимке Вы вполне можете:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PROCEDURE Proc(
	param in yourCollection )
as
begin

(...)select * from table(cast (param  as yourCollection ) );

end Proc;
...
Рейтинг: 0 / 0
В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
    #37363397
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, мы общаемся с интервалом в 1 год :)
Посему актуальность данного вопроса давно утратилась. Как я уже там сделал, даже и не вспомню.
Но насчет того, что тип должен быть системный, а не внутри пакета - это, должно быть, и была причина.
Спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / В PL/SQL процедуре аргумент TABLE OF NUMBER, как передать через OracleCommand
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]