![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ORA-20004 при попытке задать параметр процедуре [D7]
12 © (2010-11-16 12:38:00)Из собственного редактора компонента 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 -- старый владелец
....
12 (2010-11-19 13:02:00) [1]
> сами писали
а если бы поступило предложение поделится, то что бы вы ответили? :)
Игорь Шевченко (2010-11-19 12:55:00) [2]
> а какие у вас?
сами писали
12 (2010-11-19 12:53:00) [3]
> надеялся, что они по образу и подобию наших работают.
а какие у вас?
Игорь Шевченко (2010-11-19 12:25:00) [4]Кщд (18.11.10 11:41) [25]
Надо же, какие кривые компоненты :) в [24] я безусловно наугад ляпнул, с ODAC дело не имел, надеялся, что они по образу и подобию наших работают.
Кщд (2010-11-18 11:41:00) [5]>Игорь Шевченко © (18.11.10 10:29) [24]
http://zalil.ru/29978017
Игорь Шевченко (2010-11-18 10:29:00) [6]
> ODAC пытается выполнить dbms_describe.describe_procedure
> для получения параметров процедуры
ODAC пытается выполнить OCIStmtPrepare для получения параметров.
12 (2010-11-18 10:02:00) [7]Кажись победил :)
надо не
begin
spravka.ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;
а
begin
ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;
писать.
И заработало.
12 (2010-11-18 09:18:00) [8]обновил клиента, обновил 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
Кщд (2010-11-17 11:19:00) [9]>Petr V. Abramov © (17.11.10 00:02) [17]
а причем здесь протокол?
ODAC пытается выполнить dbms_describe.describe_procedure для получения параметров процедуры. Процедура выполняется, поднимая совершенно определенное исключение, говорящее о том, что при попытке парсинга произошла ошибка.
У автора, скорее всего, проблема с грантами, коли уж он точно уверен, что в pl/sql-dev и приложении он заходит под одним и тем же пользователем на один и тот же инстанс.)
12 (2010-11-17 10:08:00) [10]op1.ParamByName('ID_MAIN').Value := dataU.UserId;
op1.ParamByName('ID_TO').Value := dataI.UserId;
op1.Prepare;
op1.PrepareSQL;
op1.ExecProc;
тоже самое
12 (2010-11-17 10:00:00) [11]никак не победю :)
А что теперь может быть?
Если так
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
12 (2010-11-17 08:29:00) [12]
> при том, что TNS-протокол официально не документирован,
> но ODAC по нему каким-то образом с сервером общается. каким
> - видим
но далее-более
а dataset и query работают ведь, ведь так первый раз глюкнуло, потому что первый раз использовал TOraStoredProc из этого набора компонентов.
На DS и query галка net и полная адресация сервера прокатывала на ура.
Petr V. Abramov (2010-11-17 00:02:00) [13]
> казалось бы, причем здесь ошибка парсинга, которую выдает
> dbms_describe))
при том, что TNS-протокол официально не документирован, но ODAC по нему каким-то образом с сервером общается. каким - видим ;)
Кщд (2010-11-16 19:00:00) [14]казалось бы, причем здесь ошибка парсинга, которую выдает dbms_describe))
12 (2010-11-16 17:47:00) [15]причем
адрес:порт:sid = из oratns, но тем не менее.
и ничего не придумываю
все..
за множественность постов - извинения, эт от радости :)
12 (2010-11-16 17:43:00) [16]
>
> т.е.
> включаем NET и непишем адрес:порт:sid - неправильно.
> выключаем NET и пишем псевдоним из oratns - правильно
> и все заработало.
т.е.
включаем NET и пишем адрес:порт:sid - неправильно.
выключаем NET и пишем псевдоним из oratns - правильно
12 (2010-11-16 17:40:00) [17]РЕШИЛОСЬ!
там одна галочка, NET зовется, включена была.
И потом как не пиши адрес сервера - не понимает.
Понимает только по псевдониму из oratns
т.е.
включаем NET и не пишем адрес:порт:sid - неправильно.
выключаем NET и пишем псевдоним из oratns - правильно
и все заработало.
12 (2010-11-16 17:31:00) [18]
> Кщд (16.11.10 16:52) [11]
Заставили Вы меня поковыряться
PROCEDURE ESBD_SUBJECT_REMOVE
Имя Аргумента Тип В/Из По-умолч
------------------------------ ----------------------- ------ --------
ID_MAIN NUMBER IN DEFAULT
ID_TO NUMBER IN DEFAULT
с лица, правой кнопкой мыши, Описать, тоже самое показавает..
Кщд (2010-11-16 16:52:00) [19]>12 © (16.11.10 16:08) [10]
>describe аналогична "с лица"?
из sqlplus выполнить dbms_describe.describe_procedure с параметром равным ESBD_SUBJECT_REMOVE
каков результат?
12 (2010-11-16 16:08:00) [20]
> попробуйте выполнить 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
че-то с машиной, с другого компа работает..