简单的“SELECT”与变量,但没有“INTO”

时间:2012-02-23 16:07:52

标签: sql database oracle plsql

我有一些不同的SELECT查询具有相同的值。我想使用像DECLARE这样的东西但是当我写一个简单的DECLARE时它会说“INTO”是预期的。

如果我只想要一个“SELECT”,我怎么能用这个表格“INTO”?

我只有两个(或更多)选择:

SELECT * FROM my_table1 WHERE column1=5 and column2=6;

SELECT * FROM my_table2 WHERE col1=5 and col2=6;

现在我想声明一个像var_col1和var_col2这样的变量,并在两个选择查询中同时使用它们。

我认为这样可行:

DECLARE
var_col1 number := 5;
var_vol2 number := 6;
BEGIN
SELECT * FROM my_table1 WHERE column1=var_col1 and column2=var_col2;
SELECT * FROM my_table2 WHERE col1=var_col1 and col2=var_col1;
/* and more SELECTs with var_col1 and var_col2 */
END;

但是没有机会......如果没有程序或功能,怎么办?

3 个答案:

答案 0 :(得分:6)

当您在SQL * Plus中编写select * from some_table;时,SQL*Plus充当客户端程序,并且根据从中返回的数据为您做了大量工作。数据库,格式化并显示它。

只要键入DECLARE,就会开始PL / SQL块。现在,您正在调用PL / SQL,PL / SQL正在调用SQL。因此,您需要决定如何在PL / SQL中处理从SQL返回的数据。这样做的方法是通过INTO子句和变量来接收输出。考虑到,如果您没有提供SELECT子句,INTO的输出数据会去哪里?它必须去某个地方,对吧?

希望这很清楚。

答案 1 :(得分:2)

如果要以这种方式执行或设置列,则必须选择已声明的变量。例如:

DECLARE
var_col1 number := 5;
var_vol2 number := 6;
BEGIN
   SELECT my_table1.var_col into var_col1 
     FROM my_table1 
    WHERE column1=var_col1 
      AND column2=var_col2;
--etc.....
END;

OR

DECLARE
    var_col1 number := 5;
    var_vol2 number := 6;
    BEGIN
       SELECT 5 into var_col1 
         FROM my_table1 
        WHERE column1=var_col1 
          AND column2=var_col2;
    --etc.....
    END;

编辑:我还应该补充一点,您还可以声明可以在SQL中使用的输出Vvariables来返回输出以帮助调试等。所以你可以做类似的事情:

DECLARE
 out  varchar2(200);

在你的BEGIN声明中做了类似的事情:

 dbms_output.put_line(out);

其中输出了一些潜在的有用信息(取决于您的目的)。

答案 2 :(得分:1)

您正在使用PLSQL Developer,它可以选择多种不同的窗口类型。如果我没记错的话,Command窗口就是SQL * Plus模拟器。这样做应该可行:

var n1 number 
var n2 number 

exec &&n1 := 5
exec &&n2 := 6

SELECT * FROM my_table1 WHERE column1=&&n1 and column2=&&n2 ; 
SELECT * FROM my_table2 WHERE col1&&n1 and col2=&&n2;

换句话说,定义两个替换变量,为它们赋值,最后在所有查询中部署它们。