【发布时间】:2020-01-11 01:14:43
【问题描述】:
我有一个表,其中一个列存储 SQL 查询返回的 id 或存储逗号分隔的 id。
创建表来存储查询或ID(以,分隔)
create table test1
(
name varchar(20) primary key,
stmt_or_value varchar(500),
type varchar(50)
);
insert into test1 (name, stmt_or_value, type)
values ('first', 'select id from data where id = 1;','SQL_QUERY')
insert into test1 (name, stmt_or_value, type)
values ('second', '1,2,3,4','VALUE')
数据表如下
create table data
(
id number,
subject varchar(500)
);
insert into data (id, subject) values (1, 'test subject1');
insert into data (id, subject) values (2, 'test subject2');
insert into data (id, subject) values (3, 'test subject2');
我无法制定在执行存储的 sql 或根据 name 的值解析存储的 id 后返回值的查询。
select id, subject
from data
where id in( EXECUTE IMMEDIATE stmt_or_value
where type='SQL_QUERY'
and name = 'first') or
( parse and return ids
from stmt_or_value
where type='VALUE'
and name = 'second')
你能帮我解决这个问题吗?
解析逗号分隔值已完成,我基本上需要以下第一部分查询的帮助:
( 立即执行 stmt_or_value
其中 type='SQL_QUERY'
和 name = 'first')
【问题讨论】:
-
但是
test1 表中没有id(或类似的)列。 -
动态 SQL 很难。我建议您首先编写要运行的查询的静态版本。一旦你有了这个工作,确定你需要动态的部分并编辑查询以适应。请注意,动态 SQL 不是也不能是纯 SQL 解决方案。您需要 PL/SQL 来组装和执行动态查询。因此,请仔细考虑您要实现的目标,因为我认为您需要一些不同的方法,但我无法建议您需要采用哪种方式,因为我对您的要求没有完全了解。
-
我们很少希望将逗号分隔的值存储在一列中。我们希望在列中存储列名、表名或查询等元信息也是非常罕见的。所以我在这里和 APC 在一起;您不太可能采用非常复杂的方法来实现更容易实现的目标。可以使用通用数据库和纯 SQL。