-
Из собственного редактора компонента TOraStoredProc; из набора Oracle Data Access Components (1997-2004) Ошибка ORA-20004, не видит параметров. Программно тоже не выходит. Указываю параметры op1.ParamByName('ID_MAIN').Value := dataU.UserId; op1.ParamByName('ID_TO').Value := dataI.UserId; op1.Execute; ругается, что нет таких параметров. C лица, В PL/developer, вызываю begin esbd_SUBJECT_REMOVE (413747, null); end; все нормально, переносит. (ветку дерева с id1, делает как чайлд к id2) написана так:
CREATE OR REPLACE PROCEDURE esbd_SUBJECT_REMOVE (ID_MAIN NUMBER, ID_TO NUMBER)
IS
ID_UP_FOR_MAIN NUMBER := 0;
BEGIN
select R.UP_ID into ID_UP_FOR_MAIN -- старый владелец
....
-
собственно, что сделать, чтоб она вызвалась из delphi? уже и так пробвал TOraQuery.SQL.TEXT := ' begin esbd_SUBJECT_REMOVE (:id1, :id2); end;эж и TOraQuery.parametrByName('id1') и т.п. и ExecSQl;
опять не нравится параметр
-
переписал - теперь больше ошибок хотя все опять работает из PL/sql developer посмотрите, если не трудно http://zalil.ru/29978017что он хочет от меня? и почему не видит
-
> 12 © (16.11.10 12:52) [1]
может, какой-нить редактор параметров у компонета есть, где их создать надо?
-
вообще
> Ошибка ORA-20004
это очень странно, 20004 в диапазоне юзерских кодов
-
12 © (16.11.10 13:04) [2] есть ещё объекты с таким же именем как процедура?
-
>Petr V. Abramov © (16.11.10 13:05) [4] рекомендуют использовать с >20005, т.к. индийские друзья всё же используют до 20005 во внутренностях системных пакетов и, перекрыв исключение, можно серьезно нарваться
-
> может, какой-нить редактор параметров у компонета есть, > где их создать надо?
на картинке его и использую
> это очень странно, 20004 в диапазоне юзерских кодов
странно, то странно, но в итоге то все равно не работает смотрел в google, нашел что что-то там dbms не может описание получить, якобы.. Ну, по идеи и фиг с ним, почему ж просто в из TORAQuery не работает?...
> есть ещё объекты с таким же именем как процедура?
нет
-
или клиент глючит? может такое быть? он у меня старый-старый, 8.какойто, чтоб точно, что состряпаю - у всех работало. наверное, пора обновиться, ща попробую. О результатах доложу :)
-
12 © (16.11.10 14:13) [7] >странно, то странно, но в итоге то все равно не работает ничего странного - документированное исключение попробуйте выполнить dbms_describe.decribe_procedure с Вашей процедурой коннект в pl/sql developer и приложении под одним и тем же пользователем? к одному и тому же инстансу?
и всё-таки: select ao.* from all_objects ao where lower(ao.object_name) = 'esbd_subject_remove'
-
> попробуйте выполнить dbms_describe.decribe_procedure с Вашей > процедурой
describe аналогична "с лица"? тогда все ок.
> коннект в pl/sql developer и приложении под одним и тем > же пользователем?
да
> к одному и тому же инстансу?
да
> select ao.* > from all_objects ao > where lower(ao.object_name) = 'esbd_subject_remove'
1 SPRAVKA ESBD_SUBJECT_REMOVE 63563 PROCEDURE 16.11.2010 10:06:59 16.11.2010 14:16:14 2010-11-16:14:16:03 VALID N N N
че-то с машиной, с другого компа работает..
-
>12 © (16.11.10 16:08) [10] >describe аналогична "с лица"? из sqlplus выполнить dbms_describe.describe_procedure с параметром равным ESBD_SUBJECT_REMOVE каков результат?
-
> Кщд (16.11.10 16:52) [11]
Заставили Вы меня поковыряться
PROCEDURE ESBD_SUBJECT_REMOVE Имя Аргумента Тип В/Из По-умолч ------------------------------ ----------------------- ------ -------- ID_MAIN NUMBER IN DEFAULT ID_TO NUMBER IN DEFAULT
с лица, правой кнопкой мыши, Описать, тоже самое показавает..
-
РЕШИЛОСЬ! там одна галочка, NET зовется, включена была. И потом как не пиши адрес сервера - не понимает. Понимает только по псевдониму из oratns
т.е. включаем NET и не пишем адрес:порт:sid - неправильно. выключаем NET и пишем псевдоним из oratns - правильно и все заработало.
-
> > т.е. > включаем NET и не пишем адрес:порт:sid - неправильно. > выключаем NET и пишем псевдоним из oratns - правильно > и все заработало.
т.е. включаем NET и пишем адрес:порт:sid - неправильно. выключаем NET и пишем псевдоним из oratns - правильно
-
причем адрес:порт:sid = из oratns, но тем не менее. и ничего не придумываю
все.. за множественность постов - извинения, эт от радости :)
-
казалось бы, причем здесь ошибка парсинга, которую выдает dbms_describe))
-
> казалось бы, причем здесь ошибка парсинга, которую выдает > dbms_describe))
при том, что TNS-протокол официально не документирован, но ODAC по нему каким-то образом с сервером общается. каким - видим ;)
-
> при том, что TNS-протокол официально не документирован, > но ODAC по нему каким-то образом с сервером общается. каким > - видим
но далее-более а dataset и query работают ведь, ведь так первый раз глюкнуло, потому что первый раз использовал TOraStoredProc из этого набора компонентов. На DS и query галка net и полная адресация сервера прокатывала на ура.
-
никак не победю :)
А что теперь может быть? Если так
op1: TOraStoredProc;
op1.ParamByName('ID_MAIN').Value := dataU.UserId; op1.ParamByName('ID_TO').Value := dataI.UserId; op1.ExecProc;
ORA-06550: line 2, column 11: PLS-00302: component 'ESBD_SUBJECT_REMOVE' must be declared ORA-06550: line 2, column 3: PL/SQL: Statement ignored
---------------------- или если так --------- oqProcSubjectMove: TOraQuery; sql.text = begin spravka.ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO); end;
oqProcSubjectMove.ParamByName('ID_MAIN').Value := dataU.UserId; oqProcSubjectMove.ParamByName('ID_TO').Value := dataI.UserId; oqProcSubjectMove.ExecSQL;
и тоже самое: ORA-06550: line 2, column 11: PLS-00302: component 'ESBD_SUBJECT_REMOVE' must be declared ORA-06550: line 2, column 3: PL/SQL: Statement ignored
|