Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.09;
Скачать: CL | DM;

Вниз

ORA-20004 при попытке задать параметр процедуре   Найти похожие ветки 

 
12 ©   (2010-11-16 12:38) [0]

Из собственного редактора компонента 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-16 12:52) [1]

собственно, что сделать, чтоб она вызвалась из delphi?
уже и так пробвал
TOraQuery.SQL.TEXT :=
" begin  esbd_SUBJECT_REMOVE (:id1, :id2); end;эж
и TOraQuery.parametrByName("id1") и т.п. и ExecSQl;

опять не нравится параметр


 
12 ©   (2010-11-16 13:04) [2]

переписал - теперь больше ошибок
хотя все опять работает из PL/sql developer

посмотрите, если не трудно
http://zalil.ru/29978017

что он хочет от меня? и почему не видит


 
Petr V. Abramov ©   (2010-11-16 13:04) [3]


> 12 ©   (16.11.10 12:52) [1]

может, какой-нить редактор параметров у компонета есть, где их создать надо?


 
Petr V. Abramov ©   (2010-11-16 13:05) [4]

вообще

> Ошибка ORA-20004

это очень странно, 20004 в диапазоне юзерских кодов


 
Кщд   (2010-11-16 13:32) [5]

12 ©   (16.11.10 13:04) [2]
есть ещё объекты с таким же именем как процедура?


 
Кщд   (2010-11-16 13:37) [6]

>Petr V. Abramov ©   (16.11.10 13:05) [4]
рекомендуют использовать с >20005, т.к. индийские друзья всё же используют до 20005 во внутренностях системных пакетов и, перекрыв исключение, можно серьезно нарваться


 
12 ©   (2010-11-16 14:13) [7]


> может, какой-нить редактор параметров у компонета есть,
> где их создать надо?

на картинке его и использую


> это очень странно, 20004 в диапазоне юзерских кодов

странно, то странно, но в итоге то все равно не работает
смотрел в google, нашел что что-то там dbms не может описание получить, якобы.. Ну, по идеи и фиг с ним, почему ж просто в из TORAQuery не работает?...


> есть ещё объекты с таким же именем как процедура?

нет


 
12 ©   (2010-11-16 14:39) [8]

или клиент глючит? может такое быть?
он у меня старый-старый, 8.какойто, чтоб точно, что состряпаю - у всех работало.
наверное, пора обновиться, ща попробую. О результатах доложу :)


 
Кщд   (2010-11-16 14:48) [9]

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"


 
12 ©   (2010-11-16 16:08) [10]


> попробуйте выполнить 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

че-то с машиной, с другого компа работает..


 
Кщд   (2010-11-16 16:52) [11]

>12 ©   (16.11.10 16:08) [10]
>describe аналогична "с лица"?
из sqlplus выполнить dbms_describe.describe_procedure с параметром равным ESBD_SUBJECT_REMOVE
каков результат?


 
12 ©   (2010-11-16 17:31) [12]


> Кщд   (16.11.10 16:52) [11]

Заставили Вы меня поковыряться

PROCEDURE ESBD_SUBJECT_REMOVE
Имя Аргумента                  Тип                     В/Из   По-умолч
------------------------------ ----------------------- ------ --------
ID_MAIN                        NUMBER                  IN     DEFAULT
ID_TO                          NUMBER                  IN     DEFAULT

с лица, правой кнопкой мыши, Описать, тоже самое показавает..


 
12 ©   (2010-11-16 17:40) [13]

РЕШИЛОСЬ!
там одна галочка, NET зовется, включена была.
И потом как не пиши адрес сервера - не понимает.
Понимает только по псевдониму из oratns

т.е.
включаем NET и не пишем адрес:порт:sid - неправильно.
выключаем NET и пишем псевдоним из oratns - правильно
и все заработало.


 
12 ©   (2010-11-16 17:43) [14]


>
> т.е.
> включаем NET и не пишем адрес:порт:sid - неправильно.
> выключаем NET и пишем псевдоним из oratns - правильно
> и все заработало.


т.е.
включаем NET и пишем адрес:порт:sid - неправильно.
выключаем NET и пишем псевдоним из oratns - правильно


 
12 ©   (2010-11-16 17:47) [15]

