Используйте объявленную переменную в операторе SELECT - PullRequest
5 голосов
/ 28 июля 2011

Я использую Oracle 10g и мне нужно использовать переменную в предложении where для SELECT ; например.

DECLARE
v_blah NUMBER;
BEGIN

v_blah := 13;

SELECT * FROM PEOPLE p WHERE p.LuckyNumber = v_blah;

END;

но я получаю сообщение об ошибке

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

Кажется, что он отлично работает в операторе DELETE или INSERT, поэтому я не уверен, почему он не будет работать здесь.

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Правильный синтаксис:

DECLARE
  v_blah NUMBER := 13;
  v_people_rec PEOPLE%ROWTYPE;
BEGIN
  SELECT * INTO v_people_rec FROM PEOPLE p WHERE p.LuckyNumber = v_blah;
END;

Оператор выбора в PL / SQL требует места для сохранения результата запроса. В этом примере это переменная v_people_rec.

В приведенном выше примере ожидается, что будет ровно одна строка . В других случаях он выдаст исключения NO_DATA_FOUND или TOO_MANY_ROWS.

3 голосов
/ 28 июля 2011

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

Что вы делаетехотите сделать с результатом запроса?Вывести это на экран?Если это так, выделите его курсором, выполните итерацию и используйте dbms_output.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...