问题
我正在努力在 PL/SQL 中定义变量
在 T-SQL 中,很容易声明和设置变量并在 Select 查询中引用它们(如下所示)。但是我该如何在 PL/SQL 中做类似的事情呢?
我尝试过什么
这似乎是 Stack 上多次被问到的常见问题,但没有明确的答案!我得到的最接近的是这里的链接,但即使如此我也无法让它为我工作。
我的各种 PL/SQL 尝试
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
variable v_date datetime;
exec :v_date := to_date('01/01/2014','mm/dd/yyyy');
var myname varchar2(20);
exec :myname := 'Tom';
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的事情的 T-SQL 示例
DECLARE
@String VARCHAR(10),
@Date DATE,
@Integer As INT
SET @String = 'Hello'
SET @Date = '20200413'
SET @Integer = Year(@Date)
SELECT *
FROM TABLE
WHERE 1=1
AND col_a = @String
AND col_b >= @Year
Run Code Online (Sandbox Code Playgroud)
SQL/Plus 和 SQL 开发人员
如果您使用的用户界面支持该VARIABLE命令,那么您可以使用它来声明绑定变量:
VARIABLE string VARCHAR2(10);
VARIABLE dt DATE;
VARIABLE year NUMBER;
BEGIN
:string := 'Hello';
:dt := DATE '2020-04-13';
:year := EXTRACT( YEAR FROM :dt );
END;
/
SELECT *
FROM table_name
WHERE col_a = :string
AND col_b = :year;
Run Code Online (Sandbox Code Playgroud)
然而,这里除了中间部分之外,您没有使用 PL/SQL BEGIN ... END。
其他用户界面:
您可以声明单个 PL/SQL 块并使用 PL/SQL 变量:
DECLARE
v_string VARCHAR2(10) := 'Hello';
v_dt DATE := DATE '2020-04-13';
v_year NUMBER(4,0) := EXTRACT( YEAR FROM v_dt );
c_cur SYS_REFCURSOR;
BEGIN
OPEN c_cur FOR
SELECT *
FROM table_name
WHERE col_a = v_string
AND col_b = v_year;
-- Do stuff in PL/SQL with the cursor.
END;
/
Run Code Online (Sandbox Code Playgroud)