Oracle PL/SQL中的动态变量
我已经为一项作业完成了以下代码:Oracle PL/SQL中的动态变量,oracle,plsql,Oracle,Plsql,我已经为一项作业完成了以下代码: DECLARE Ledger_rec DDI.LEDGER_VIEW%ROWTYPE; PROCEDURE Var2Count(v_col IN NUMBER) IS BEGIN DBMS_OUTPUT.PUT(TO_CHAR(NVL(v_col,0), '999,999')); END; BEGIN DBMS_OUTPUT.PUT_LINE(' To
DECLARE
Ledger_rec DDI.LEDGER_VIEW%ROWTYPE;
PROCEDURE Var2Count(v_col IN NUMBER)
IS
BEGIN
DBMS_OUTPUT.PUT(TO_CHAR(NVL(v_col,0), '999,999'));
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(' Total Head Count by Registration Date');
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE('REGDATE 101 102 103 104 105 106 107 108');
DBMS_OUTPUT.PUT_LINE('-------- ----- ----- ----- ----- ----- ----- ----- -----');
FOR Ledger_rec IN
(
SELECT * FROM
(
SELECT REGDATE, ADULTCNT, CHILDCNT, ROOMNUM
FROM DDI.LEDGER_VIEW
)
PIVOT
(
SUM(CHILDCNT + ADULTCNT)
FOR ROOMNUM IN ('101' AS r101,
'102' AS r102,
'103' AS r103,
'104' AS r104,
'105' AS r105,
'106' AS r106,
'107' AS r107,
'108' AS r108)
)
ORDER BY REGDATE
)
LOOP
DBMS_OUTPUT.PUT(RPAD(Ledger_rec.REGDATE, 16));
Var2Count(Ledger_rec.r101);
Var2Count(Ledger_rec.r102);
Var2Count(Ledger_rec.r103);
Var2Count(Ledger_rec.r104);
Var2Count(Ledger_rec.r105);
Var2Count(Ledger_rec.r106);
Var2Count(Ledger_rec.r107);
Var2Count(Ledger_rec.r108);
DBMS_OUTPUT.NEW_LINE;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found.');
END;
这是有效的,但我在作业描述中遗漏了一点:
将动态变量(CHILDCNT+ADULTCNT)HEADCNT用于
总金额(总目)
因此,我认为我的代码应该是
SUM(HEADCNT)
。如何分配和使用此动态变量?您可以在第一块括号内定义HEADCNT
,然后重用它
SELECT * FROM
(
SELECT REGDATE, ADULTCNT, CHILDCNT, CHILDCNT + ADULTCNT HEADCNT, ROOMNUM
FROM DDI.LEDGER_VIEW
)
PIVOT
(
SUM(HEADCNT)
FOR ROOMNUM IN ('101' AS r101,
'102' AS r102,
'103' AS r103,
'104' AS r104,
'105' AS r105,
'106' AS r106,
'107' AS r107,
'108' AS r108)
)
ORDER BY REGDATE