Db2程序错误 [英] Db2 procedure error

查看:127
本文介绍了Db2程序错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨伙计们,

我几天到了DB2的世界,现在我陷入了一个似乎对我来说很困难的问题。

请加入这个并给我一些帮助。


以下是我写的一个这样的程序,


pad @ disrs16:/ home / pads / temp> db2 -td @ -vf proc2.db2

CREATE PROCEDURE new_procedure1()

LANGUAGE SQL

BEGIN

DECLARE va_datbi VARCHAR(8);

DECLARE va_datab VARCHAR(8);

DECLARE vh_datbi VARCHAR(8);

DECLARE vh_datab VARCHAR(8);

DECLARE new_cursor游标用于

SELECT A.datbi Adatbi,A.datab Adatab,H.datbi Hdatbi ,H.datab

Hdatab

来自SAPR3.A957 A

,SAPR3.KONH H

WHERE

(A.DATBI<> H.DATBI

OR A.DATAB<> H.DATAB)

AND A.MANDT = H.MANDT

AND A.KNUMH = H.KNUMH

AND A.MANDT =''03 0''

更新Hdatbi,Hdatab;


打开new_cursor;

循环

FETCH new_cursor INTO va_datbi,va_datab,vh_datbi,vh_datab;

UPDATE SAPR3.KONH H

SET H.datbi = va_datbi,

H.datab = va_datab

其中CURRENT OF new_cursor

和H.knumh介于''0000000000''和'0090000000''

和H.kotabnr =''030'';

结束循环;

CLOSE new_cursor;

commit;

end


当我尝试执行它时,我收到以下错误。但我无法

纠正这个,今晚是我提交给
制作,可以任意请帮我解决这个问题。我的邮件ID是
bi ** ****@in.ibm.com


DB21034E该命令作为SQL语句处理,因为它是

而不是

有效的命令行处理器命令。在SQL处理过程中它返回了


SQL0104N一个意外的令牌UPDATE SAPR3.KONH H SET H.datbi = va_"

被发现

跟随h_datbi,vh_datab; " ;.预期的代币可能包括:

"< psm_return>"。 LINE NUMBER = 27。 SQLSTATE = 42601


pad @ disrs16:/ home / pads / temp>


非常感谢......

解决方案

< bi ********** @ hotmail.com>在消息中写道

news:11 ********************** @ g43g2000cwa.googlegr oups.com ...

嗨伙计们,
我几天到了DB2的世界,现在我陷入了一个似乎对我来说变得困难的问题。
请等一下进入这个并给我一些帮助。

以下是我写过的一个这样的程序,

pad @ disrs16:/ home / pads / temp> db2 -td @ - vf proc2.db2
CREATE PROCEDURE new_procedure1()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor游标
SELECT A.datbi Adatbi,A.datab Adatab,H.datbi Hdatbi,H.datab
Hdatab
来自SAPR3.A957 A
,SAPR3.KONH H
WHERE
(A.DATBI<> H.DATBI
OR A.DATAB <> H.DATAB)
AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT =''030''
更新Hdatbi,Hdatab;

打开new_cursor;
循环
FETCH new_cursor INTO va_datbi,va_datab,vh_datbi,vh_datab;
更新SAPR3.KONH H
SET H.datbi = va_datbi, H.datab = va_datab
其中CURRENT OF new_cursor
和H.knumh介于''0000000000''和'0090000000''
和H.kotabnr =''030''; <结束循环;
关闭new_cursor;
提交;
结束

当我尝试执行它时,我收到以下错误。但我无法<纠正这个,今晚是我将其提交到
制作的最后期限,可以随便帮我解决这个问题。我的邮件ID是
bi ****** @ in.ibm.com

DB21034E该命令作为SQL语句处理,因为它是
不是
有效的命令行处理器命令。在SQL处理过程中它返回:
SQL0104N发现了一个意外的令牌UPDATE SAPR3.KONH H SET H.datbi = va_
跟随h_datbi,vh_datab; " ;.预期的代币可能包括:
"< psm_return>"。 LINE NUMBER = 27。 SQLSTATE = 42601

pad @ disrs16:/ home / pads / temp>

非常感谢......



当光标在获取时命中EOF(+100)时会发生什么?此时光标没有

当前值。我不知道这是否与您收到的-104错误直接相关,但这似乎是一个问题。


嗨Mark,


感谢您的回复,

我已经包含了

直到sqlcode = 100,如下所示:


CREATE PROCEDURE new_procedure1()

LANGUAGE SQL

BEGIN

DECLARE va_datbi VARCHAR(8) ;

DECLARE va_datab VARCHAR(8);

DECLARE vh_datbi VARCHAR(8);

DECLARE vh_datab VARCHAR(8);

DECLARE new_cursor游标

SELECT A.datbi Adatbi,A.datab Adatab,H.datbi Hdatbi,H.datab

Hdatab

来自SAPR3.A957 A

,SAPR3.KONH H

WHERE

