2016-10-10 78 views
1

我正在編寫一個SQR程序來向供應商發送包含員工信息的文件。該文件包含了一些對我已經賦予變量 $ Code_1 $ CODE_2 $ CODE_3 ....在SQR中是否可以使用動態變量(不是動態SQL)

每個代碼相關的速度,我已經指派類似的變量字段($ Rate_1 ,$ Rate_2等...)

我有一個查找表,有列EMPLID,JOBCODE,HOURLY_RT。我需要循環爲每個員工獲取所有代碼/費率。有些員工可能比其他員工多/少。是否有可能具有「動態」變量,就像我們爲動態sql做的那樣?例如,像$ Code _ [$ i]之類的東西?思想是做這樣的事情:

let #i = 1 

begin-select 
EC.JOBCODE 
EC.HOURLY_RT 

    let $Code_[$i] = &EC.JOBCODE 
    let $Rate_[$i] = &EC.HOURLY_RT 

    let #i = #i + 1 
FROM PS_ACME_LOOKUP EC 
WHERE EC.EMPLID = &J.EMPLID 
end-select 

這不起作用,但我想知道是否有類似的(或更好的)方式來實現這一點。我想我可以對計數器進行評估:當#i = 1時,$ Code_1 = ...當#i = 2時,$ Code_2 = ...但我希望有更好的方法。

感謝

編輯 - 只是爲了補充說明,爲每個員工,一行將被寫入到一個文件中,每個值的字段(填充與否) - 這樣的生產線將有: $ EMPLID $ Code_1 $ CODE_2 $ CODE_3 ..... $ Rate_1 $ Rate_2 $ Rate_3

爲了進一步澄清查找表將爲每個員工多行,所以該表可能是這樣的:

EMPLID JOBCODE HOURLY_RT 
0001  ABC  10.50 
0001  DEF  9.75 
0001  GHI  9.50 

當我流行我想要$ Code_1 ='ABC',$ Rate_1 = 10.50,$ Code_2 ='DEF',Rate_2 = 9.75等...

+0

代碼的位置是否意味着什麼?例如,如果EMPLID 0001沒有DEF的JOBCODE,那麼該文件是否仍然保留該空間,或者您是否只填寫了GHI?根據你的答案,我認爲你可以通過兩種方式之一使用SQL來完成這個任務。 – Bob

回答

1

您可以在SQR中使用數組。

要設置陣列:

Create-Array Name=WorkArray Size = 100 
Field=Code 
Field=Rate 

Let #NumCodesForEmp = 0 

要在您選擇阻止添加數據 - 前後也有程序上斷使用:

Begin-Select 
EC.Emplid() on-break print=never before=Init-Emp After=Process-Emp 
     Let $Emplid = &EC.Emplid 
     add 1 to #NumCodesForEmp 
     Put &EC.JobCode &EC.Rate into WorkArray(#NumCodesForEmp) Code Rate 

寫前程序初始化:

Begin-Procedure Init-Emp 
    Let #NumCodesForEmp = 0 
End-Procedure 

當與員工完成時:

Begin-Procedure Process-Emp 
    Let #I = 1 
    Let $OutputLine = $Emplid 
    While #I <= #NumCodesForEmp 
     Get $Code $Rate From WorkArray(#I) Code Rate 
     Let $OutputLine = $Outputline || ',' || $Code || ',' || $Rate 
     add 1 to #I 
    End-While 
    ! This assumes that file number 10 is open 
    Write #10 from $OutputLine 
End-Procedure 

不過,我覺得你可以做的一切,而不陣列 - 使用前和程序後,像這樣:

Begin-Procedure Init-Emp 
    Let $OutputLine = &EC.Emplid 
End-Procedure 

Begin-Procedure Process-Emp 
    Write #10 from $OutputLine 
End-Procedure 

然後選擇塊是這樣的:

Begin-Select 
EC.Emplid() on-break print=never before=Init-Emp After=Process-Emp 
EC.JobCode 
EC.Rate 
     Let $OutputLine = $OutputLine || ',' || &EC.Jobcode || ',' || &EC.Rate 

使用on-break時,確保按emplid進行排序。如果您的需要僅僅是從表中的數據寫入文件,這就簡單多了。

+0

謝謝 - 我正在開始考慮數組的路徑,但是我想知道如何將每個元素放入它們各自的變量中 - $ Code_1,$ Code_2等...... – Chip

+0

@chip這樣做有幫助嗎?或者你還有其他問題嗎? – cardmagik

+0

好吧,現在還不清楚如何從數組中獲取值到每個變量中。你的例子循環遍歷整個數組,每次將值加載到相同的變量 - 我有10個變量我需要填充 - 是否有可能更改每次通過循環哪個變量更新? – Chip

相關問題