我要问的问题都在注释中标示出来了,麻烦了~~~
PROCEDURE P_SREFER(
    P_BATCH_NO IN TQ_TSTRSLTM.SMP_NO%type DEFAULT NULL,
    P_HEAT_NO  IN TQ_BAILREC.HEAT_NO%type DEFAULT NULL,
    P_STL_GRD  IN VARCHAR2,
    P_DCS_STS  IN VARCHAR2,
    P_THK      IN TQ_TSTRSLTM.THK%type,
    P_PROD_FR  IN VARCHAR2,
    P_PROD_TO  IN VARCHAR2,
    P_JUDGE_FR IN VARCHAR2,
    P_JUDGE_TO IN VARCHAR2,
    P_STDSPEC  IN TQ_TSTRSLTM.STD_SPEC%type DEFAULT NULL,
    P_FL       IN VARCHAR2,
    P_LIST_NO  IN TQ_TSTRSLTM.LIST_NO%type,
    P_CUR OUT V_CUR) --这里是否定义的是游标?
IS
BEGIN
  OPEN P_CUR FOR SELECT A.LIST_NO, A.SMP_NO, A.HEAT_ID, RTRIM(A.SMP_NO ||--如果上面定义的是游标的的话,不是说FOR循环不用打开游标吗?这里打开游标有必要吗?谢谢,没有OPEN是否会出错
  CASE
  WHEN A.BATCH_SL_SEQ IS NOT NULL THEN
    '-' || A.BATCH_SL_SEQ
  ELSE
    NULL
  END ||
  CASE
  WHEN A.BATCH_PL_SEQ IS NOT NULL THEN
    '-' || A.BATCH_PL_SEQ
  ELSE
    NULL
  END ||
  CASE
  WHEN A.HEAD_FL IS NOT NULL THEN
    '-' || A.HEAD_FL
  ELSE
    NULL
  END) BATCH_NO, 
  PKG_ATT_PLATE.F_GET_GRADEDES(A.GRADE_ID, A.ZCAPABILITY) GRADE_ID, 
  A.THK, PKG_AZCOMMON.F_COMMCOMBO('Q0035', A.DRG_RSLT) DRG_RSLT, 
  PKG_AZCOMMON.F_COMMCOMBO('Q0003', A.MTAL_CD_DQ), 
  PKG_AZCOMMON.F_COMMCOMBO('Q0046', A.NOTE),
  A.MOD_EMP_ID, 
  PKG_AZCOMMON.F_EMPNAMEFIND(A.MOD_EMP_ID) EMPNAME, 
  DRG_RSLT,
  TO_CHAR(TO_DATE(A.MOD_DTIME, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') MOD_DATI, 
  '', 
  PKG_AZCOMMON.F_COMMNAMEFIND('Q0008', A.TST_KND) TST_KND, 
  PKG_AZCOMMON.F_COMMNAMEFIND('Q0034', A.HEAT_MOD) HEAT_MOD, 
  A.HEAT_TRMEN, 
  PKG_AZCOMMON.F_COMMNAMEFIND('Q0032', A.LCNS_CD) LCNS_CD, 
  A.RESCUE_FL, 
  A.STD_SPEC, 
  PKG_AZCOMMON.F_EMPNAMEFIND(A.MOD_EMP_ID2) EMPNAME, 
  TO_CHAR(TO_DATE(A.MOD_DTIME2, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') MOD2_DATI, 
  TO_CHAR(TO_DATE(A.CRT_DTIME, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') CRT_DATI
  FROM TQ_TSTRSLTM A WHERE NVL(A.SMP_NO, '%') LIKE P_BATCH_NO || '%' AND NVL(A.DRG_RSLT, '%') LIKE P_DCS_STS || '%' AND NVL(A.HEAT_ID, '%') LIKE
  P_HEAT_NO || '%' AND NVL(PKG_ATT_PLATE.F_GET_GRADEDES(A.GRADE_ID, A.ZCAPABILITY), '%') LIKE P_STL_GRD || '%'
  AND SUBSTR(NVL(A.CRT_DTIME, '00000000'), 1, 8) >= NVL(P_PROD_FR, '00000000') AND SUBSTR(NVL(A.CRT_DTIME, '99999999'), 1, 8) <= NVL(P_PROD_TO, '99999999') AND SUBSTR(NVL(A.MOD_DTIME, '00000000'), 1, 8) >= NVL(P_JUDGE_FR, '00000000') AND SUBSTR(NVL(A.MOD_DTIME, '99999999'), 1, 8) <= NVL(P_JUDGE_TO, '99999999') AND A.STD_SPEC LIKE '%' || P_STDSPEC || '%' AND NVL(A.LIST_NO, '%') LIKE P_LIST_NO || '%'
  AND DECODE(P_FL, NULL, '%', DECODE(A.DRG_RSLT, NULL, '0', '1')) LIKE P_FL || '%' AND A.TST_KND <> 3
  order by SMP_NO, MOD_DTIME DESC;
END P_SREFER;

解决方案 »

  1.   

     P_CUR OUT V_CUR) --这里是否定义的是游标?
    答:定义是光标变量。一个光标变量可以指向任何的光标。相当于c语言中的指针。OPEN P_CUR FOR SELECT A.LIST_NO, A.SMP_NO, A.HEAT_ID, RTRIM(A.SMP_NO ||--如果上面定义的是游标的的话,不是说FOR循环不用打开游标吗?这里打开游标有必要吗?谢谢,没有OPEN是否会出错答:这里不是打开光标,而是让光标变量指向具体的光标(即存储区)找本PL/SQL的书研究一下吧。
      

  2.   

    P_CUR OUT V_CUR) --这里是否定义的是游标?
    如果你的数据库里没定义V_CUR这个类型,它就不是如果需要回传应该是 P_CUR OUT sys_refcursor (10G以后)--如果上面定义的是游标的的话,不是说FOR循环不用打开游标吗?这里打开游标有必要吗?谢谢,没有OPEN是否会出错这个是open 游标 for 语句 必须这么写
    你说的for循环是for c in (语句) loop  end loop;它只能循环不能回传
      

  3.   


    光标变量,我怎么没有找到相关的内容啊~~~我到找到了,一些说光标变量就是游标的文章!http://hi.baidu.com/yangwenlongwo/blog/item/f5271b38f1b6e7c7d5622592.html