Конференция "Базы" » ORA-20004 при попытке задать параметр процедуре [D7]
 
  • 12 © (16.11.10 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 © (16.11.10 12:52) [1]
    собственно, что сделать, чтоб она вызвалась из delphi?
    уже и так пробвал
    TOraQuery.SQL.TEXT :=
    ' begin  esbd_SUBJECT_REMOVE (:id1, :id2); end;эж
    и TOraQuery.parametrByName('id1') и т.п. и ExecSQl;

    опять не нравится параметр
  • 12 © (16.11.10 13:04) [2]
    переписал - теперь больше ошибок
    хотя все опять работает из PL/sql developer

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

    что он хочет от меня? и почему не видит
  • Petr V. Abramov © (16.11.10 13:04) [3]

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

    может, какой-нить редактор параметров у компонета есть, где их создать надо?
  • Petr V. Abramov © (16.11.10 13:05) [4]
    вообще

    > Ошибка ORA-20004

    это очень странно, 20004 в диапазоне юзерских кодов
  • Кщд (16.11.10 13:32) [5]
    12 ©   (16.11.10 13:04) [2]
    есть ещё объекты с таким же именем как процедура?
  • Кщд (16.11.10 13:37) [6]
    >Petr V. Abramov ©   (16.11.10 13:05) [4]
    рекомендуют использовать с >20005, т.к. индийские друзья всё же используют до 20005 во внутренностях системных пакетов и, перекрыв исключение, можно серьезно нарваться
  • 12 © (16.11.10 14:13) [7]

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

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


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

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


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

    нет
  • 12 © (16.11.10 14:39) [8]
    или клиент глючит? может такое быть?
    он у меня старый-старый, 8.какойто, чтоб точно, что состряпаю - у всех работало.
    наверное, пора обновиться, ща попробую. О результатах доложу :)
  • Кщд (16.11.10 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 © (16.11.10 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

    че-то с машиной, с другого компа работает..
  • Кщд (16.11.10 16:52) [11]
    >12 ©   (16.11.10 16:08) [10]
    >describe аналогична "с лица"?
    из sqlplus выполнить dbms_describe.describe_procedure с параметром равным ESBD_SUBJECT_REMOVE
    каков результат?
  • 12 © (16.11.10 17:31) [12]

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

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

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

    с лица, правой кнопкой мыши, Описать, тоже самое показавает..
  • 12 © (16.11.10 17:40) [13]
    РЕШИЛОСЬ!
    там одна галочка, NET зовется, включена была.
    И потом как не пиши адрес сервера - не понимает.
    Понимает только по псевдониму из oratns

    т.е.
    включаем NET и не пишем адрес:порт:sid - неправильно.
    выключаем NET и пишем псевдоним из oratns - правильно
    и все заработало.
  • 12 © (16.11.10 17:43) [14]

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


    т.е.
    включаем NET и пишем адрес:порт:sid - неправильно.
    выключаем NET и пишем псевдоним из oratns - правильно
  • 12 © (16.11.10 17:47) [15]
    причем
    адрес:порт:sid = из oratns, но тем не менее.
    и ничего не придумываю

    все..
    за множественность постов - извинения, эт от радости :)
  • Кщд (16.11.10 19:00) [16]
    казалось бы, причем здесь ошибка парсинга, которую выдает dbms_describe))
  • Petr V. Abramov © (17.11.10 00:02) [17]

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

    при том, что TNS-протокол официально не документирован, но ODAC по нему каким-то образом с сервером общается. каким - видим ;)
  • 12 © (17.11.10 08:29) [18]

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

    но далее-более
    а dataset и query работают ведь, ведь так первый раз глюкнуло, потому что  первый раз использовал TOraStoredProc из этого набора компонентов.
    На DS и query галка net и полная адресация сервера прокатывала на ура.
  • 12 © (17.11.10 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 © (17.11.10 10:08) [20]
    op1.ParamByName('ID_MAIN').Value := dataU.UserId;
       op1.ParamByName('ID_TO').Value := dataI.UserId;
       op1.Prepare;
       op1.PrepareSQL;
       op1.ExecProc;

    тоже самое
  • Кщд (17.11.10 11:19) [21]
    >Petr V. Abramov ©   (17.11.10 00:02) [17]
    а причем здесь протокол?
    ODAC пытается выполнить dbms_describe.describe_procedure для получения параметров процедуры. Процедура выполняется, поднимая совершенно определенное исключение, говорящее о том, что при попытке парсинга произошла ошибка.
    У автора, скорее всего, проблема с грантами, коли уж он точно уверен, что в pl/sql-dev и приложении он заходит под одним и тем же пользователем на один и тот же инстанс.)
  • 12 © (18.11.10 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 © (18.11.10 10:02) [23]
    Кажись победил :)
    надо не

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

    а

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

    писать.

    И заработало.
  • Игорь Шевченко © (18.11.10 10:29) [24]

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


    ODAC пытается выполнить OCIStmtPrepare для получения параметров.
  • Кщд (18.11.10 11:41) [25]
    >Игорь Шевченко ©   (18.11.10 10:29) [24]
    http://zalil.ru/29978017
  • Игорь Шевченко © (19.11.10 12:25) [26]
    Кщд   (18.11.10 11:41) [25]

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

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

    а какие у вас?
  • Игорь Шевченко © (19.11.10 12:55) [28]

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


    сами писали
  • 12 © (19.11.10 13:02) [29]

    > сами писали


    а если бы поступило предложение поделится, то что бы вы ответили? :)
 
Конференция "Базы" » ORA-20004 при попытке задать параметр процедуре [D7]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]