CREATE OR replace PROCEDURE test (IN cat VARCHAR(300))
LANGUAGE SQL
P1: BEGIN
DECLARE vlinux VARCHAR(300) ;
DECLARE vSqlText VARCHAR(3000);
SET vlinux = cat;
SET vSqlText = 'INSERT INTO table2 SELECT a.*,'||vlinux||',INT(CURRENT DATE) FROM ods.table1 a'
||' ';
PREPARE S1 FROM vSqlText;
EXECUTE S1;
END;
以上的存储过程创建是OK的,但是在执行
db2 'call test('dddd')'
,系统提示SQL0206N "DDDD" is not valid in the context where it is used. SQLSTATE=42703。
如果执行 db2 'call test(123456)'
则能成功。
求指导。谢谢!
参数为啥不能是字符串呢
创建SQL存储过程(CREATE PROCEDURE (SQL) statement )
CREATE PROCEDURE procedure-name(IN | OUT | INOUT parameter-name data-type,...) ) ---存储过程可以设定输入参数和输出参数LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQLBEGIN ---开始DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好DO ---循环体开始SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vIDINSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据END FOR; --
CREATE PROCEDURE procedure-name(IN | OUT | INOUT parameter-name data-type,...) ) ---存储过程可以设定输入参数和输出参数LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQLBEGIN ---开始DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好DO ---循环体开始SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vIDINSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据END FOR; --
温馨提示:答案为网友推荐,仅供参考
第1个回答 2015-07-16
感觉你这个存储过程写得好奇怪,你的目的是什么呢?