如何将 DEFINE 变量设置为等于 PL/SQL 中另一个已定义表的选择

Posted

技术标签:

【中文标题】如何将 DEFINE 变量设置为等于 PL/SQL 中另一个已定义表的选择【英文标题】:How to set a DEFINE variable equal to the selection from another defined table in PL/SQL 【发布时间】:2019-02-21 19:13:58 【问题描述】:

如何使用 DEFINE 函数来设置一个等于另一个 SELECT 语句结果的变量? (结果只是单列/单行选择)

例子:

DEFINE source_table = mysourcetable
DEFINE use_date = select distinct max(txn_date) from &source_table

select asdf1, asdf2
from &source_table s
where &use_date between s.eff_date and s.end_date

我目前遇到的错误是 WHERE 子句中 &usedate 变量上的“缺少表达式”。

希望这是有道理的。

【问题讨论】:

【参考方案1】:

刚刚想通了。 WHERE子句中的&use_date需要放在括号内...

DEFINE source_table = mysourcetable
DEFINE use_date = select distinct max(txn_date) from &source_table

select asdf1, asdf2
from &source_table s
where (&use_date) between s.eff_date and s.end_date

OR 将 DEFINE 查询放在括号中:

DEFINE source_table = mysourcetable
DEFINE use_date = (select distinct max(txn_date) from &source_table)

select asdf1, asdf2
from &source_table s
where &use_date between s.eff_date and s.end_date

【讨论】:

【参考方案2】:

为了完整起见,这是使用COLUMN .. NEW_VALUE 命令的另一种方式:

DEFINE source_table = mysourcetable

column  the_col new_value  use_date 

select distinct max(txn_date) the_col from &source_table;

PROMPT The value is &use_date 

select asdf1, asdf2
from &source_table s
where TO_DATE('&use_date') between s.eff_date and s.end_date;

【讨论】:

以上是关于如何将 DEFINE 变量设置为等于 PL/SQL 中另一个已定义表的选择的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 T-SQL 中一样在 PL/SQL 中声明和使用变量?

PL/SQL:, 如何将变量传递给 SELECT 语句并返回所有结果行

将 PL/SQL 定义转换为 TSQL

如何通过 PL/SQL 过程和表名作为变量打印动态 SQL 中的所有表行?

如何在 PL/SQL 中使用 select 语句为 SQL*Plus 变量赋值?

如何将操作系统变量加载到 PL/SQL 中?