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