Имя: Пароль:
1C
 
v8: Соединение через клиент Оракл
0 a_kashitisna
 
18.11.10
10:38
Добрый день.

Подскажите плиз, сама никак не могу додуматься:(

надо выполнить процедуру, при этом связываюсь с БД вот таким образом:
[code]    Соединение = Новый COMОбъект ("OracleInProcServer.XOraSession");    
   OraDatabase = Соединение.OpenDatabase("Ora10", "samaratest/samaratest", 0);[/code]
после этого надо выпоолнить процедуру, у которой 4 параметра:
входной строковый,
3 выходных: 2 числовых и 1 строковый. Их создаю так:
[code]    OraDatabase.Parameters.Add("EXT_SYSTEM_ID", "1C", 1, 1);
   OraDatabase.Parameters.Add("SESSION_ID", null, 2, 2);
   OraDatabase.Parameters.Add("RET_CODE", null, 2, 2);
   OraDatabase.Parameters.Add("ERR_MSG", null, 2, 1); [/code]
После этого вызываю процедуру
[code]    НаборЗаписей = OraDatabase.ExecuteSQL("begin samara.INT_UTILITY_1.P_CREATE_SESSION; end;");  [/code]
и мне выдается ошибка
[code]{Форма.Форма.Форма(17)}: Ошибка при вызове метода контекста (ExecuteSQL): Произошла исключительная ситуация (Oracle Automation): SQL execution error, ORA-06550: Строка 1, столбец 7:
PLS-00306: ошибочно число или типы аргументов при обращении к 'P_CREATE_SESSION'
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored[/code]
Число аругметов точно верное, так что ошибка явно в типе.
Долго пыталась придумать в чем может быть проблема, в итоге дошла до такого: при обявлении параметров SESSION_ID и RET_CODE я указываю, что ServerType типа NUMBER.
Но в отладчике, когда они уже созданы, я вижу OraDatabase.Parameters(("SESSION_ID").Type = 10, т.е. тип созданного параметра - VARCHAR2, строка. Свойство Type у параметров только для чтения, и как его сделать числовым (например NUMBER (1-4,0), чтобы был Type=3) никак не могу понять:(

Умные люди, подскажите плиз.
1 a_kashitisna
 
18.11.10
13:54
up :-)
Программист всегда исправляет последнюю ошибку.