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

6
我正在使用Oracle 10g,并且需要在SELECT语句的where子句中使用变量,例如:
DECLARE
v_blah NUMBER;
BEGIN

v_blah := 13;

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

END;

但是我遇到了一个错误,提示:

PLS-00428: 此SELECT语句中需要使用INTO子句

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


我被那个搞糊涂了...那应该可以工作的 :( - War
3
欢迎来到Oracle。它不是SQL Server;-) - Tony Andrews
2个回答

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;

在PL/SQL中,select语句需要一个地方来存储查询结果。在这个例子中,这个地方是变量v_people_rec
以上例子期望返回恰好一行。在其他情况下,它会抛出异常NO_DATA_FOUNDTOO_MANY_ROWS

3
这与你的参数无关,而是因为你将代码作为过程性代码执行,所以不允许你选择任何内容。
你想对查询结果做什么?将其显示在屏幕上吗?如果是这样,请将其选择到一个游标中,迭代并使用dbms_output。

我想返回该行。这将是一个更大的查询的一部分,即插入,然后返回已插入行类型的查询。 - Jacob
2
在这种情况下,您需要将结果选择到游标中。 - DoctorMick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接