-
Из собственного редактора компонента 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
-
op1.ParamByName('ID_MAIN').Value := dataU.UserId;
op1.ParamByName('ID_TO').Value := dataI.UserId;
op1.Prepare;
op1.PrepareSQL;
op1.ExecProc;
тоже самое
-
>Petr V. Abramov © (17.11.10 00:02) [17]
а причем здесь протокол?
ODAC пытается выполнить dbms_describe.describe_procedure для получения параметров процедуры. Процедура выполняется, поднимая совершенно определенное исключение, говорящее о том, что при попытке парсинга произошла ошибка.
У автора, скорее всего, проблема с грантами, коли уж он точно уверен, что в pl/sql-dev и приложении он заходит под одним и тем же пользователем на один и тот же инстанс.)
-
обновил клиента, обновил ODAC
не работает.
обновил назад клиента.
----
на другой машине, где сразу виделись параметры, при вызове процедуры ту же ерунду пишет
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
--
TORAQuery работает и так и так. И когда ip:port:sid пишешь и когда ALIAS
===
все, не знаю как победить.
сдаюса :)
буду StartTransaction Query Query Query Commit
-
Кажись победил :)
надо не
begin
spravka.ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;
а
begin
ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;
писать.
И заработало.
-
> ODAC пытается выполнить dbms_describe.describe_procedure
> для получения параметров процедуры
ODAC пытается выполнить OCIStmtPrepare для получения параметров.
-
-
Кщд (18.11.10 11:41) [25]
Надо же, какие кривые компоненты :) в [24] я безусловно наугад ляпнул, с ODAC дело не имел, надеялся, что они по образу и подобию наших работают.
-
> надеялся, что они по образу и подобию наших работают.
а какие у вас?
-
> а какие у вас?
сами писали
-
> сами писали
а если бы поступило предложение поделится, то что бы вы ответили? :)