причем
адрес:порт:sid = из oratns, но тем не менее.
и ничего не придумываю

все..
за множественность постов - извинения, эт от радости :)


 
Кщд   (2010-11-16 19:00) [16]

казалось бы, причем здесь ошибка парсинга, которую выдает dbms_describe))


 
Petr V. Abramov ©   (2010-11-17 00:02) [17]


> казалось бы, причем здесь ошибка парсинга, которую выдает
> dbms_describe))

при том, что TNS-протокол официально не документирован, но ODAC по нему каким-то образом с сервером общается. каким - видим ;)


 
12 ©   (2010-11-17 08:29) [18]


> при том, что TNS-протокол официально не документирован,
> но ODAC по нему каким-то образом с сервером общается. каким
> - видим

но далее-более
а dataset и query работают ведь, ведь так первый раз глюкнуло, потому что  первый раз использовал TOraStoredProc из этого набора компонентов.
На DS и query галка net и полная адресация сервера прокатывала на ура.


 
12 ©   (2010-11-17 10:00) [19]

никак не победю  :)

А что теперь может быть?
Если так

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 10:08) [20]

op1.ParamByName("ID_MAIN").Value := dataU.UserId;
   op1.ParamByName("ID_TO").Value := dataI.UserId;
   op1.Prepare;
   op1.PrepareSQL;
   op1.ExecProc;

тоже самое


 
Кщд   (2010-11-17 11:19) [21]

>Petr V. Abramov ©   (17.11.10 00:02) [17]
а причем здесь протокол?
ODAC пытается выполнить dbms_describe.describe_procedure для получения параметров процедуры. Процедура выполняется, поднимая совершенно определенное исключение, говорящее о том, что при попытке парсинга произошла ошибка.
У автора, скорее всего, проблема с грантами, коли уж он точно уверен, что в pl/sql-dev и приложении он заходит под одним и тем же пользователем на один и тот же инстанс.)


 
12 ©   (2010-11-18 09:18) [22]

обновил клиента, обновил 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


 
12 ©   (2010-11-18 10:02) [23]

Кажись победил :)
надо не

begin
 spravka.ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;

а

begin
 ESBD_SUBJECT_REMOVE(:ID_MAIN, :ID_TO);
end;

писать.

И заработало.


 
Игорь Шевченко ©   (2010-11-18 10:29) [24]


> ODAC пытается выполнить dbms_describe.describe_procedure
> для получения параметров процедуры


ODAC пытается выполнить OCIStmtPrepare для получения параметров.


 
Кщд   (2010-11-18 11:41) [25]

>Игорь Шевченко ©   (18.11.10 10:29) [24]
http://zalil.ru/29978017


 
Игорь Шевченко ©   (2010-11-19 12:25) [26]

Кщд   (18.11.10 11:41) [25]

Надо же, какие кривые компоненты :) в [24] я безусловно наугад ляпнул, с ODAC дело не имел, надеялся, что они по образу и подобию наших работают.


 
12 ©   (2010-11-19 12:53) [27]


> надеялся, что они по образу и подобию наших работают.

а какие у вас?


 
Игорь Шевченко ©   (2010-11-19 12:55) [28]


> а какие у вас?


сами писали


 
12 ©   (2010-11-19 13:02) [29]


> сами писали


а если бы поступило предложение поделится, то что бы вы ответили? :)



Страницы: 1 вся ветка

Текущий архив: 2013.06.09;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.006 c
2-1352129772
Jimmy
2012-11-05 19:36
2013.06.09
Как быстро сравнить две строки?


2-1352205351
NieL
2012-11-06 16:35
2013.06.09
транзакции


2-1352445326
NapalmRain
2012-11-09 11:15
2013.06.09
MultiByteToWideChar или другой способ перевести UTF16 LE в ANSI


2-1352423459
Signal
2012-11-09 05:10
2013.06.09
Как плучить кол-во фреймов из IWebBrowsera?


15-1359043243
Kerk
2013-01-24 20:00
2013.06.09
Джо Армстронг об обучении программированию