db2 z / os在动态查询中转换简单查询

时间:2014-08-26 10:18:58

标签: sql dynamic db2 zos dbvisualizer

我想在动态查询中转换一个简单的查询,直接传递一些变量。 查询可能是这样的:

SELECT * FROM mySchema.THETABLE a 
WHERE a.THECOLUMN = 'someVariable';

所以,我试过这样的事情:

DECLARE v_schema varchar(7);
DECLARE v_param1 varchar(200);
DECLARE v_sqlstr varchar(2000);

SET v_schema = 'mySchema';
SET v_param1 = 'someVariable';

SET v_sqlstr = 'SELECT * FROM ' 
   || v_schema 
   || '.THETABLE a WHERE a.THECOLUMN = ''' 
   || v_param1 
   || ''';

execute sql v_sqlstr;

如何做到这一点? 当我在dbvisualizer命令窗口中尝试这种类型的代码时,我得到了错误:

[DECLARE - 0 row(s), 0.000 secs]  
[Error Code: -199, SQL State: 42601]  
DB2 SQL Error: SQLCODE=-199, SQLSTATE=42601, SQLERRMC=VARCHAR;
TABLE STATEMENT , . SCROLL INSENSITIVE SENSITIVE ASENSITIVE NO, DRIVER=4.15.82

2 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE
   v_schema varchar(7);
   v_param1 varchar(200);
   v_sqlstr varchar(2000);
BEGIN

  v_schema := 'mySchema';
  v_param1 := 'someVariable';

SET v_sqlstr = 'SELECT * FROM ' 
   || v_schema 
   || '.THETABLE a WHERE a.THECOLUMN = ''' 
   || v_param1 
   || ''';

execute sql v_sqlstr;
END;

the link here

中开始/结束代码块的更详细示例

答案 1 :(得分:0)

DbVisualizer使用分号作为语句分隔符。当执行包含分号作为代码一部分的代码块时,您需要注意。如果编辑器只包含代码块,最简单的方法是使用 SQL Commander->执行缓冲区运行,因为它会将完整的脚本传递给数据库并在不进行任何解析的情况下运行它。

有几种解决方案,你可以在这里找到它们:

http://confluence.dbvis.com/display/UG91/Executing+Complex+Statements