Ошибки в хранимой процедуре оракула - PullRequest
2 голосов
/ 16 сентября 2011

У меня проблемы с выполнением хранимой процедуры в Oracle.

Ниже представлена ​​хранимая процедура:

CREATE OR REPLACE Procedure xxxlist
    (yyyid in NUMBER)    
IS
    xid number(6);
    cursor c1 is select distinct xxxID from MXS.Y where YID=yyyid;
BEGIN
IF NOT c1%ISOPEN THEN 
    OPEN c1;
END IF;
LOOP
    FETCH c1 into xid;
    dbms_output.put_line(TO_CHAR(xid));
    EXIT WHEN c1%NOTFOUND; 
END LOOP;
CLOSE c1;   
END;

Когда я создаю хранимую процедуру, я получаю следующую ошибку:

Warning: Procedure created with compilation errors.

Я выполняю приведенную ниже команду, чтобы предоставить мне более подробную информацию о приведенном выше абстрактном сообщении об ошибке.

SHO ERR;

Я получаю следующие данные в ответ на указанную выше команду:

Errors for PROCEDURE XXXLIST:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/18     PL/SQL: SQL Statement ignored
5/52     PL/SQL: ORA-00942: table or view does not exist

Теперь я понимаю, что существует проблема с именем таблицы или самим запросом sql. Поэтому я пытаюсь выполнить SQL-запрос самостоятельно, отдельно от PRODECURE, чтобы увидеть, что происходит с таблицей или запросом.

select distinct xxxID from MXS.Y where YID=yyyid;

Но я не нахожу проблем с вышеуказанным запросом. Запрос работает нормально, и я получаю правильный результат.

Итак, я не знаю, почему при выполнении процедуры возникают проблемы. Кто-нибудь может помочь?

1 Ответ

7 голосов
/ 16 сентября 2011

Возможное объяснение состоит в том, что используемой учетной записи предоставлен доступ к таблице через роль. В Oracle доступ, предоставляемый через роли, влияет на отдельные операторы SQL, но не на операторы SQL, встроенные в PL / SQL.

Если это так, владелец таблицы (или администратор БД) должен предоставить право выбора доступа к таблице непосредственно вашей учетной записи:

GRANT SELECT ON mxs.y TO <account>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...