如何在DB2中的存储过程中使用输入变量

如何在DB2中的存储过程中使用输入变量,db2,db2-luw,Db2,Db2 Luw,我正在创建一个存储过程,它接受一个输入变量,并在动态SQL查询中进行一些比较。但是变量没有被拾取,我如何在这里使用变量。下面是我的SP的外观 CREATE OR REPLACE PROCEDURE SP1( IN start_date VARCHAR(20)) DYNAMIC RESULT SETS 1 P1: BEGIN DECLARE SQLCODE integer; DECLARE table_exists integer default 0; DECLARE myQuery VARC

我正在创建一个存储过程,它接受一个输入变量,并在动态SQL查询中进行一些比较。但是变量没有被拾取,我如何在这里使用变量。下面是我的SP的外观

CREATE OR REPLACE PROCEDURE SP1(
IN start_date VARCHAR(20))

DYNAMIC RESULT SETS 1
P1: BEGIN

DECLARE SQLCODE integer;
DECLARE table_exists integer default 0;
DECLARE myQuery VARCHAR(2000);

SET myQuery = "CREATE TABLE XYZ AS(SELECT * FROM TABLE WHERE date > "+ start_date + ") WITH DATA"

execute immediate(myQuery)
END P1 
----------修改---------------

我的CREATE语句实际上比我在这里写的要长,我需要一个长的VARCHAR变量myquery,但我得到一个错误

``is too long.  The maximum length is "128"..``
我该怎么办

我需要做哪些更改才能使其正常工作???

您不能在Db2中的stings上使用“+”。使用
|
。你还遗漏了一些分号。这段代码为我运行

CREATE OR REPLACE PROCEDURE SP1(
IN start_date VARCHAR(20))

DYNAMIC RESULT SETS 1
P1: BEGIN

DECLARE SQLCODE integer;
DECLARE table_exists integer default 0;
DECLARE myQuery VARCHAR(200);

SET myQuery = 'CREATE TABLE XYZ AS(SELECT * FROM TABLE WHERE date > '|| start_date ||') WITH DATA';

execute immediate(myQuery);
END P1 
但是,如果只对日期进行参数化,则实际上不需要使用动态SQL。。i、 这也有效

CREATE OR REPLACE PROCEDURE SP1(
IN start_date DATE)

DYNAMIC RESULT SETS 1
P1: BEGIN

CREATE TABLE XYZ AS(SELECT * FROM TABLE WHERE date > start_date) WITH DATA;

END P1
你还是说你“需要一个长的VARCHAR”。。我们使用CLOB,你没有实际的限制

CREATE OR REPLACE PROCEDURE SP1(
IN start_date VARCHAR(20))

DYNAMIC RESULT SETS 1
P1: BEGIN

DECLARE SQLCODE integer;
DECLARE table_exists integer default 0;
DECLARE myQuery CLOB(200000);

SET myQuery = 'CREATE TABLE XYZ AS(SELECT * FROM TABLE WHERE date > '|| start_date ||') WITH DATA';

execute immediate(myQuery);
END P1

您可以将查询格式化为字符串,比如myQuery='create……'+start_date+')with…',然后在execute语句中使用它来定义'myQuery'我不需要任何其他键盘吗?这个综合征是throwin和error@uSeruSher我根据你的推荐编辑了我的原始帖子,但我仍然面临一个问题。你能看一下吗?日期文字应该用单引号括起来,所以
…WHERE Date>“| | | TRIM(start|u Date)| |””)
我对日期比较有问题,看起来需要引号,但你建议的那个也不起作用,我用CLOB替换了VACHAR,但仍然得到相同的错误!张贴复制品。您甚至没有显示您得到的SQL错误代码。你读过吗?特别是“包含足够的代码,以允许其他人重现问题”。这也一样