将存储过程的输出分配给列

时间:2013-09-02 23:55:45

标签: oracle stored-procedures

我正在执行主存储过程以将列加载到目标表中。 我有一个名为dptname的列 - 此列由不同的项目团队处理,因此他们已经定义了一个子存储过程,所有这些将会获得一个empno并输出Dptname。他们要求我们调用以下存储过程来加载我的dptname列。

您能否告诉我如何分配/调用此子存储过程并分配到主存储过程中的deptname列?

这是子存储过程的框架:

get_dptname(in_emp_no, out_dptname)

我的主存储过程:

Create or Replace procedure InsertTargetTable
as
begin
for a in (
Select  EMP.empno
EMP.NAME,
CL.Attendance,
DEPTNAME= "**ASSIGN THE VALUE FROM THE 3rd Party stored procedure**
from EMP, CL
on EMP.empno=CL.empno
) Loop
Insert Into Target Table ( empno, NAME,Attendance, DEPTNAME  ) 
Values (a.empno, a.NAME, a.Attendance, a.DEPTNAME);
ENDLOOP;
COMMIT:
END

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询。将DEPT_NO变量传递给存储过程,因为它是一个OUT参数,您可以从主存储过程访问值。

GET_DPTNAME(IN_EMP_NO=>EMP_NO,OUT_DEPT_NO=>DEPT_NO);

答案 1 :(得分:0)

如果另一个组创建了一个函数GET_DEPT_NAME,那么您可以按如下方式使用它:

CREATE OR REPLACE PROCEDURE InsertTargetTable
AS
BEGIN

    INSERT INTO Target_Table ( empno, NAME, Attendance, DEPTNAME  ) 
        SELECT EMP.empno, EMP.NAME, CL.Attendance, GET_DEPT_NAME(EMP.empno)
           FROM EMP, CL
           WHERE EMP.empno = CL.empno;

    COMMIT:

END;

一些注意事项:

  1. 数据正在取消正常化:如果员工更换部门怎么办?您的Target_Table将不会更新,但会在插入期间保留在部门集中。也许在实际查询表格时应该查找部门以获取当前部门的价值。

  2. 希望存储的proc是一个函数,然后它可以很容易地使用,如上例所示。 (如果没有,请求一个功能)。

  3. 尽可能避免循环。单个“插入...选择”语句将更有效。