【发布时间】:2014-08-26 10:18:57
【问题描述】:
我想在动态查询中转换一个简单的查询,直接传递一些变量。 查询可能是这样的:
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
【问题讨论】:
-
尝试在
execute sql v_sqlstr;行之前打印v_sqlstr的输出,以便我们可以看到发生了什么 -
但错误似乎与“DECLARE”有关。我想我错过了这个块的语法......我是 z/os 的新手......
-
SQLERRMC=VARCHAR表示它在抱怨varchar位,它需要错误最后一行的关键字之一。这是在begin/end内吗? -
我试着把
BEGIN/END,BEGIN ATOMIC/END...当我添加BEGIN时,它给了我这个错误:[BEGIN - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=CODICEBANCA;SECTION, DRIVER=4.15.82 [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
标签: sql dynamic db2 zos dbvisualizer