Stored procedures plsql过程中出现意外的令牌错误
我得到了这个错误 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'之后发现意外的标记结束语句。预期代币可能包括: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
如果..结束。。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