Oracle SQL: 声明一个变量并在其他查询中使用该变量

Oracle SQL: Declaring a variable and using the variable in other queries

我是 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。

使用 SQLPlus 你可以尝试声明一个 SQLPlus 变量(这应该也适用于任何与这种变量声明兼容的 GUI 工具,例如 SQL开发人员,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 中的 @set 命令来立即定义和分配它并在会话中使用它:

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