(A.DATBI<> H.DATBI

或A.DATAB<> H.DATAB)

AND A.MANDT = H.MANDT

AND A.KNUMH = H.KNUMH

AND A.MANDT =''030''

更新Hdatbi,Hdatab;


OPEN new_cursor;

DO UNTIL SQLCODE = 100;

FETCH new_cursor INTO va_datbi,va_datab,vh_datbi,vh_datab;

UPDATE SAPR3 .KONH H

SET H.datbi = va_datbi,

H.datab = va_datab

其中CURRENT OF new_cursor

和H.knumh在''0000000000''和'0090000000之间''

和H.kotabnr =''030'';

end do;

CLOSE new_cursor;

commit;

end


但我又收到了这个错误.... 。我很遗憾.....请指导

me ...

DB21034E该命令作为SQL语句处理,因为它是

不是

有效的命令行处理器命令。在SQL处理期间它返回


SQL0104N意外的令牌DO发现在 OPEN

new_cursor; 。

预期的代币可能包括:"< psm_repeat>"。 LINE NUMBER = 21。

SQLSTATE = 42601

最好的问候

Bikash


<双********** @ hotmail.com>在消息中写道

news:11 ******************** @ f14g2000cwb.googlegrou ps.com ...

嗨Mark,

感谢您的回复,
我已经包含了
直到sqlcode = 100,如下所示:

CREATE PROCEDURE new_procedure1 ()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor游标
SELECT A.datbi Adatbi,A.datab Adatab,H.datbi Hdatbi,H.datab
Hdatab
来自SAPR3。 A957 A
,SAPR3.KONH H

(A.DATBI<> H.DATBI
OR A.DATAB<> H.DATAB) AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT =''030''
更新Hdatbi,Hdatab;

OPEN new_cursor;
DO UNTIL SQLCODE = 100;
FETCH new_cursor I NTO va_datbi,va_datab,vh_datbi,vh_datab;
更新SAPR3.KONH H
SET H.datbi = va_datbi,
H.datab = va_datab
其中CURRENT OF new_cursor
和H.knumh之间的''0000000000''和'0090000000''
和H.kotabnr =''030'';
结束了;
关闭new_cursor;
提交;
结束

但我又收到了这个错误.....我在亏本.....请指导
我...

DB21034E该命令作为SQL语句处理,因为它不是
有效的命令行处理器命令。在SQL处理期间它返回:
SQL0104N意外的令牌DO发现在 OPEN
new_cursor; 。
预期的令牌可能包括:"< psm_repeat>"。 LINE NUMBER = 21。
SQLSTATE = 42601
最好的问候
Bikash




do until条件不会被检查(并且不会终止

循环)直到循环中的最后一个语句。你需要一些基本的编程

课程。


如果使用SQL条件处理程序也会更好。

Hi Folks ,
I am few days old to the world of DB2 and right now i am stuck into a
problem that seems to be getting difficult for me.
Please have alook into this and provide me some help.

Below is one such procedure that i have written ,

pads@disrs16:/home/pads/temp>db2 -td@ -vf proc2.db2
CREATE PROCEDURE new_procedure1 ()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor cursor for
SELECT A.datbi Adatbi , A.datab Adatab , H.datbi Hdatbi, H.datab
Hdatab
FROM SAPR3.A957 A
,SAPR3.KONH H
WHERE
(A.DATBI <> H.DATBI
OR A.DATAB <> H.DATAB )
AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT = ''030''
for update of Hdatbi,Hdatab ;

open new_cursor;
loop
FETCH new_cursor INTO va_datbi , va_datab , vh_datbi , vh_datab;
UPDATE SAPR3.KONH H
SET H.datbi=va_datbi,
H.datab=va_datab
where CURRENT OF new_cursor
and H.knumh between ''0000000000'' and ''0090000000''
and H.kotabnr=''030'' ;
end loop ;
CLOSE new_cursor;
commit;
end

When I try and execute it I get the following error .but i am unable to
rectify this , tonight is the deadline for me to submit it into
production, can anyonle please help me out with this.my mail id is
bi******@in.ibm.com

DB21034E The command was processed as an SQL statement because it was
not a
valid Command Line Processor command. During SQL processing it
returned:
SQL0104N An unexpected token "UPDATE SAPR3.KONH H SET H.datbi=va_"
was found
following "h_datbi , vh_datab; ". Expected tokens may include:
"<psm_return>". LINE NUMBER=27. SQLSTATE=42601

pads@disrs16:/home/pads/temp>

thanks a lot......

解决方案

<bi**********@hotmail.com> wrote in message
news:11**********************@g43g2000cwa.googlegr oups.com...

Hi Folks ,
I am few days old to the world of DB2 and right now i am stuck into a
problem that seems to be getting difficult for me.
Please have alook into this and provide me some help.

Below is one such procedure that i have written ,

