我想在动态查询中转换一个简单的查询,直接传递一些变量。查询可以是这样的:
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
试试这个:
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;
更多关于开始/结束代码块的详细示例见这里的链接
DbVisualizer使用分号作为语句分隔符。在执行包含分号的代码块时,您需要注意。如果编辑器只包含代码块,最简单的方法是使用SQL Commander->Execute Buffer运行,因为这会将完整的脚本传递给DB并运行它而不进行任何解析。
有几个解决方案,你可以在这里找到它们:
http://confluence.dbvis.com/display/UG91/Executing +复杂语句