Ошибка процедуры ORA-00918: столбец определен неоднозначно

Эй, кто-нибудь может помочь с этими ошибками:

9/10 PLS-00428: an INTO clause is expected in this SELECT statement

Это появляется при попытке распечатать детали на основе одного параметра. Это код, который я использовал

 CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (ID_actor CHAR)
 AS
 first_name CHAR(30);
 last_name CHAR(30);
 title CHAR(40);
 year NUMBER;
 role CHAR(40);
quote CHAR(255);
CURSOR print_cursor IS
SELECT a.actorID, a.firstname, a.lastname, m.title as title, m.year as year ,  
 r.rolename as role1 , q.quotechar as quote1 FROM movie m, role r, quote q, rolequote  
rq, actor a WHERE
a.actorID = r.actorID AND
m.movieID = r.movieID AND
rq.quoteID = q.quoteID AND
rq.roleID = r.roleID;
BEGIN  
FOR row IN print_cursor LOOP
SELECT AQ.QUOTES, A.FIRSTNAME, A.LASTNAME 
FROM ACTOR_QUOTES AQ, ACTOR A
Where row.actorID = ID_actor;
END LOOP; 
END PRINT_ACTOR_QUOTES ;
/

1 ответ

Решение

Я предполагаю, что соответствующая ошибка

PLS-00428: в этом операторе SELECT ожидается предложение INTO

(а не тот, который вы упоминаете в заголовке вашего вопроса).

Проблема заключается в операторе SELECT в вашем цикле FOR. В PL/SQL вы не можете просто выбирать данные, ничего не делая с ними. Таким образом, вам нужен оператор INTO для хранения полученных данных в переменной PL/SQL:

SELECT AQ.QUOTES, A.FIRSTNAME, A.LASTNAME
  INTO quote, first_name, last_name
FROM ACTOR_QUOTES AQ, ACTOR A
Where row.actorID = ID_actor;

Тогда я могу заметить несколько дополнительных проблем:

  • Оператор SELECT, кажется, является полным внешним соединением, которое редко является тем, что вам нужно
  • Оператор SELECT с предложением INTO завершится ошибкой, если вернет более одной строки.
  • Какова цель цикла FOR, если вы перезаписываете локальные переменные на каждой итерации и ничего с ними не делаете.
Другие вопросы по тегам