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

2025-03-01 17:36:40
推荐回答(2个)
回答1:

你拿着 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

回答2:

?号的问题吧!