使用‘?’代替动态SQL的参数,参数为过滤条件的值
CREATE OR REPLACE PROCEDURE T_1208(ID INT)
AS
BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM D_I WHERE ID>? AND DATE_TIME>? ' USING ID,'2021-1-1';
END;
执行结果
使用‘?’代替动态SQL的参数,参数为列值
CREATE OR REPLACE PROCEDURE T_1208(COL VARCHAR(100),ID INT)
AS
BEGIN
EXECUTE IMMEDIATE 'SELECT ? FROM D_I WHERE ID>? ' USING COL,ID;
END;
执行结果
这个执行结果和我们预期的不太一样,那是应该为转译过后的语句变成 SELECT ‘ID’ FROM D_I WHERE ID>15;
使用‘?’代替动态SQL的参数,参数为表名
CREATE OR REPLACE PROCEDURE T_1208(TAB VARCHAR(100),COL VARCHAR(100),ID INT)
AS
BEGIN
EXECUTE IMMEDIATE 'SELECT ? FROM ? WHERE ID>? ' USING COL,TAB,ID;
END;
执行结果
执行报-2007语法错误。
说明:出现上面问题是因为代入参数是添加了’'导致。如果想使用列和表名或者模式名也是变量,我们可以使用如下方法。
CREATE OR REPLACE PROCEDURE T_1208(TAB VARCHAR(100),COL VARCHAR(100),ID INT)
AS
BEGIN
EXECUTE IMMEDIATE 'SELECT '||COL||' FROM '||TAB||' WHERE ID>? ' USING ID;
END;
执行结果