在 SQL Server 中,我可以像这样定义局部变量。
declare @id number := 1000
select * from tbl_A where id = @id;
select * from tbl_B where id = @id;
非常方便。我试图做同样的事情,PL/SQL
但它不起作用。
DECLARE id number;
select 1000 into id from dual;
你知道如何做类似的事情吗?最简单的方法是我的目标。
如果要在 PL/SQL 中定义局部变量,则需要一个完整的 PL/SQL 块
DECLARE
id NUMBER;
BEGIN
SELECT 1000
INTO id
FROM dual;
END;
要不就
DECLARE
id NUMBER := 1000;
BEGIN
<<do something that uses the local variable>>
END;
如果你想在 SQL*Plus 中声明一个变量
SQL> variable id number
SQL> begin
select 1000 into :id from dual;
end;
/
SQL> print id
ID
----------
1000
SQL> SELECT * FROM tbl_a WHERE id = :id
DEF x = foo
SELECT '&x' FROM dual;
结果将是:foo
注意:该变量即使在执行后也会保留该值。清除变量运行UNDEFINE x
。
DECLARE 块的替代方法是使用 WITH 子句:
WITH my_params AS (
SELECT 123 AS min_id FROM DUAL
)
SELECT *
FROM some_table
WHERE id > (SELECT min_id FROM my_params)
由于许多供应商都支持 WITH 子句,因此它更具可移植性,并且您可以从参数无缝更改为动态值。例如:
WITH my_params AS (
SELECT min(id) AS min_id FROM some_id_table
)
SELECT *
FROM some_table
WHERE id > (SELECT min_id FROM my_params)
在 PL/SQL 中声明变量的一般语法是
var_nm 数据类型 [NOT NULL := var_value ];
- var_nn 是变量的名称。
- datatype 是有效的 PL/SQL 数据类型。
- NOT NULL 是变量的可选规范,该变量不能被分配空值。
- var_value 或 DEFAULT value 也是一个可选规范,您可以在其中使用某些特定值初始化变量。
- 每个变量声明都是一个单独的语句,并且必须以分号结束。
我们可以通过以下两种方式之一为变量赋值 -
var_nm:= var_value;
)select from
(例如SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];
)在你的情况下,正如贾斯汀洞穴已经提到的那样
DECLARE
id number;
BEGIN
SELECT 1000 into id from dual;
dbms_output.put_line('id : '|| id );
END;
/
或者
DECLARE
id number := 1000;
BEGIN
dbms_output.put_line('id : '|| id );
END;
/
注意:'/' 即 END 关键字后的反斜杠表示执行上述 PL/SQL 块。
(刚刚偶然发现这个线程。)从 SQL*Plus 12.2 开始,您可以同时声明和赋值:
SQL> var id 编号 = 1000
SQL> select * from tbl_A where id = :id;
Oracle 称之为输入绑定。
如果一定要在 PL/SQL 中做,答案是别人给出的。