您的位置:首页 > 数据库 > Oracle

oracle 存储过程,触发器遍历游标的三种方法

2014-10-08 21:43 519 查看
第一种:for循环v_tmp是变量无须指定(显示游标)

DECLARE
CURSOR CUR IS SELECT * FROM TR_STUDENT_PARENT WHERE PARENT_ID = :NEW_VALUE.USER_ID;
BEGIN
FOR V_TMP IN CUR LOOP
SELECT STUDENT_NO INTO V_STUDENTNO FROM TU_STUDENT WHERE STUDENT_ID = V_TMP.STUDENT_ID;
INSERT INTO UNIPLATFORM_PARENT(SCHOOL, STUDENTNO, DN, PARENTNAME, RELATION, SPID, PARENTFLAG, PARENTID) VALUES(V_SCHOOLNAME, V_STUDENTNO, :NEW_VALUE.DN, :NEW_VALUE.USER_NAME, V_TMP.RELATION, V_SPID, 2, :NEW_VALUE.USER_ID);
END LOOP;
END;

第二种:for循环v_tmp是变量无须指定(隐式游标)

DECLARE
BEGIN
FOR V_TMP IN (SELECT STUDENT_ID, RELATION FROM TR_STUDENT_PARENT WHERE PARENT_ID = :NEW_VALUE.USER_ID) LOOP
SELECT STUDENT_NO INTO V_STUDENTNO FROM TU_STUDENT WHERE STUDENT_ID = CUR.STUDENT_ID;
INSERT INTO UNIPLATFORM_PARENT(SCHOOL, STUDENTNO, DN, PARENTNAME, RELATION, SPID, PARENTFLAG, PARENTID) VALUES(V_SCHOOLNAME, V_STUDENTNO, :NEW_VALUE.DN, :NEW_VALUE.USER_NAME, CUR.RELATION, V_SPID, 2, :NEW_VALUE.USER_ID);
END LOOP;
END;


第三种:v_tmp是变量须指定(FETCH用法)

DECLARE
CURSOR CUR IS SELECT * FROM TR_STUDENT_PARENT WHERE PARENT_ID = :NEW_VALUE.USER_ID;
V_TMP TR_STUDENT_PARENT%ROWTYPE;
BEGIN
OPEN CUR;
    LOOP
      FETCH CUR INTO V_TMP;
      EXIT WHEN CUR%NOTFOUND;
        SELECT STUDENT_NO INTO V_STUDENTNO FROM TU_STUDENT WHERE STUDENT_ID = V_TMP.STUDENT_ID;
        INSERT INTO UNIPLATFORM_PARENT(SCHOOL, STUDENTNO, DN, PARENTNAME, RELATION, SPID, PARENTFLAG, PARENTID) VALUES(V_SCHOOLNAME, V_STUDENTNO, :NEW_VALUE.DN, :NEW_VALUE.USER_NAME, V_TMP.RELATION, V_SPID, 2, :NEW_VALUE.USER_ID);
    END LOOP;
    CLOSE CUR;
END;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