Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DB2z/os在动态查询中转换简单查询_Sql_Dynamic_Db2_Zos_Dbvisualizer - Fatal编程技术网

Sql DB2z/os在动态查询中转换简单查询

Sql DB2z/os在动态查询中转换简单查询,sql,dynamic,db2,zos,dbvisualizer,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 = 'someV

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

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;
所以,我试过这样的方法:

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 commander窗口中尝试此类代码时,返回错误:

[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中的开始/结束代码块的更详细示例使用分号作为语句分隔符。当执行包含分号的代码块时,您需要注意。如果编辑器只包含代码块,最简单的方法是使用sqlcommander->executebuffer运行,因为这将把完整的脚本传递给数据库,并在不进行任何解析的情况下运行它

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


尝试在执行sql v_sqlstr的
行之前打印
v_sqlstr的输出以便我们可以看到发生了什么,但错误似乎与“声明”有关。我想我错过了一些关于这个块的语法。。。我是z/os的新手…
SQLERRMC=VARCHAR
表示它在抱怨
VARCHAR
位,它希望在错误的最后一行有一个关键字。这是否在
begin/end
?我试着把
begin/end
begin-ATOMIC/end
。。。当我添加BEGIN时,它给出了以下错误:
[BEGIN-0行,0.000秒][错误代码:-104,SQL状态:42601]DB2SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=CODICEANCA;节,DRIVER=4.15.82[声明-0行,0.000秒][错误代码:-199,SQL状态:42601]DB2 SQL错误:SQLCODE=-199,SQLSTATE=42601,SQLERRMC=VARCHAR;表语句。滚动不敏感敏感不敏感,DRIVER=4.15.82
谢谢罗杰,我想应该是这样的。现在我必须理解正确的语法。。。