2011-07-28 95 views
4

我正在使用Oracle 10g,并且需要在的where子句中使用变量SELECT;例如。在SELECT语句中使用声明变量

DECLARE 
v_blah NUMBER; 
BEGIN 

v_blah := 13; 

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

END; 

,但我得到一个错误说

PLS-00428:INTO子句预计在SELECT语句

似乎在DELETE或INSERT语句做工精细,所以我不确定为什么它不会在这里工作。

+0

我对此感到困惑......应该工作:( – War

+2

欢迎来到Oracle。它不是SQL Server ;-) –

回答

3

正确的语法是:

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; 

select statement in PL/SQL要求,其中存储查询结果的地方。在这个例子中,这个地方是v_people_rec变量。

上面的例子预计只有一行被返回。在其他情况下,它会抛出异常NO_DATA_FOUNDTOO_MANY_ROWS

3

这与您的参数无关,这是因为您将代码作为过程性代码块执行,因此它不允许您选择任何内容。

你想对查询的结果做什么?将它显示到屏幕上?如果是这样,请将其选中到一个游标,并遍历并使用dbms_output。

+0

我想返回该行。这将是更大的一部分,插入,然后返回插入的行类型的查询。 – Jacob

+2

在这种情况下,您需要将结果选择到光标中。 – DoctorMick