在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;
你知道如何做类似的事吗?最简单的方法是我的目标。
答案 0 :(得分:9)
如果要在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
答案 1 :(得分:1)
DECLARE Block的替代方法是使用WITH子句:
aj
它更具可移植性,因为许多供应商都支持WITH子句,您可以从参数到动态值进行无缝更改。例如:
WITH my_params AS (
SELECT 123 AS min_id FROM DUAL
)
SELECT *
FROM some_table
WHERE id > (SELECT min_id FROM my_params)
答案 2 :(得分:0)
我在Oracle上试过这个并且它有效:
> DEF x = TOTO
> SELECT '&x' FROM dual;
结果将是:TOTO
答案 3 :(得分:0)
在PL / SQL中声明变量的一般语法是
var_nm数据类型[NOT NULL:= var_value];
- var_nn是变量的名称。
- datatype是一种有效的PL / SQL数据类型。
- NOT NULL是变量的可选规范,该变量不能赋值为null。
- var_value或DEFAULT值也是一个可选规范,您可以在其中初始化具有某个特定值的变量。
- 每个变量声明都是一个单独的声明,必须以分号结束。
我们可以通过以下两种方式之一为变量赋值 -
var_nm:= var_value;
)select from
(例如SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];
)在你的情况下,Justin Cave已经提到它可以是
DECLARE
id number;
BEGIN
SELECT 1000 into id from dual;
dbms_output.put_line('id : '|| id );
END;
/
OR
DECLARE
id number := 1000;
BEGIN
dbms_output.put_line('id : '|| id );
END;
/
注意:'/'即END关键字后面的反斜杠表示执行上述PL / SQL块。
答案 4 :(得分:0)
(只是偶然发现了这个线程。)从SQL * Plus 12.2开始,您可以同时声明和分配一个值:
SQL> var id number = 1000
SQL>从tbl_A中选择*,其中id =:id;
Oracle称其为输入绑定。
如果必须在PL / SQL中执行此操作,答案是由其他人给出的。