【问题标题】:Howto Declare & set variables in PL/SQL如何在 PL/SQL 中声明和设置变量
【发布时间】:2020-07-25 20:56:10
【问题描述】:

问题

我正在努力在 PL/SQL 中定义变量

在 T-SQL 中,很容易声明和设置变量并在 Select 查询中引用它们(如下所示)。但是我如何在 PL/SQL 中做类似的事情呢?

我尝试过什么

这似乎是 Stack 上多次被问到的常见问题,但没有明确的答案!我得到的最接近的是This 链接在这里,但即使我仍然无法让它为我工作。

我的各种 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';

我正在尝试做的 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

【问题讨论】:

  • var 不是 PL/SQL,它是一个 SQL*Plus 命令,只能在 SQL*Plus 中使用(也许在 Oracle SQL Developer 中也是如此,我不知道)。与所有其他数据库不同,T-SQL 混合了过程代码和查询语言 SQL。但是 SQL 作为查询语言没有变量

标签: oracle plsql


【解决方案1】:

SQL/Plus 和 SQL 开发人员

如果您使用的用户界面支持VARIABLE command,那么您可以使用它来声明绑定变量:

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;

但是,除了中间的BEGIN ... END 部分之外,您没有使用 PL/SQL。

其他用户界面

您可以声明单个 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;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2010-09-23
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2012-06-08
    • 2018-03-07
    相关资源
    最近更新 更多