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

Posted

技术标签:

【中文标题】在 SELECT 语句中使用声明的变量【英文标题】:Use a declared variable in a SELECT statement 【发布时间】:2011-07-28 14:52:36 【问题描述】:

我使用的是 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 语句中工作正常,所以我不确定为什么它不能在这里工作。

【问题讨论】:

我对此深信不疑......应该可以工作:( 欢迎来到甲骨文。这不是 SQL Server ;-) 【参考方案1】:

正确的语法是:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

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

以上是关于在 SELECT 语句中使用声明的变量的主要内容,如果未能解决你的问题,请参考以下文章

在过程中声明变量和选择语句

请问啥是SQL的DECLARE语句?

MySQL游标简介

MySQL游标简介

关于游标的一些总结

oracle declare语句中,怎么才能定义一个变量来作为查询条件,代码如下: