游标处理数据范例(在原示例上有删减):
CREATE OR REPLACE PROCEDURE ATS_GUEST.GATETOSERVER ( HOSPITAL_DOMAIN IN VARCHAR2, START_DATE IN VARCHAR2, END_DATE IN VARCHAR2 ) AS PARM_SQL VARCHAR2(4000); PARM_BODY_PART VARCHAR2(256); PARM_METHOD_CODE VARCHAR2(256); PARM_REPEAT_NUMBER VARCHAR2(256); PARM_MACHINE_NAME VARCHAR2(256); PARM_DEVICE_NAME VARCHAR2(256); PARM_STUDY_UID VARCHAR2(256); PARM_UNIQUE_ID VARCHAR2(256); PARM_DOC_ROOT VARCHAR2(256); PARM_CURSOR SYS_REFCURSOR; BEGIN IF (HOSPITAL_DOMAIN ='2.16.840.1.113883.4.487.1.4.1') THEN PARM_SQL:= 'SELECT CDA_UNIQUE_ID,DOC_AUTHORITY_ROOT,DICOM_BODY_PART,DIAGNOSIS_METHOD_CODE,REPEAT_NUMBER,MACHINE_ROOM_NAME,DEVICE_NAME,DICOM_STUDY_UID FROM ADGATE.REPORTDOC@GATETOSERVER WHERE DOC_AUTHORITY_ROOT=''' || HOSPITAL_DOMAIN || ''''; END IF; PARM_SQL:= PARM_SQL || ' AND EFFECTIVE_TIME > TO_DATE(''' || START_DATE || ''',''yyyymmddhh24miss'') AND EFFECTIVE_TIME < TO_DATE(''' || END_DATE || ''',''yyyymmddhh24miss'')'; DBMS_OUTPUT.PUT_LINE(PARM_SQL); OPEN PARM_CURSOR FOR PARM_SQL; LOOP FETCH PARM_CURSOR INTO PARM_UNIQUE_ID,PARM_DOC_ROOT,PARM_BODY_PART,PARM_METHOD_CODE,PARM_REPEAT_NUMBER,PARM_MACHINE_NAME,PARM_DEVICE_NAME,PARM_STUDY_UID; PARM_SQL:= 'UPDATE AXDS.DOCUMENTSCATTER SET BODY_PART = ''' || PARM_BODY_PART || ''','; PARM_SQL:= PARM_SQL || 'DIAGNOSIS_METHOD_CODE = ''' || PARM_METHOD_CODE || ''','; PARM_SQL:= PARM_SQL || 'REPEAT_NUMBER = ''' || PARM_REPEAT_NUMBER || ''','; PARM_SQL:= PARM_SQL || 'MACHINE_ROOM_NAME = ''' || PARM_MACHINE_NAME || ''','; PARM_SQL:= PARM_SQL || 'DEVICE_NAME = ''' || PARM_DEVICE_NAME || ''','; PARM_SQL:= PARM_SQL || 'STUDY_UID = ''' || PARM_STUDY_UID || ''','; PARM_SQL:= PARM_SQL || 'CUSTOM1 = ''TEST'''; PARM_SQL:= PARM_SQL || ' WHERE AXDS.DOCUMENTSCATTER.CDA_UNIQUE_ID = ''' || PARM_UNIQUE_ID || ''' AND AXDS.DOCUMENTSCATTER.DOC_AUTHORITY_ROOT = ''' || PARM_DOC_ROOT || ''''; --next line will break this PROCEDURE --DBMS_OUTPUT.PUT_LINE(PARM_SQL); EXECUTE IMMEDIATE PARM_SQL; COMMIT; IF (HOSPITAL_DOMAIN ='2.16.840.1.113883.4.487.1.4.1') THEN PARM_SQL:= 'UPDATE ADGATE.REPORTDOC@GATETOSERVER SET CUSTOM_5 = ''TEST'' WHERE ADGATE.REPORTDOC.CDA_UNIQUE_ID = ''' || PARM_UNIQUE_ID || ''' AND ADGATE.REPORTDOC.DOC_AUTHORITY_ROOT = ''' || PARM_DOC_ROOT || ''''; EXECUTE IMMEDIATE PARM_SQL; COMMIT; END IF; EXIT WHEN PARM_CURSOR%NOTFOUND; END LOOP; CLOSE PARM_CURSOR; EXCEPTION WHEN OTHERS THEN NULL; END;