首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQR过程参数/参数

SQR过程参数/参数
EN

Stack Overflow用户
提问于 2019-04-04 23:11:18
回答 1查看 463关注 0票数 2

我试图更多地了解在调用和执行过程时如何使用参数/参数。我知道包含以冒号(:)为前导的参数的过程会将值传回调用的DO命令,但是我认为有一点令人困惑的是,似乎调用DO命令发出的变量名和(由DO调用的)过程返回的变量名不必相同。如果有人可以帮助阐明以下示例,并解释传入/传出哪些值,或者发出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,我相信它正在被传递回Run-Recursion过程中的调用DO,但我不知道它是如何/在哪里使用传递回它的值的……

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 23:42:08

从主过程对Get-Recursive-Reports-To的第一次调用使用$Recursive_Line变量。它不需要再次被引用,因为它是过程内部的。

一旦在Get-Recursive-Reports-To过程中,这个变量的名称就变成了$val_Data_Line,并被用来回调相同的Get-Recursive-Reports过程,该过程可以改变它。我猜这个名字就是Get-Recursive-Reports-To。

递归是一个令人头疼的问题,但它看起来像是被用来在组织链上向上移动,找到员工id的报告,然后获得那个人的名字。

变量$var_Next_EMPLID作为变量$Next_Emplid从获取当前位置的报表返回给调用者,然后再次用于调用获取递归报表。

我不知道递归何时或为什么停止,因为您没有包含“检查停止”过程。看起来有一些检查-可能是$Val_Current_Position_Nbr或$Next_Position_Nbr为空或相等或其他什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55519416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档