我要问的问题都在注释中标示出来了,麻烦了~~~
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;
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;
答:定义是光标变量。一个光标变量可以指向任何的光标。相当于c语言中的指针。OPEN P_CUR FOR SELECT A.LIST_NO, A.SMP_NO, A.HEAT_ID, RTRIM(A.SMP_NO ||--如果上面定义的是游标的的话,不是说FOR循环不用打开游标吗?这里打开游标有必要吗?谢谢,没有OPEN是否会出错答:这里不是打开光标,而是让光标变量指向具体的光标(即存储区)找本PL/SQL的书研究一下吧。
如果你的数据库里没定义V_CUR这个类型,它就不是如果需要回传应该是 P_CUR OUT sys_refcursor (10G以后)--如果上面定义的是游标的的话,不是说FOR循环不用打开游标吗?这里打开游标有必要吗?谢谢,没有OPEN是否会出错这个是open 游标 for 语句 必须这么写
你说的for循环是for c in (语句) loop end loop;它只能循环不能回传
光标变量,我怎么没有找到相关的内容啊~~~我到找到了,一些说光标变量就是游标的文章!http://hi.baidu.com/yangwenlongwo/blog/item/f5271b38f1b6e7c7d5622592.html