我有一些不同的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;
但是没有机会......如果没有程序或功能,怎么办?
答案 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;
换句话说,定义两个替换变量,为它们赋值,最后在所有查询中部署它们。