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 展开
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
首先, 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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询