游标的定义:v_ipmomdod ipmomdod%ROWTYPE;CURSOR cur_todaylist_qt IS SELECT * FROM ipmomdod WHERE ( ( mo_stat <> '1' AND decmps_state = '1' AND ( date_nxtmodc < TRUNC( id_feedate ) + 1 OR date_nxtmodc IS NULL ) ) OR ( mo_stat = '2' AND DECMPS_STATE = '2' AND IPMOMDOD.execute_flag = '1') ) AND ( TRUNC( date_end ) >= TRUNC( id_feedate ) OR date_end IS NULL ) AND ( nurse_cell_code = istr_deptcode ) AND ( item_type = '2' ) AND ( ( charge_state = '1') OR ( charge_state = '2' AND subtbl_flag = '1' ) ) AND ( exec_dpcd = istr_deptcode ) AND inpatient_no like istr_inpatientno AND decmps_state like istr_motype AND mo_order like istr_moorder ORDER BY inpatient_no; FETCH是: FETCH cur_todaylist_qt INTO v_ipmomdod;环境是IBM 小型机 1G内存 ORACLE 9i FOR Unix. 操作系统AIX. .
SELECT * FROM ipmomdod WHERE ( ( mo_stat <> '1' AND decmps_state = '1' AND ( date_nxtmodc < TRUNC( id_feedate ) + 1 OR date_nxtmodc IS NULL ) ) OR ( mo_stat = '2' AND DECMPS_STATE = '2' AND IPMOMDOD.execute_flag = '1') ) AND ( TRUNC( date_end ) >= TRUNC( id_feedate ) OR date_end IS NULL ) AND ( nurse_cell_code = istr_deptcode ) AND ( item_type = '2' ) AND ( ( charge_state = '1') OR ( charge_state = '2' AND subtbl_flag = '1' ) ) AND ( exec_dpcd = istr_deptcode ) AND inpatient_no like istr_inpatientno AND decmps_state like istr_motype AND mo_order like istr_moorder ORDER BY inpatient_no; 呵呵,单看语句就够复杂了,又OR又LIKE的,可能是因为我不是开发人员。你可以在SQLPLUS中执行set autotrace traceonly explain 然后执行一下你的语句,看看执行计划是什么把它贴出来看看吧
IS
SELECT *
FROM ipmomdod
WHERE ( ( mo_stat <> '1' AND decmps_state = '1' AND ( date_nxtmodc < TRUNC( id_feedate ) + 1
OR date_nxtmodc IS NULL ) ) OR ( mo_stat = '2' AND DECMPS_STATE = '2' AND IPMOMDOD.execute_flag = '1') )
AND ( TRUNC( date_end ) >= TRUNC( id_feedate ) OR date_end IS NULL )
AND ( nurse_cell_code = istr_deptcode )
AND ( item_type = '2' )
AND ( ( charge_state = '1') OR ( charge_state = '2' AND subtbl_flag = '1' ) )
AND ( exec_dpcd = istr_deptcode )
AND inpatient_no like istr_inpatientno
AND decmps_state like istr_motype
AND mo_order like istr_moorder
ORDER BY inpatient_no;
FETCH是: FETCH cur_todaylist_qt INTO v_ipmomdod;环境是IBM 小型机 1G内存 ORACLE 9i FOR Unix. 操作系统AIX.
.
在SQLPLUS里,SQLPLUS本身做了些转化。
OR date_nxtmodc IS NULL ) ) OR ( mo_stat = '2' AND DECMPS_STATE = '2' AND IPMOMDOD.execute_flag = '1') )
AND ( TRUNC( date_end ) >= TRUNC( id_feedate ) OR date_end IS NULL )
AND ( nurse_cell_code = istr_deptcode )
AND ( item_type = '2' )
AND ( ( charge_state = '1') OR ( charge_state = '2' AND subtbl_flag = '1' ) )
AND ( exec_dpcd = istr_deptcode )
AND inpatient_no like istr_inpatientno
AND decmps_state like istr_motype
AND mo_order like istr_moorder
ORDER BY inpatient_no;
呵呵,单看语句就够复杂了,又OR又LIKE的,可能是因为我不是开发人员。你可以在SQLPLUS中执行set autotrace traceonly explain
然后执行一下你的语句,看看执行计划是什么把它贴出来看看吧