0

你好堆栈社区,

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

简而言之,过程 Process-Main 选择 COMPANY = 'ABC' 的所有员工,然后我需要将记录插入到与每个员工 ID 关联的 TableA 和 TableB

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
4

2 回答 2

4

我找到了答案……我知道不熟悉 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
于 2015-12-11T17:57:43.780 回答
0

在程序 Insert-TableA-Record 中,A.Emplid 需要在第 1 列中

测试类似程序时出现同样的错误

于 2015-12-11T17:53:00.370 回答