Oracle 如何使用%ROWTYPE获取光标值
我做了一个如下所示的过程,我想获取光标值并从其他循环中提取这些值告诉我最好的方法是我的代码Oracle 如何使用%ROWTYPE获取光标值,oracle,plsql,Oracle,Plsql,我做了一个如下所示的过程,我想获取光标值并从其他循环中提取这些值告诉我最好的方法是我的代码 CREATE OR REPLACE PROCEDURE TEST (P_EMP_ID NUMBER, TRIGER_BY VARCHAR2) AS CURSOR TO_HOD IS SELECT EMP.EMPLOYEE_CODE,
CREATE OR REPLACE PROCEDURE TEST (P_EMP_ID NUMBER,
TRIGER_BY VARCHAR2)
AS
CURSOR TO_HOD
IS
SELECT EMP.EMPLOYEE_CODE,
EMP.EMP_NAME,
APR.LEFT_DT,
APR.RESIGN_TYPE
FROM FSC_APPROVAL APR, CHR_ALL_EMPLOYEE_BI_V EMP
WHERE APR.HOD_APPR = 'Y'
AND APR.ZONE_HD_APPR IS NULL
AND EMP.EMPLOYEE_ID = APR.EMP_ID;
CURSOR TO_ZONE
IS
SELECT EMP.EMPLOYEE_CODE,
EMP.EMP_NAME,
APR.LEFT_DT,
APR.RESIGN_TYPE
FROM FSC_APPROVAL APR, CHR_ALL_EMPLOYEE_BI_V EMP
WHERE APR.HOD_APPR = 'Y'
AND APR.ZONE_HD_APPR = 'Y'
AND APR.TIM_OFC_APPR IS NULL
AND EMP.EMPLOYEE_ID = APR.EMP_ID;
CUR_VAL TO_HOD%ROWTYPE;
CUR_VAL_FOR_LOOP TO_HOD%ROWTYPE;
这个程序开始了
BEGIN
IF TRIGER_BY = 'HOD'
THEN
OPEN TO_HOD;
LOOP
FETCH TO_HOD INTO CUR_VAL;
EXIT WHEN TO_HOD%NOTFOUND;
END LOOP;
ELSIF TRIGER_BY = 'ZONE'
THEN
OPEN TO_ZONE;
LOOP
FETCH TO_ZONE INTO CUR_VAL;
EXIT WHEN TO_ZONE%NOTFOUND;
END LOOP;
END IF;
在上面的代码中,只需获取我的数据并放入cur_val即%rowtype
之后,我在新循环中获取这些值,但没有意义,并显示错误PLS-00456:item'CUR_VAL'不是光标
LOOP
***FETCH CUR_VAL INTO CUR_VAL_FOR_LOOP;***
DBMS_OUTPUT.PUT_LINE (CUR_VAL_FOR_LOOP.EMPLOYEE_CODE);
END LOOP;
END;
/
我在这一行遇到错误将CUR\u VAL提取到CUR\u VAL\u FOR_循环中代码>
请指导我如何按照我的意愿进行此过程如果您有更好的选择,那么我热烈欢迎您如果您对我的问题有进一步的疑问,那么我将在这里向您描述您为什么使用两个变量?您可以做得更短(未经测试):
我只想做一个变量,如果我只需要输入它显示它是给to HOD游标的,如果我声明为to HOD ZONE%只给to HOD游标输入它,我只想做一个变量,因为只有一个游标从这些游标运行,我在loopCUR VAL中传递的变量不是游标,你不能从它获取,它不包含查询的定义。是的,它不是一个游标它的%rowtype变量我正在变量中获取游标。在您的循环中,您试图从一个变量(CUR_VAL)获取到另一个变量(CUR_VAL_FOR_loop)…因此CUR_VAL不是游标。
CURSOR TO_ALL(hd APR.ZONE_HD_APPR%TYPE) IS
SELECT EMP.EMPLOYEE_CODE,
EMP.EMP_NAME,
APR.LEFT_DT,
APR.RESIGN_TYPE
FROM FSC_APPROVAL APR,
JOIN CHR_ALL_EMPLOYEE_BI_V EMP ON EMP.EMPLOYEE_ID = APR.EMP_ID
WHERE APR.HOD_APPR = 'Y'
AND NVL(APR.ZONE_HD_APPR, 'NULL') = NVL(hd, 'NULL')
AND EMP.EMPLOYEE_ID = APR.EMP_ID;
CUR_VAL TO_ALL%ROWTYPE;
BEGIN
OPEN TO_ALL(CASE TRIGER_BY WHEN 'HOD' THEN 'NULL' ELSE 'Y');
LOOP
FETCH TO_ALL INTO CUR_VAL;
...
EXIT WHEN TO_ALL%NOTFOUND;
END LOOP;
END;