[英]Keyword IF not expected
I have the following inline SQL code, running on an AS400.我有以下内联 SQL 代码,在 AS400 上运行。 The IF comes up as unexpected but I don't understand why.
IF 出现意外,但我不明白为什么。 What I'm trying to do is to build a stored procedure to update, or insert, a table row.
我要做的是构建一个存储过程来更新或插入一个表行。 The code shown below is inline to ensure my logic is correct.
下面显示的代码是内联的,以确保我的逻辑是正确的。
I've tried a number of different approaches including IF EXISTS, CASE, SET @COUNT = SELECT COUNT(*).我尝试了许多不同的方法,包括 IF EXISTS、CASE、SET @COUNT = SELECT COUNT(*)。 I continue to run into odd errors.
我继续遇到奇怪的错误。
In the code shown below, I fail when I hit the IF statement.在下面显示的代码中,当我点击 IF 语句时我失败了。
CREATE OR REPLACE VARIABLE IN_LOC CHAR(02);
CREATE OR REPLACE VARIABLE IN_MCO CHAR(02);
CREATE OR REPLACE VARIABLE IN_SYMBOL CHAR(03);
CREATE OR REPLACE VARIABLE IN_POLICYNUM CHAR(07);
CREATE OR REPLACE VARIABLE IN_MODULE CHAR(02);
CREATE OR REPLACE VARIABLE IN_RISKLOC CHAR(05);
CREATE OR REPLACE VARIABLE IN_PRCCLASS VARCHAR(05);
CREATE OR REPLACE VARIABLE IN_PRCTER VARCHAR(03);
CREATE OR REPLACE VARIABLE IN_MESSAGE CHAR(02);
SET IN_LOC='00';
SET IN_MCO='01';
SET IN_SYMBOL='CPP';
SET IN_POLICYNUM='0003748';
SET IN_MODULE='00';
SET IN_RISKLOC='00003';
SET IN_PRCCLASS='09';
SET IN_PRCTER='1';
SET IN_MESSAGE='NOT FOUND FOR ODD PROGRAMMING';
UPDATE BASPPRC01
SET PRCCLASS=IN_PRCCLASS,PRCTER=IN_PRCTER,MESSAGE=IN_MESSAGE
WHERE CAST(IN_LOC||IN_MCO||IN_SYMBOL||IN_POLICYNUM||IN_MODULE||IN_RISKLOC AS CHAR(21))
= CAST(LOCATION||MASTERCO||SYMBOL||POLICYNUM||MODULE||RISKLOC AS CHAR(21)) ;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO BASPPRC01
(LOCATION,MASTERCO,SYMBOL,POLICYNUM,MODULE,RISKLOC,PRCCLASS,PRCTER,MESSAGE)
VALUES
(IN_LOC
, IN_MCO
, IN_SYMBOL
, IN_POLICYNUM
, IN_MODULE
, IN_RISKLOC
, IN_PRCCLASS
, IN_PRCTER
, IN_MESSAGE ) ;
END
COMMIT TRANSACTION ;
You should show the error you get...你应该显示你得到的错误......
with the following:具有以下内容:
CREATE OR REPLACE PROCEDURE myproc ()
LANGUAGE SQL
BEGIN
UPDATE BASPPRC01
SET PRCCLASS=IN_PRCCLASS,PRCTER=IN_PRCTER,MESSAGE=IN_MESSAGE
WHERE CAST(IN_LOC||IN_MCO||IN_SYMBOL||IN_POLICYNUM||IN_MODULE||IN_RISKLOC AS CHAR(21))
= CAST(LOCATION||MASTERCO||SYMBOL||POLICYNUM||MODULE||RISKLOC AS CHAR(21)) ;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO BASPPRC01
(LOCATION,MASTERCO,SYMBOL,POLICYNUM,MODULE,RISKLOC,PRCCLASS,PRCTER,MESSAGE)
VALUES
(IN_LOC
, IN_MCO
, IN_SYMBOL
, IN_POLICYNUM
, IN_MODULE
, IN_RISKLOC
, IN_PRCCLASS
, IN_PRCTER
, IN_MESSAGE ) ;
END
COMMIT TRANSACTION ;
END;
I get [SQL0199] Keyword BEGIN not expected. Valid tokens: THEN.
我得到
[SQL0199] Keyword BEGIN not expected. Valid tokens: THEN.
[SQL0199] Keyword BEGIN not expected. Valid tokens: THEN.
This passes a syntax check, note THEN
and END IF
instead of BEGIN
also, COMMIT
instead of COMMIT TRANSACTION
这通过了语法检查,注意
THEN
和END IF
而不是BEGIN
, COMMIT
而不是COMMIT TRANSACTION
CREATE OR REPLACE PROCEDURE procedure2 ()
LANGUAGE SQL
BEGIN
UPDATE BASPPRC01
SET PRCCLASS=IN_PRCCLASS,PRCTER=IN_PRCTER,MESSAGE=IN_MESSAGE
WHERE CAST(IN_LOC||IN_MCO||IN_SYMBOL||IN_POLICYNUM||IN_MODULE||IN_RISKLOC AS CHAR(21))
= CAST(LOCATION||MASTERCO||SYMBOL||POLICYNUM||MODULE||RISKLOC AS CHAR(21)) ;
IF @@ROWCOUNT = 0 THEN
INSERT INTO BASPPRC01
(LOCATION,MASTERCO,SYMBOL,POLICYNUM,MODULE,RISKLOC,PRCCLASS,PRCTER,MESSAGE)
VALUES
(IN_LOC
, IN_MCO
, IN_SYMBOL
, IN_POLICYNUM
, IN_MODULE
, IN_RISKLOC
, IN_PRCCLASS
, IN_PRCTER
, IN_MESSAGE ) ;
END IF;
COMMIT;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.