DB2数据库字段都是varchar类型的,我把这个语句放到SQL里执行,提示有一个error。请大侠帮忙看看 哪里错了

declareaVARCHAR(50)bVARCHAR(50)cVARCHAR(50)beginupdateM_MERsetSTATUS='1',AUDIT_STATUS... declare
a VARCHAR(50)
b VARCHAR(50)
c VARCHAR(50)
begin
update M_MER set STATUS='1',AUDIT_STATUS='9',UPDATE_TIME=current timestamp,AUDIT3_TIME=current timestamp where UN_MER_ID='222456050450001'
update M_TERM set STATUS='1',AUDIT_STATUS='9',UPDATE_TIME=current timestamp,AUDIT3_TIME=current timestamp,INSTALL_STATUS=? where UN_MER_ID='222456050450001'
select MER_ID INTO a,TERM_ID INTO b,ORG_ID INTO c from M_TERM where UN_MER_ID='222456050450001'
insert into M_INSTALL(UN_MER_ID,MER_CN_NM,UN_TERM_ID,TERM_ID,MER_ID,ORG_ID) values('222456050450001','测试3','22200010',b,a,c)
exception
DBMS_OUTPUT.put_line('导入数据异常,停止导入!')
when others then rollback
end
展开
 我来答
匿名用户
2013-01-16
展开全部
你拿着 Oracle 的脚本, 丢到 DB2 里面去跑。 自然是不通过的了。

首先, DB2 是可以支持 BEGIN END 这样的写法的。

例如:

db2 => TRUNCATE TABLE output_debug IMMEDIATE
DB20000I SQL 命令成功完成。

db2 => BEGIN \
db2 (cont.) => DECLARE testvalue INT; \
db2 (cont.) => SET testvalue = 0; \
db2 (cont.) => MyLoop: LOOP \
db2 (cont.) => SET testvalue = testvalue + 1; \
db2 (cont.) => INSERT INTO output_debug VALUES( TO_CHAR(testvalue) ); \
db2 (cont.) => IF testvalue >= 5 THEN \
db2 (cont.) => LEAVE MyLoop; \
db2 (cont.) => END IF; \
db2 (cont.) => END LOOP; \
db2 (cont.) => END
DB20000I SQL 命令成功完成。

db2 => select * from output_debug
DATA
------------------------------------
1
2
3
4
5

5 条记录已选择。

然后,DB2 好像没 DBMS_OUTPUT.put_line 这样的 方法。
DBMS_OUTPUT.put_line 是 Oracle 特有的。

最后,
exception ... when others 这种, 是 Oracle 的异常处理代码。

DB2 的异常处理, 参考下面的例子:

TRUNCATE TABLE output_debug IMMEDIATE@

BEGIN
-- DB2 中,如果需要使用 sqlcode ,那么必须先 DECLARE 以后,才能使用。
DECLARE sqlcode INT;

P1: BEGIN ATOMIC
-- 定义错误处理
-- 如果发生错误,结束处理,并回滚前面做的处理。
DECLARE UNDO HANDLER
FOR
SQLEXCEPTION
BEGIN
-- 异常处理
INSERT INTO output_debug VALUES('出错啦!' || TO_CHAR(sqlcode));
END;

-- 先更新.
UPDATE test_main SET value = 'Test3' WHERE id = 1;
-- 插入一行主键重复数据.
INSERT INTO test_main VALUES(1, 'PK');
INSERT INTO output_debug VALUES('本语句不会执行到!');
END P1;

END
@

db2 => select * from test_main WHERE id = 1@
ID VALUE
----------- ----------
1 Test2
1 条记录已选择。

db2 => select * from output_debug@
DATA
----------------------------------------
出错啦!-803
帅春桖92
2013-01-15 · 超过28用户采纳过TA的回答
知道答主
回答量:112
采纳率:100%
帮助的人:71.9万
展开全部
?号的问题吧!
追问
呵呵,没看到,把问号改为'0' 还是不行,是不是DB2不支持 begin end 这种写法呀。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式