BEGIN-SELECT语句上存在运行时错误的SQR过程



Hello Stack社区,

在过去的几天里,我一直被我最初认为相对简单的SQR更新所困扰。

简而言之,过程Process Main选择COMPANY="ABC"的所有员工,然后我需要在表a&表B与每位员工关联ID

TableB是空的,所以我只是为每个empID运行一个INSERT语句,并且添加记录时没有任何问题。

然而,一些empID可能在TableA中有现有记录,在将INSERT插入TableA之前,我需要检查一下。

奇怪的是,当我执行这个SQR时,我得到了以下错误

(SQR 3721) Bad param found on 'BEGIN-SELECT' line;
(SQR 3704) Missing procedure name.
    A.EMPLID

我很确定这是语法问题,或者我只是在脑子里放屁。。。有人有什么建议吗?

这是我的伪代码

!***************************
begin-procedure Process-Main
!***************************
begin-select distinct
J.DEPTID
J.EMPLID
J.EFFDT
do Insert-TableA-Record
do Insert-TableB-Record
FROM PS_JOB J
WHERE J.COMPANY = 'ABC'
end-select
end-procedure
!****************************
begin-procedure Insert-TableA-Record
!****************************
let $found = 'N'
begin-select
    A.EMPLID
    let $found = 'Y'
    FROM TableA A
    WHERE A.EMPLID=&J.EMPLID
    AND A.PLAN_TYPE='P1234'
end-select
if $found = 'N'
    begin-sql ON-ERROR = Abort-Update
        INSERT INTO TableA (
            EMPLID,
            PLAN_TYPE
        )
        VALUES (
            &J.EMPLID,
            'P1234'
        );
    end-sql
end-if
end-procedure
!****************************
begin-procedure Insert-TableB-Record
!****************************
begin-sql ON-ERROR = Abort-Update
!INSERT INTO TableB STMT HERE... 
!everything runs fine in this procedure
end-sql
end-procedure

我找到了答案。。。我知道这是一个愚蠢的错误,因为我不熟悉SQR语法

我没有在SELECT区域内缩进"LET"语句。现在我知道只有SQL语句可以出现在第一列中。

我学到了另一堂编码课,这是正确的语法:

begin-select
A.EMPLID
    let $found = 'Y'
FROM TableA A
WHERE A.EMPLID=&J.EMPLID
AND A.PLAN_TYPE='P1234'
end-select

在过程中,Insert TableA Record,A.Emprid需要在的第1列中

我在测试类似的程序时也遇到了同样的错误

最新更新