如何在oracle中根据用户输入动态添加列?

如何在oracle中根据用户输入动态添加列?,oracle,add,Oracle,Add,如何在oracle中根据用户输入动态添加列? 我正在根据从年月日到年月日生成月报,以下是我的需求样本表 员工代码|姓名|离职日期|离职余额|2012年10月01日|2012年10月02日|2012年10月03日 100001年10月2日约翰12月6日 100001年10月1日至12日克里斯4 根据用户输入,也就是说,如果用户需要从2012年10月1日到2012年10月3日的报告,我需要在我的表格中添加该日期作为列,如2012年10月1日| 2012年10月02日| 2012年10月03日 下

如何在oracle中根据用户输入动态添加列?

我正在根据从年月日到年月日生成月报,以下是我的需求样本表

员工代码|姓名|离职日期|离职余额|2012年10月01日|2012年10月02日|2012年10月03日


100001年10月2日约翰12月6日

100001年10月1日至12日克里斯4


根据用户输入,也就是说,如果用户需要从2012年10月1日到2012年10月3日的报告,我需要在我的表格中添加该日期作为列,如2012年10月1日| 2012年10月02日| 2012年10月03日

下面是我的代码

create or replace
procedure MONTHLY_LVE_NEW_REPORT_demo
(
L_BUSINESS_UNIT                 IN SSHRMS_LEAVE_REQUEST_TRN.BUSINESS_UNIT%TYPE,
--L_LEAVE_TYPE_CODE           IN SSHRMS_LEAVE_REQUEST_TRN.LEAVE_TYPE_CODE%TYPE,
L_DEPARTMENT_CODE           IN VARCHAR2,
--L_MONTH                    IN SSHRMS_LEAVE_REQUEST_TRN.LVE_FROM_DATE%TYPE,
L_FROM_DATE                   IN SSHRMS_LEAVE_REQUEST_TRN.LVE_FROM_DATE%TYPE,
L_TO_DATE                   in SSHRMS_LEAVE_REQUEST_TRN.LVE_TO_DATE%type,
MONTHRPT_CURSOR               OUT        SYS_REFCURSOR
)

 AS
 O_MONTHRPT_CURSOR_RPT clob;
v_return_msg clob;
   BEGIN

   IF (L_BUSINESS_UNIT IS NOT NULL
         AND L_FROM_DATE IS NOT NULL
      and L_TO_DATE is not null
    -- AND L_DEPARTMENT_CODE IS NOT NULL
     )
   THEN

   OPEN MONTHRPT_CURSOR FOR

select EMPLOYEE_CODE, EMPLOYEE_NAME AS NAME, DEPARTMENT_CODE AS DEPARTMENT,DEPARTMENT_DESC, CREATED_DATE,

  NVL(WM_CONCAT(CL_RANGE),'') as CL_TAKEN_DATE,    

  case when NVL(SUM(CL2),0)<0 then 0 else (NVL(SUM(CL2),0)) end as CL_BALANCE,

from
(     
SELECT DISTINCT a.employee_code,
    a.EMPLOYEE_FIRST_NAME || ' ' || a.EMPLOYEE_LAST_NAME as EMPLOYEE_NAME,
    a.DEPARTMENT_CODE,
    a.DEPARTMENT_DESC,
    B.LEAVE_TYPE_CODE,
    B.LVE_UNITS_APPLIED,
    B.CREATED_DATE as CREATED_DATE,

    DECODE(b.leave_type_code,'CL',SSHRMS_LVE_BUSINESSDAY(L_BUSINESS_UNIT,to_char(b.lve_from_date,'mm/dd/yyyy'), to_char(b.lve_to_date,'mm/dd/yyyy'))) CL_RANGE,

    DECODE(B.LEAVE_TYPE_CODE,'CL',B.LVE_UNITS_APPLIED)CL1,
    b.status

from SSHRMS_EMPLOYEE_DATA a 
    join 
    SSHRMS_LEAVE_BALANCE C 
    on a.EMPLOYEE_CODE = C.EMPLOYEE_CODE
     and  C.STATUS = 'Y'
    left join 
    SSHRMS_LEAVE_REQUEST_TRN B
    on
    B.EMPLOYEE_CODE=C.EMPLOYEE_CODE  
    and c.EMPLOYEE_CODE = b.EMPLOYEE_CODE
    and B.LEAVE_TYPE_CODE = C.LEAVE_TYPE_CODE
    and B.STATUS in ('A','P','C')  
    and (B.LVE_FROM_DATE >= TO_DATE(L_FROM_DATE, 'DD/MON/RRRR')
    and B.LVE_TO_DATE <= TO_DATE(L_TO_DATE, 'DD/MON/RRRR'))
    join
    SSHRMS_LEAVE_REQUEST_TRN D
    on a.EMPLOYEE_CODE = D.EMPLOYEE_CODE
    and D.LEAVE_TYPE_CODE in ('CL')
    AND D.LEAVE_TYPE_CODE IS NOT NULL

)

group by EMPLOYEE_CODE, EMPLOYEE_NAME, DEPARTMENT_CODE, DEPARTMENT_DESC, CREATED_DATE
;
else
v_return_msg:='Field should not be empty';
 end if;
END;
创建或替换
程序每月更新报告演示
(
SSHRMS中的L\u业务\u单位\u请假\u交易请求\u业务\u单位%类型,
--SSHRMS中的L_休假类型代码\u休假请求\u TRN。休假类型代码%TYPE,
L_部门代码在VARCHAR2中,
--SSHRMS中的1个月\u休假请求\u TRN.LVE\u自\u日期%TYPE,
SSHRMS中的L_FROM_DATE_请假请求中的L_TRN.LVE_FROM_DATE%类型,
SSHRMS中的L_TO_日期\u休假请求\u TRN.L_TO_日期%类型,
月光标输出系统参考光标
)
作为
O__MONTHRPT_CURSOR_RPT clob;
返回消息clob;
开始
如果(L_业务单位)不为空
并且L_FROM_DATE不为空
并且L_TO_DATE不为空
--L_部门代码不为空
)
然后
打开MONTHRPT_光标以查看
选择员工代码、员工姓名作为姓名、部门代码作为部门、部门描述、创建日期,
NVL(WM_CONCAT(CL_范围),“”)作为CL_采取日期,
当NVL(总和(CL2),0)=截止日期(L从日期开始,'DD/MON/RRRR')

到目前为止,线索在以下问题中:

“如何在oracle中根据用户输入动态添加列?”

使用动态SQL