pads@disrs16:/home/pads/temp>db2 -td@ -vf proc2.db2
CREATE PROCEDURE new_procedure1 ()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor cursor for
SELECT A.datbi Adatbi , A.datab Adatab , H.datbi Hdatbi, H.datab
Hdatab
FROM SAPR3.A957 A
,SAPR3.KONH H
WHERE
(A.DATBI <> H.DATBI
OR A.DATAB <> H.DATAB )
AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT = ''030''
for update of Hdatbi,Hdatab ;

open new_cursor;
loop
FETCH new_cursor INTO va_datbi , va_datab , vh_datbi , vh_datab;
UPDATE SAPR3.KONH H
SET H.datbi=va_datbi,
H.datab=va_datab
where CURRENT OF new_cursor
and H.knumh between ''0000000000'' and ''0090000000''
and H.kotabnr=''030'' ;
end loop ;
CLOSE new_cursor;
commit;
end

When I try and execute it I get the following error .but i am unable to
rectify this , tonight is the deadline for me to submit it into
production, can anyonle please help me out with this.my mail id is
bi******@in.ibm.com

DB21034E The command was processed as an SQL statement because it was
not a
valid Command Line Processor command. During SQL processing it
returned:
SQL0104N An unexpected token "UPDATE SAPR3.KONH H SET H.datbi=va_"
was found
following "h_datbi , vh_datab; ". Expected tokens may include:
"<psm_return>". LINE NUMBER=27. SQLSTATE=42601

pads@disrs16:/home/pads/temp>

thanks a lot......


What happens when your cursor hits EOF (+100) on the fetch? There is no
current of cursor at that point. I don''t know if that is directly related to
the -104 error you are receiving, but it appears to be a problem.


Hi Mark,

Thanks afor ur response ,
I have included the
Do until sqlcode=100 as shown below :

CREATE PROCEDURE new_procedure1 ()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor cursor for
SELECT A.datbi Adatbi , A.datab Adatab , H.datbi Hdatbi, H.datab
Hdatab
FROM SAPR3.A957 A
,SAPR3.KONH H
WHERE
(A.DATBI <> H.DATBI
OR A.DATAB <> H.DATAB )
AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT = ''030''
for update of Hdatbi,Hdatab ;

OPEN new_cursor;
DO UNTIL SQLCODE = 100;
FETCH new_cursor INTO va_datbi , va_datab , vh_datbi , vh_datab;
UPDATE SAPR3.KONH H
SET H.datbi=va_datbi,
H.datab=va_datab
where CURRENT OF new_cursor
and H.knumh between ''0000000000'' and ''0090000000''
and H.kotabnr=''030'' ;
end do;
CLOSE new_cursor;
commit;
end

But again i have received this error .....i am at loss.....please guide
me...
DB21034E The command was processed as an SQL statement because it was
not a
valid Command Line Processor command. During SQL processing it
returned:
SQL0104N An unexpected token "DO" was found following " OPEN
new_cursor; ".
Expected tokens may include: "<psm_repeat>". LINE NUMBER=21.
SQLSTATE=42601

Best Regards
Bikash


<bi**********@hotmail.com> wrote in message
news:11********************@f14g2000cwb.googlegrou ps.com...

Hi Mark,

Thanks afor ur response ,
I have included the
Do until sqlcode=100 as shown below :

CREATE PROCEDURE new_procedure1 ()
LANGUAGE SQL
BEGIN
DECLARE va_datbi VARCHAR(8);
DECLARE va_datab VARCHAR(8);
DECLARE vh_datbi VARCHAR(8);
DECLARE vh_datab VARCHAR(8);
DECLARE new_cursor cursor for
SELECT A.datbi Adatbi , A.datab Adatab , H.datbi Hdatbi, H.datab
Hdatab
FROM SAPR3.A957 A
,SAPR3.KONH H
WHERE
(A.DATBI <> H.DATBI
OR A.DATAB <> H.DATAB )
AND A.MANDT = H.MANDT
AND A.KNUMH = H.KNUMH
AND A.MANDT = ''030''
for update of Hdatbi,Hdatab ;

OPEN new_cursor;
DO UNTIL SQLCODE = 100;
FETCH new_cursor INTO va_datbi , va_datab , vh_datbi , vh_datab;
UPDATE SAPR3.KONH H
SET H.datbi=va_datbi,
H.datab=va_datab
where CURRENT OF new_cursor
and H.knumh between ''0000000000'' and ''0090000000''
and H.kotabnr=''030'' ;
end do;
CLOSE new_cursor;
commit;
end

But again i have received this error .....i am at loss.....please guide
me...
DB21034E The command was processed as an SQL statement because it was
not a
valid Command Line Processor command. During SQL processing it
returned:
SQL0104N An unexpected token "DO" was found following " OPEN
new_cursor; ".
Expected tokens may include: "<psm_repeat>". LINE NUMBER=21.
SQLSTATE=42601

Best Regards
Bikash



The "do until" condition will not be checked (and will not terminate the
loop) until the last statement in the loop. You need some basic programming
lessons.

It would also be better if you used SQL condition handlers.


这篇关于Db2程序错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