db2在变量中使用查询结果

时间:2017-05-15 14:27:48

标签: variables db2

我想将查询结果用作另一个查询的输入。 什么可能使它变得困难:变量是数据库中的模式。

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行中查询的结果。

1 个答案:

答案 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;

请注意,在块中,您可以简单地声明一个变量(如我的示例所示)。因此,您不必为此目的声明全局变量,除非您希望它超出此声明的范围。