Stored procedures plsql过程中出现意外的令牌错误

Stored procedures plsql过程中出现意外的令牌错误,stored-procedures,db2,Stored Procedures,Db2,我得到了这个错误 SQL错误[42601]:在Y PRESENT'之后发现意外的令牌结束语句。预期代币可能包括: 如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85 SQL错误[42601]:在Y PRESENT'之后发现意外的令牌结束语句。预期代币可能包括: 如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85 在Y PRESENT'之后发现意外的标记结束语句。预期代币可能包括: 如果..结束。。SQ

我得到了这个错误

SQL错误[42601]:在Y PRESENT'之后发现意外的令牌结束语句。预期代币可能包括: 如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85 SQL错误[42601]:在Y PRESENT'之后发现意外的令牌结束语句。预期代币可能包括: 如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85 在Y PRESENT'之后发现意外的标记结束语句。预期代币可能包括: 如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85 在Y PRESENT'之后发现意外的标记结束语句。预期代币可能包括:
如果..结束。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.7.85

正确使用理解SQL的语法编辑器,并在检查代码时更加小心,这将有助于您。一个好的SQL编辑器可能会在您尝试编译之前突出显示您的错误,就像任何代码检查一样

另外,您应该了解ANSI SQL PL和Oracle PL/SQL之间的区别。您的代码似乎使用了ANSISQLPL语法,尽管您的错误可能是任何类型的SQL的错误

下面是代码中一些明显的语法错误,可能还有其他错误:

在插入EPS.USERWISETENDERREPORT AA的行中,应省略AA

对于相同的insert语句,您有103.,而您可能指的是103

对于插入EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER A.AUCTIONID、A.USERID、A.QUALIFIED的行,您可能是指 插入EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER拍卖ID,用户ID,合格

插入EPS的行也存在相同的错误。SELECTIVEUSERWISETENDERREPORT不限定列名

对于以SET OUTPUT_MESSEGE=开头的行,您可能指的是SET OUTPUT_MESSAGE=,其他行中也存在此打字错误


我知道PL/SQL,但不知道DB2。是否存在Oracle PL/SQL仿真模式?上面的代码不是PL/SQL,但是错误消息也不是您在Oracle中从该代码得到的,所以不清楚这是什么。这是db2错误。你能看到if-else条件是否正确吗?这里不需要P1:Begin,因为代码中似乎只有一个Begin,所以只需将P1:Begin替换为Begin,并将End P1替换为End;在最后的add terminater as/slashAn中,IBM DB2中的PL/SQL过程的一个例子是,尽管文档奇怪地引用了PL/SQL模式。但在解决了wht u所说的问题后,我在这行代码中遇到了错误。如果P_REPORT_FLAG='Y',则如果V_COUNT_TECHNOCOMMERCIALQUALIFIEDCUSTOMER<1,则将插入EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER AUCTIONID、USERID、限定值P_AUCTIONID、P_USERID、'Y';ELSE设置输出_消息='数据已存在';如果结束;不要在提出新问题时使用评论。按照建议使用理解SQL的编辑器,并以这种方式查找错误。对不起,伙计,我没有找到使用SQL编辑器的任何解决方案
CREATE PROCEDURE EPS.PROCEDURE_OTE_LTE_BIDDER_REPORT 
   (
       IN P_USERID INTEGER,
       IN P_AUCTIONID INTEGER,
       IN P_REPORT_FLAG VARCHAR(3),
       OUT O_ERROR_CODE INTEGER,
       OUT OUTPUT_MESSAGE VARCHAR(100),
       IN P_LOG_USERID INTEGER
   )
    LANGUAGE SQL 
    
P1:BEGIN ATOMIC DECLARE SQLCODE INTEGER DEFAULT 0;
    
    DECLARE V_USERID INTEGER;
    DECLARE V_AUCTIONID INTEGER;
    DECLARE V_REPORT_FLAG_TECHNOCOMMERCIALQUALIFIEDCUSTOMER VARCHAR(3);
    DECLARE V_COUNT_TECHNOCOMMERCIALQUALIFIEDCUSTOMER INTEGER;
    DECLARE V_REPORT_FLAG_SELECTIVEUSERWISETENDERREPORT VARCHAR(3);
    DECLARE V_COUNT_SELECTIVEUSERWISETENDERREPORT INTEGER;
    
    
    SELECT COUNT(*) INTO V_COUNT_TECHNOCOMMERCIALQUALIFIEDCUSTOMER FROM EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER A 
        WHERE A.AUCTIONID=P_AUCTIONID AND A.USERID=P_USERID;
    
    
    SELECT COUNT(*) INTO V_COUNT_SELECTIVEUSERWISETENDERREPORT FROM EPS.SELECTIVEUSERWISETENDERREPORT B 
        WHERE B.AUCTIONID=P_AUCTIONID AND B.USERID=P_USERID;
    
    
    
    IF P_REPORT_FLAG = 'Y' THEN
        IF V_COUNT_TECHNOCOMMERCIALQUALIFIEDCUSTOMER < 1  THEN
            INSERT INTO EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER (A.AUCTIONID,A.USERID,A.QUALIFIED) VALUES (P_AUCTIONID,P_USERID,'Y');
        ELSE
            SET OUTPUT_MESSEGE = 'DATA ALREADY PRESENT';
        END IF;
    ELSE 
        IF  V_COUNT_TECHNOCOMMERCIALQUALIFIEDCUSTOMER > 0  THEN
            DELETE FROM EPS.TECHNOCOMMERCIALQUALIFIEDCUSTOMER C WHERE C.AUCTIONID=P_AUCTIONID AND C.USERID=P_USERID;
        ELSE
            SET OUTPUT_MESSAGE = 'NO DATA FOUND';
        END IF;    
    END IF; 
    
    IF P_REPORT_FLAG = 'Y' THEN
        IF V_COUNT_SELECTIVEUSERWISETENDERREPORT < 1  THEN
            INSERT INTO EPS.SELECTIVEUSERWISETENDERREPORT AA 
            (   AA.AUCTIONID,
                AA.USERID,
                AA.TENDERREPORTTYPEID,
                AA.STATUS,
                AA.CREATEID,
                AA.CREATEDATE,
                AA.UPDATEID,
                AA.UPDATEDATE
            ) 
            VALUES 
            (
                P_AUCTIONID,
                P_USERID,
                103.
                'A',
                P_LOG_USERID,
                CURRENT TIMESTAMP,
                NULL,
                NULL
            );
        ELSE
            SET OUTPUT_MESSEGE = 'DATA ALREADY PRESENT';
        END IF;     
    ELSE  
        IF  V_COUNT_SELECTIVEUSERWISETENDERREPORT > 0  THEN
            DELETE FROM EPS.SELECTIVEUSERWISETENDERREPORT  CC WHERE CC.AUCTIONID=P_AUCTIONID AND CC.USERID=P_USERID;
        ELSE
            SET OUTPUT_MESSAGE = 'NO DATA FOUND';
        END IF;        
    END IF; 
    
    
 END P1