Как решить проблему, когда не удалось запустить хранимую процедуру в Oracle Oracle? - PullRequest
0 голосов
/ 13 марта 2019

Я запустил хранимую процедуру в oracle sql developer и получил следующее сообщение

Connecting to the database QAV41PRODO.
Process exited.
Disconnecting from the database QAV41PRODO

, когда я отлаживаю его, я получаю следующие сообщения:

*Connecting to the database SAMPLEDB.
Executing PL/SQL: ALTER SESSION SET PLSQL_DEBUG=TRUE
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '111.111.111.111', '11111' )
Debugger accepted connection from database on port 11111.
Source breakpoint: EMP_SEL.pls:1
Source breakpoint: EMP_SEL.pls:5
Source breakpoint: EMP_SEL.pls:6
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.DISCONNECT()
Process exited.
Disconnecting from the database QAV41PRODO.
Debugger disconnected from database.*

хранимая процедура Iя пытаюсь запустить это следующим образом:

    create or replace PROCEDURE EMP_SEL
(empID varchar2,
 cur_out OUT SYS_REFCURSOR)
AS
BEGIN
        OPEN cur_out FOR
      SELECT   *  FROM EMP_TABLE
        WHERE EMPID = 'empID'
        ORDER BY EMPID;
END;

так, что может быть причиной того, что я не получаю никакого результата от этого.Оператор select работает нормально и вы получите результаты.

Ваша помощь будет оценена, заранее спасибо !!!

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

После удаления кавычек из 'empID', я пытаюсь скомпилировать и завис SQL-разработчик, это была другая проблема.Затем я нашел и уничтожил сеанс для компиляции хранимой процедуры, скомпилировал снова, применил изменения, и он был успешно скомпилирован.

Спасибо за вашу помощь ...

0 голосов
/ 13 марта 2019

что может быть причиной того, что я не получаю никакого результата от этого.Оператор select работает нормально и вы получите результаты.

Я думаю, что проблема в WHERE EMPID = 'empID' - это попытка ограничить набор результатов переданным параметром, но вы фактически сравниваете EMPID со строкой 'empID'.Вероятно, это не даст никаких совпадений.

Удаление кавычек создаст коллизию пространства имен, фактически where 1=1, поскольку SQL не чувствителен к регистру и EMPID совпадает с empID.Чтобы избежать этого, вам нужно присвоить параметру другое имя, например p_empid.

create or replace PROCEDURE EMP_SEL
    (p_empID varchar2,
     cur_out OUT SYS_REFCURSOR)

AS
BEGIN
    OPEN cur_out FOR
       SELECT   *  FROM EMP_TABLE
        WHERE EMPID = p_empID
        ORDER BY EMPID;
END;
...