Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何使用%ROWTYPE获取光标值_Oracle_Plsql - Fatal编程技术网

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;