我想将查询结果用作另一个查询的输入。 什么可能使它变得困难:变量是数据库中的模式。
CREATE or replace VARIABLE myschema varchar(15) ;
set myschema = (select owner from syscat.tables where tabname = 'xyz');
select count(name) as result from myschema.USR02 where USTYP = 'A';
DROP VARIABLE myschema;
这是我在使用声明失败后的最后一次尝试。 但我得到一个错误,因为“myschema”用作字符串,当然没有名称为“myschema”的模式。不使用第一个查询的结果。
如果我只运行前两行,我会得到schemaname作为结果。我是否必须以特殊方式标记变量?目标只是通过使用“myschema”的动态值在第3行中查询的结果。
答案 0 :(得分:1)
不幸的是,如果要动态处理表,模式或列名,必须使用动态SQL(通过字符串操作形成自定义SQL查询):
这是基本的想法:
execute immediate 'select * from ' || myschema || '.USR02';
但是,您不能只在动态SQL中运行裸选;你必须把结果放在某个东西上。整个事情必须在复合SQL块中。所以完整的例子看起来像这样(简化的空间查询)。
此查询假定存在一个名为“result”的表来存储您要返回的结果。
begin
declare myschema varchar(100) default '';
set myschema = (select owner from syscat.tables where tabname = 'xyz');
execute immediate 'insert into result select count(*) from ' || myschema || '.USR02';
end
select * from result;
请注意,在块中,您可以简单地声明一个变量(如我的示例所示)。因此,您不必为此目的声明全局变量,除非您希望它超出此声明的范围。