字符串 注意,SELECT * FROM TABLE不是一个可以动态运行的语句。因此,静态版本没有意义。SELECT ... INTO :myData FROM MYTABLE是有效的静态语句,但不能动态使用。相反,您需要使用可以动态运行的VALUES (SELECT * from MYTABLE) into :myData。 下面是一个使用dynamic SQL的IBM示例。注意,通常你会看到FETCH在一个循环中返回多行,正如所写的,这将只返回第一行,然后结束。这也显示了替换变量?在语句中的使用。这是一个最佳实践,因为它可以防止SQL注入攻击。但是请注意,不能对表名或列名使用替换变量。
//**************************************************
//* Declare program variables. *
//* STMT initialized to the *
//* listed SQL statement. *
//**************************************************
DCL-S EMPNUM CHAR(6);
DCL-S NAME CHAR(15);
DCL-S STMT CHAR(500)
INZ('SELECT LASTNAME FROM CORPDATA.EMPLOYEE +
WHERE EMPNO = ?');
...
//*************************************************************
//* Prepare STMT as initialized in declare section *
//*************************************************************
EXEC SQL PREPARE S1 FROM :STMT;
//*************************************
//* Declare Cursor for STMT *
//*************************************
EXEC SQL DECLARE C1 CURSOR FOR S1;
//*****************************************************
//* Assign employee number to use in select statement *
//*****************************************************
EMPNUM = '000110';
//**********************
//* Open Cursor *
//**********************
EXEC SQL OPEN C1 USING :EMPNUM;
//***********************************************
//* Fetch record and put value of *
//* LASTNAME into NAME *
//***********************************************
EXEC SQL FETCH C1 INTO :NAME;
//********************************
//* Program processes NAME here *
//********************************
...
//******************
//* Close cursor *
//******************
EXEC SQL CLOSE C1;
1条答案
按热度按时间iaqfqrcu1#
不能使用带有可变表名的 * 静态SQL*。
您需要通过
EXECUTE IMMEDIATE
或PREPARE
和EXECUTE
使用 * 动态SQL*字符串
注意,
SELECT * FROM TABLE
不是一个可以动态运行的语句。因此,静态版本没有意义。SELECT ... INTO :myData FROM MYTABLE
是有效的静态语句,但不能动态使用。相反,您需要使用可以动态运行的VALUES (SELECT * from MYTABLE) into :myData
。下面是一个使用dynamic SQL的IBM示例。注意,通常你会看到
FETCH
在一个循环中返回多行,正如所写的,这将只返回第一行,然后结束。这也显示了替换变量?
在语句中的使用。这是一个最佳实践,因为它可以防止SQL注入攻击。但是请注意,不能对表名或列名使用替换变量。型