【问题标题】:SQL Oracle: Save variable from select with where statementSQL Oracle:使用 where 语句从选择中保存变量
【发布时间】:2022-01-13 07:35:09
【问题描述】:

我使用的是 SQL Developer 19.1。我有一个包含多个子选择语句的巨大脚本。看起来是这样的

def var1 = '1234'
def var2 = '5678'

select a.id
from tablea a
where something.id = (select other.id from .... where number1 = &var1 and number2 = &var2)

我想用另一个选择语句来获取 var1 和 var2。我怎么做?我试过了

declare
 var1 number;
begin
 select somenumber into var1 from ... where ... 
end; 

但似乎我不能在那里使用 where 语句。我还尝试了 bind 或 @var1..

你们知道我接下来可以尝试什么吗?

我的目标是这样的

var1 = (select somenumber from ... where ... ) 

【问题讨论】:

    标签: sql variables select oracle-sqldeveloper where-clause


    【解决方案1】:

    如果您想继续使用替换变量,您可以使用the column ... new_value functionality(该文档适用于 SQL*Plus,但主要适用于 SQL Developer;并专注于将其用于报告标题,但它比建议的更有用):

    -- define not needed now
    --def var1 = '1234'
    --def var2 = '5678'
    
    column var1 new_value var1
    select somenumber as var1 from ... where ...
    
    column var2 new_value var2
    select somenumber as var2 from ... where ...
    
    select a.id
    from tablea a
    where something.id = (select other.id from .... where number1 = &var1 and number2 = &var2)
    

    一个简单的例子来展示这一点;如果工作表有:

    column var1 new_value var1
    select 1234 as var1 from dual;
    
    column var2 new_value var2
    select 5678 as var2 from dual;
    
    select * from dual where 1234 = &var1 and 5678 = &var2;
    

    然后脚本输出窗格显示:

          VAR1
    ----------
          1234
    
    
          VAR2
    ----------
          5678
    
    old:select * from dual where 1234 = &var1 and 5678 = &var2
    new:select * from dual where 1234 = 1234 and 5678 = 5678
    
    D
    -
    X
    

    或者你可以使用绑定变量:

    var var1 number;
    var var2 number;
    
    begin
      select somenumber into :var1 from ... where ...
      select somenumber into :var2 from ... where ...
    end;
    /
    
    select a.id
    from tablea a
    where something.id = (select other.id from .... where number1 = :var1 and number2 = :var2)
    

    请注意,对var1var2 的引用现在以冒号开头,表示绑定变量,而不是与符号表示替换变量;并且该冒号也出现在 into :var1 部分中 - 它仍然指的是绑定变量,而不是本地 PL/SQL 变量。

    又是一个简单的例子;工作表脚本:

    var var1 number;
    var var2 number;
    
    begin
      select 1234 into :var1 from dual;
      select 5678 into :var2 from dual;
    end;
    /
    
    select * from dual where 1234 = :var1 and 5678 = :var2;
    

    得到输出:

    PL/SQL procedure successfully completed.
    
    
    D
    -
    X
    

    如果您想查看匿名 PL/SQL 块分配的值,可以使用 print var1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多