2015-12-11 41 views
0

你好棧社區運行時錯誤,SQR程序與BEGIN SELECT語句

我一直停留在過去幾天與我最初的想法是一個相對簡單的SQR更新。

簡而言之,程序進程與主選擇其中COMPANY =「ABC」,然後我需要插入一個記錄與每個相關聯的表A &表B EMPLOYEEID

表B是空的所有僱員,所以我簡單地爲每個empID運行INSERT語句並添加記錄沒有任何問題。

但是,某些empID可能具有TableA中的現有記錄,並且在將INSERT插入表A中之前我需要檢查該記錄。

奇怪的是,當我執行此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將不得不用做插入 - 表A-記錄和存在問題Insert-TableB-Record在列1中。這是否接近實際代碼?程序Insert-TableA-Record中的begin-select語句中的A.EMPLID應該在第1列中。是否有任何方法可以查看部分實際代碼? – cardmagik

回答

0

在程序插入 - 表A-記錄,A.Emplid,需要測試類似的程序

3
時處於第1列

我得到了同樣的錯誤

我找到了答案...我知道這是一個愚蠢的錯誤不熟悉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