在SELECT语句中使用声明的变量

Jac*_*cob 5 plsql oracle10g

我正在使用Oracle 10g并且需要在SELECT的where子句中使用变量; 例如.

DECLARE
v_blah NUMBER;
BEGIN

v_blah := 13;

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

END;
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说

PLS-00428:此SELECT语句中需要一个INTO子句

它似乎在DELETE或INSERT语句中正常工作,所以我不确定为什么它在这里不起作用.

use*_*735 5

正确的语法是:

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;
Run Code Online (Sandbox Code Playgroud)

PL/SQL 中select 语句需要一个存放查询结果的地方。在这个例子中,位置是v_people_rec可变的。

上面的例子期望只返回一行。在其他情况下,它会抛出异常NO_DATA_FOUNDTOO_MANY_ROWS.