Variables db2在变量中使用查询结果

Variables db2在变量中使用查询结果,variables,db2,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 m

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

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;
这是我使用declare失败后的最后一次尝试。 但是我得到了一个错误,因为myschema被用作字符串,当然没有名为myschema的模式。不使用第一个查询的结果


如果我只运行前两行,那么结果就是schemaname。我必须用特殊的方式标记变量吗?目标只是第3行中使用myschema的动态值进行查询的结果。

不幸的是,如果要动态处理表、架构或列名,必须使用动态SQL通过字符串操作形成自定义SQL查询:

这是基本思想:

execute immediate 'select * from ' || myschema || '.USR02';
然而,您不能只在动态SQL中运行一个简单的select;你必须把结果写进一些东西里。整个过程必须在一个复合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;

注意,在块中,您可以简单地声明一个变量,如我的示例所示。因此,您不必为此声明全局变量,除非您希望它在这条语句之后继续存在。

不幸的是,我没有对数据库的写访问权限。代码集成在脚本中,提供的用户是只读的。我会按顺序运行查询并将结果存储在变量中,但这是不可能的。所以我的目标是:使用提供的用户在一个查询中获取这两个信息。@rysk,您应该能够使用会话表来声明此方法的全局临时表。。。即使您有一个只读用户。