Процедура SQR с ошибкой времени выполнения в инструкции BEGIN-SELECT

Привет, сообщество стека,

Последние пару дней я застрял с тем, что я изначально думал, было относительно простым обновлением SQR.

Короче говоря, процедура Process-Main выбирает всех сотрудников, где COMPANY = 'ABC', а затем мне нужно вставить запись в таблицы A и TableB, связанные с каждым идентификатором сотрудника.

TableB пуст, поэтому я просто запускаю оператор INSERT для каждого empID, и записи добавляются без проблем.

Однако некоторые empID могут иметь существующие записи в таблице A, и мне нужно проверить это, прежде чем выполнять 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

person Tommy    schedule 11.12.2015    source источник
comment
Вы говорите, что это псевдокод - если бы это был настоящий код, у SQR возникла бы проблема с do Insert-TableA-Record и do Insert-TableB-Record в столбце 1. Это близко к реальному коду? A.EMPLID в операторе begin-select в процедуре Insert-TableA-Record должен быть в столбце 1. Есть ли способ увидеть части реального кода?   -  person cardmagik    schedule 11.12.2015


Ответы (2)


Я нашел ответ... я знал, что это глупая ошибка, потому что я не знаком с синтаксисом SQR.

Я не делал отступ для операторов «LET» внутри области SELECT. Теперь я знаю, что в первом столбце может отображаться только оператор SQL.

Я выучил еще один урок кодирования, и это правильный синтаксис:

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

В процедуре Insert-TableA-Record A.Emplid должен находиться в столбце 1.

Я получил ту же ошибку при тестировании аналогичной процедуры

person cardmagik    schedule 11.12.2015