sql - 使用变量作为子查询执行查询
问题描述
我有一个这样的查询:
select * from SOURCE
where A = 'a'
and B in (
select SOMECOLUMN from VERY_LONG_QUERY
WHERE SOMECHECK = 'some check'
)
我想将上面的查询转换为这样的语句 PL/SQL:
veryLongQueryVar := 'select SOMECOLUMN from VERY_LONG_QUERY WHERE SOMECHECK = ''some check'' '
select * from SOURCE
where A = 'a'
and B in veryLongQueryVar
怎么可能?
解决方案
这是您可以做什么的建议。
您将长查询中的值存储在一个集合中,并在另一个选择中使用它。
declare
TYPE my_collection IS TABLE OF SOMECOLUMN%type
INDEX BY number;
tab my_collection ;
rec SOURCE%rowtype;
begin
select SOMECOLUMN
bulk collect into tab
from VERY_LONG_QUERY
WHERE SOMECHECK = 'some check';
select * into rec
from SOURCE
where A = 'a'
and B in (select column_value from table(tab);
end;
您还可以创建动态 SQL 字符串。
declare
TYPE cur IS REF CURSOR;
my_cur cur;
veryLongQueryVar varchar2(32000);
begin
veryLongQueryVar := 'select SOMECOLUMN from VERY_LONG_QUERY WHERE SOMECHECK = ''some check'' '
veryLongQueryVar := 'select * from SOURCE
where A = ''a''
and B in ('||veryLongQueryVar ||')'
open my_cur for veryLongQueryVar ;
....
end;
推荐阅读
- llvm - Enable a llvm pass for Os but not O2
- java - 我如何在java中发送带有“soap”的文件
- php - 我怎样才能保存我的价值使用 laravel 5.7 代码到 MySQL 数据库?
- azure-devops - 如何将参数添加到任务组
- php - 变量中的随机数不重复
- firefox-addon-webextensions - 内容安全策略:该页面的设置阻止了在内联(“script-src”)firefox webextensions 中加载资源
- tsql - 旧式到新式连接转换
- c# - 如何在数据集中添加一列,每行都有一个变量值(int)
- abap - 如何在动态内部表中循环?
- google-chrome-extension - Chrome 扩展消息传递:未选中 runtime.lastError:无法建立连接。接收端不存在