SQR 程序 parameters/arguments
SQR Procedure parameters/arguments
我正在尝试了解有关在调用和执行过程时如何使用 arguments/parameters 的更多信息。我知道包含带有前导冒号 (:) 的参数的过程将值传回调用 DO
命令,但是我认为有点令人困惑的是变量名称似乎来自调用 DO
命令问题,和什么程序(被DO
调用)returns不一定要同名。如果有人可以帮助阐明以下示例并解释正在传递的值 to/from 或它们如何被发出的 DO
命令引用,那将很有帮助。
看起来调用 运行 Get-Recursive-Reports-To
(do Get-Recursive-Reports-To($Recursive_Line, $_POSITION_NBR, #_Global_Counter)
将这 3 个变量作为参数发送给过程 Get-Recursive-Reports-To
,但是当我查看Get-Recursive-Reports-To
过程,我在这个过程中没有看到变量 $Recursive_Line
的任何引用,那么这个过程实际上是在使用它还是包含它的目的是什么?与 $_val_Position_NBR
类似的问题,这个变量从哪里获取它的值?
然后在 Get-Recursive-Reports-To
过程中我看到一个参数 - :$var_Next_EMPLID
我相信它在 运行-递归过程中被传递回调用 DO,但我可以不知道 how/where 它使用传回给它的值...
begin-procedure Run-Recursion
let #_Global_Counter = 0
let $Recursive_Line = ''
let $Data_Line_EMPL = ''
let $Data_Line_EMPL = $_BUSINESS_UNIT || '|' || $_BUSINESS_UNIT_DESCR || '|' || '2019' || '|' ||
$_EMPLID || '|' || $_NAME || '|' || $_DEPTID || '|' || $_DEPT_DECSR || '|' || $_JOBCODE || '|'
do Get-Recursive-Reports-To($Recursive_Line, $_POSITION_NBR, #_Global_Counter)
let $Data_Line_EMPL = $Data_Line_EMPL || $Recursive_Line
do Write-Data-Line($Data_Line_EMPL)
end-procedure
begin-procedure Get-Recursive-Reports-To(:$val_Data_Line, $val_Current_Position_Nbr, #Recursion_Counter)
let #Recursion_Counter = #Recursion_Counter + 1
do Get-the-ReportsTo-for-the-Current-Position($val_Current_Position_Nbr, $Next_Position_Nbr, $Next_EMPLID)
do Check-For-Stop($Stop_Recursion, $val_Current_Position_Nbr, $Next_Position_Nbr, #Recursion_Counter)
if $Stop_Recursion = 'N'
let $val_Data_Line = $val_Data_Line || $Next_EMPLID || '|'
do Get-Recursive-Reports-To($val_Data_Line, $Next_Position_Nbr, #Recursion_Counter)
end-if
end-procedure
begin-procedure Get-the-ReportsTo-for-the-Current-Position($_val_Position_NBR, :$var_ReportsTo, :$var_Next_EMPLID)
let #local_counter = 0
begin-select
G.REPORTS_TO &G.Reports_to
let $var_ReportsTo= &G.Reports_To
from PS_POSITION_DATA G
WHERE G.POSITION_NBR = $_val_Position_NBR
and G.EFF_STATUS = 'A'
AND (G.EFFDT =
(SELECT MAX(G_ED.EFFDT) FROM PS_POSITION_DATA G_ED
WHERE G.POSITION_NBR = G_ED.POSITION_NBR
AND G_ED.EFFDT <= $_As_OF_Date))
end-select
begin-select
H.EMPLID &H.EMPLID
Z.NAME &Z.NAME
let $var_Next_EMPLID= &H.EMPLID
let #local_counter = #local_counter + 1
from PS_JOB H !, PS_EMPLOYEES Z
WHERE H.POSITION_NBR = $var_ReportsTo
and H.EMPL_STATUS not in ('D', 'R', 'T')
and (H.EFFDT =
(SELECT MAX(H_ED.EFFDT) FROM PS_JOB H_ED
WHERE H.EMPLID = H_ED.EMPLID
AND H.EMPL_RCD = H_ED.EMPL_RCD
AND H_ED.EFFDT <= $_As_Of_Date))
end-select
if #local_counter > 1
let $var_Next_EMPLID = $local_counter || ' ' || 'Employees in this Position'
end-if
if #local_counter = 0
let $var_Next_EMPLID = 'Position Vacant'
end-if
end-procedure
主程序对 Get-Recursive-Reports-To 的第一次调用使用了 $Recursive_Line 变量。不必再次引用它,因为它在过程内部。
一旦进入过程 Get-Recursive-Reports-To,这个变量的名称就变成 $val_Data_Line 并用于回调到可以更改它的同一过程 Get-Recursive-Reports-To。我猜是因为这个名字,Get-Recursive-Reports-To.
递归是一件令人头疼的事,但它似乎被用来向上组织链,找到员工 ID 的报告,然后获取那个人的名字。
变量 $var_Next_EMPLID 作为变量 $Next_Emplid 从 Get-the-ReportsTo-for-the-Current-Position 传递回调用者,然后再次用于调用 Get-Recursive -汇报给。
由于您没有包含过程 "Check-For-Stop",我不知道递归何时或为何停止。看起来有一些检查 - 也许如果 $Val_Current_Position_Nbr 或 $Next_Position_Nbr 是空白或等于或什么的。
我正在尝试了解有关在调用和执行过程时如何使用 arguments/parameters 的更多信息。我知道包含带有前导冒号 (:) 的参数的过程将值传回调用 DO
命令,但是我认为有点令人困惑的是变量名称似乎来自调用 DO
命令问题,和什么程序(被DO
调用)returns不一定要同名。如果有人可以帮助阐明以下示例并解释正在传递的值 to/from 或它们如何被发出的 DO
命令引用,那将很有帮助。
看起来调用 运行 Get-Recursive-Reports-To
(do Get-Recursive-Reports-To($Recursive_Line, $_POSITION_NBR, #_Global_Counter)
将这 3 个变量作为参数发送给过程 Get-Recursive-Reports-To
,但是当我查看Get-Recursive-Reports-To
过程,我在这个过程中没有看到变量 $Recursive_Line
的任何引用,那么这个过程实际上是在使用它还是包含它的目的是什么?与 $_val_Position_NBR
类似的问题,这个变量从哪里获取它的值?
然后在 Get-Recursive-Reports-To
过程中我看到一个参数 - :$var_Next_EMPLID
我相信它在 运行-递归过程中被传递回调用 DO,但我可以不知道 how/where 它使用传回给它的值...
begin-procedure Run-Recursion
let #_Global_Counter = 0
let $Recursive_Line = ''
let $Data_Line_EMPL = ''
let $Data_Line_EMPL = $_BUSINESS_UNIT || '|' || $_BUSINESS_UNIT_DESCR || '|' || '2019' || '|' ||
$_EMPLID || '|' || $_NAME || '|' || $_DEPTID || '|' || $_DEPT_DECSR || '|' || $_JOBCODE || '|'
do Get-Recursive-Reports-To($Recursive_Line, $_POSITION_NBR, #_Global_Counter)
let $Data_Line_EMPL = $Data_Line_EMPL || $Recursive_Line
do Write-Data-Line($Data_Line_EMPL)
end-procedure
begin-procedure Get-Recursive-Reports-To(:$val_Data_Line, $val_Current_Position_Nbr, #Recursion_Counter)
let #Recursion_Counter = #Recursion_Counter + 1
do Get-the-ReportsTo-for-the-Current-Position($val_Current_Position_Nbr, $Next_Position_Nbr, $Next_EMPLID)
do Check-For-Stop($Stop_Recursion, $val_Current_Position_Nbr, $Next_Position_Nbr, #Recursion_Counter)
if $Stop_Recursion = 'N'
let $val_Data_Line = $val_Data_Line || $Next_EMPLID || '|'
do Get-Recursive-Reports-To($val_Data_Line, $Next_Position_Nbr, #Recursion_Counter)
end-if
end-procedure
begin-procedure Get-the-ReportsTo-for-the-Current-Position($_val_Position_NBR, :$var_ReportsTo, :$var_Next_EMPLID)
let #local_counter = 0
begin-select
G.REPORTS_TO &G.Reports_to
let $var_ReportsTo= &G.Reports_To
from PS_POSITION_DATA G
WHERE G.POSITION_NBR = $_val_Position_NBR
and G.EFF_STATUS = 'A'
AND (G.EFFDT =
(SELECT MAX(G_ED.EFFDT) FROM PS_POSITION_DATA G_ED
WHERE G.POSITION_NBR = G_ED.POSITION_NBR
AND G_ED.EFFDT <= $_As_OF_Date))
end-select
begin-select
H.EMPLID &H.EMPLID
Z.NAME &Z.NAME
let $var_Next_EMPLID= &H.EMPLID
let #local_counter = #local_counter + 1
from PS_JOB H !, PS_EMPLOYEES Z
WHERE H.POSITION_NBR = $var_ReportsTo
and H.EMPL_STATUS not in ('D', 'R', 'T')
and (H.EFFDT =
(SELECT MAX(H_ED.EFFDT) FROM PS_JOB H_ED
WHERE H.EMPLID = H_ED.EMPLID
AND H.EMPL_RCD = H_ED.EMPL_RCD
AND H_ED.EFFDT <= $_As_Of_Date))
end-select
if #local_counter > 1
let $var_Next_EMPLID = $local_counter || ' ' || 'Employees in this Position'
end-if
if #local_counter = 0
let $var_Next_EMPLID = 'Position Vacant'
end-if
end-procedure
主程序对 Get-Recursive-Reports-To 的第一次调用使用了 $Recursive_Line 变量。不必再次引用它,因为它在过程内部。
一旦进入过程 Get-Recursive-Reports-To,这个变量的名称就变成 $val_Data_Line 并用于回调到可以更改它的同一过程 Get-Recursive-Reports-To。我猜是因为这个名字,Get-Recursive-Reports-To.
递归是一件令人头疼的事,但它似乎被用来向上组织链,找到员工 ID 的报告,然后获取那个人的名字。
变量 $var_Next_EMPLID 作为变量 $Next_Emplid 从 Get-the-ReportsTo-for-the-Current-Position 传递回调用者,然后再次用于调用 Get-Recursive -汇报给。
由于您没有包含过程 "Check-For-Stop",我不知道递归何时或为何停止。看起来有一些检查 - 也许如果 $Val_Current_Position_Nbr 或 $Next_Position_Nbr 是空白或等于或什么的。