简体   繁体   English

没有预期的关键字 IF

[英]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这通过了语法检查,注意THENEND IF而不是BEGINCOMMIT而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM