【问题标题】:Oracle SQL: Declaring a variable and using the variable in other queriesOracle SQL:声明一个变量并在其他查询中使用该变量
【发布时间】:2020-05-19 14:43:14
【问题描述】:

我是 Oracle 数据库的新手,在声明变量和在其他查询中使用它时遇到了一些问题。例如,我想创建一个名为 caseID 的变量,用于存储基于 select 语句的数字。然后我想在我想创建的其他查询中使用那个 caseID。这就是我所拥有的:

DECLARE
   caseID NUMBER;
BEGIN
   SELECT case_id FROM cases WHERE user_id = 'test';
END;

SELECT * FROM version where case_id = :caseID
MINUS
SELECT * FROM version where version_type = 'A'

我无法在版本查询中使用 caseID,弹出窗口让我输入 caseID 是什么。

【问题讨论】:

    标签: sql oracle dbeaver


    【解决方案1】:

    使用 SQLPlus,您可以尝试声明一个 SQLPlus 变量(这也适用于任何与此类变量声明兼容的 GUI 工具,例如 SQL Developer、TOAD、...):

    variable caseID number;
    BEGIN
       SELECT case_id INTO :caseID FROM cases WHERE user_id = 'test';
    END;
    /
    select * from version where case_id = :caseID;
    

    另一种不使用特殊客户端语法而只使用 PL/SQL 的可能性:

    DECLARE
    caseID number;
    v version%ROWTYPE;
    BEGIN
       SELECT case_id INTO caseID FROM cases WHERE user_id = 'test';
       SELECT * INTO v FROM version WHERE case_id = caseID;
    END;
    /
    

    但在这种情况下,您必须在 PL/SQL 中编写所有代码并确保处理 SELECT 语句的输出。

    【讨论】:

    • 我使用的工具是 DBeaver,我尝试了你的答案。它给了我一个无效的 SQL 语句
    • 我已经用完整的 PL/SQL 解决方案更新了答案。
    【解决方案2】:

    我认为您正在寻找的是DBeaver 中的@set 命令来立即定义和分配它并在会话中使用它:

    @set userId='test'
    @set caseId=(SELECT case_id FROM cases WHERE user_id = :userId)
    SELECT * FROM version where case_id = :caseId
    

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2021-05-18
      • 2021-03-09
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多