2015-12-11 7 views
0

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

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

В двух словах, процедура Процесс-Main выбирает всех сотрудников, где COMPANY = «ABC», а затем мне нужно вставить запись в TableA & TableB, связанный с каждым EmployeeID

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

Однако некоторые 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 
+0

Вы говорите, что это псевдо-код - если бы реальный код, SQR будет иметь проблемы с сделай Insert-TABLEA-Record и do Insert-TableB-Record находится в столбце 1. Является ли это близким к реальному коду? A.EMPLID в инструкции начала-выбора в процедуре Insert-TableA-Record должен быть в столбце 1. Есть ли способ увидеть части реального кода? – cardmagik

ответ

0

В процедуре вставки-TABLEA-Record, A.Emplid, должен быть в колонке 1

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

3

Я нашел ответ ... я знал, что это была глупая ошибка за то, что вы не знакомы с синтаксисом 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 

 Смежные вопросы

  • Нет связанных вопросов^_^