커서를 사용하여 테이블 중 하나에 데이터를 삽입하는 함수를 oracle에 작성하려고합니다. 삽입해야하는 데이터를 선택하려면 select 쿼리가 필요합니다. 이것은 내가 쓰고있는 첫 번째 커서이며 너무 복잡합니다.Oracle 11g 커서를 사용하여 행을 삽입하는 방법
내 커서는 다음과 같습니다 :
/* Formatted on 11/5/2011 11:26:57 AM (QP5 v5.149.1003.31008) */
DECLARE
CURSOR csgetpgmecultstrecrefrs (
update_date DATE,
sequence_type VARCHAR2,
pip_number VARCHAR2,
startfrom INT,
endon INT)
IS
SELECT /*+first_rows(25) parallel (PE,20) */
pecu.component,
pecu.component_serial_no,
TO_DATE ('11/03/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
date_received,
TO_DATE ('11/03/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
date_programmed,
pecu.date_requested,
pecu.component_model_no,
pecu.product_type,
pecu.product_model_no,
pecu.product_serial_no,
pecu.factory_source,
pecu.programming_organization,
pecu.programming_site,
pecu.program_version,
pecu.ecu_serial_no,
pecu.ecu_part_no,
pecu.ecu_level,
pecu.software_assembly_id,
jdcp_pip_swa.pip_version software_assembly_id_upgrade,
TO_DATE ('11/03/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
software_upgrade_date,
jdcp_pip_details.released_by software_upgraded_by,
pecu.power_bump,
pecu.fuel_system_part_no,
pecu.fuel_pump_serial_no,
pecu.rack_slope,
pecu.off_set,
pecu.ecu_hours,
pecu.cal_file,
pecu.ecu_boot_block_part_no,
jdcp_pip_details.released_by user_id,
pecu.performance_option_part_no,
pecu.vehicle_option_part_no,
'PIP' sequence_type,
pecu.flex_power_part_no,
pecu.performance_option_cd,
pecu.vehicle_option_cd,
pecu.lineage,
pecu.replaced_by_esn,
pecu.replaces_esn,
pecu.esn_copied_from,
pecu.payload_seq_no,
pecu.vehicle_system_id,
pecu.user_account,
pecu.ecu_opcode_part_no,
pecu.opcode_compat_code,
pecu.marked_qa
FROM ( ( jdcp_pip_details
INNER JOIN
jdcp_pip_pin_assc
ON jdcp_pip_details.pip_number =
jdcp_pip_pin_assc.pip_number)
INNER JOIN
jdcp_pip_swa
ON jdcp_pip_details.pip_swa_id = jdcp_pip_swa.pip_swa_id)
INNER JOIN
( (SELECT pe.component,
pe.component_serial_no,
pe.display_serial_no_13,
pe.display_serial_no_17,
pe.date_requested,
pe.component_model_no,
pe.product_type,
pe.product_model_no,
pe.product_serial_no,
pe.factory_source,
pe.programming_organization,
pe.programming_site,
pe.program_version,
pe.ecu_serial_no,
pe.ecu_part_no,
pe.ecu_level,
pe.software_assembly_id,
pe.power_bump,
pe.fuel_system_part_no,
pe.fuel_pump_serial_no,
pe.rack_slope,
pe.off_set,
pe.ecu_hours,
pe.cal_file,
pe.ecu_boot_block_part_no,
pe.performance_option_part_no,
pe.vehicle_option_part_no,
pe.flex_power_part_no,
pe.performance_option_cd,
pe.vehicle_option_cd,
pe.lineage,
pe.replaced_by_esn,
pe.replaces_esn,
pe.esn_copied_from,
pe.payload_seq_no,
pe.vehicle_system_id,
pe.user_account,
pe.ecu_opcode_part_no,
pe.opcode_compat_code,
pe.marked_qa
FROM programmed_ecu_13_17_map_view pe
WHERE pe.date_received =
(SELECT /*+ INDEX_DESC(PEDR PROGRAMMED_ECU_INDEX8) */
pedr.date_received AS date_received
FROM programmed_ecu pedr
WHERE pedr.component_serial_no =
pe.component_serial_no
AND pedr.component = pe.component
AND (pedr.date_programmed) =
(SELECT /*+ INDEX_DESC(PEDP PROGRAMMED_ECU_INDEX8) */
pedp.date_programmed
FROM programmed_ecu pedp
WHERE pedp.
component_serial_no =
pedr.
component_serial_no
AND pedp.component =
pedr.component
AND ROWNUM = 1)
AND ROWNUM = 1)) pecu
INNER JOIN
software_assembly_id
ON pecu.vehicle_system_id =
software_assembly_id.vehicle_system_id)
ON (pecu.component = jdcp_pip_pin_assc.controller_short_name)
AND (jdcp_pip_swa.pip_version =
software_assembly_id.software_assembly_id)
AND (pecu.component =
software_assembly_id.controller_short_name)
WHERE (pecu.display_serial_no_13 = jdcp_pip_pin_assc.pin_number
OR pecu.display_serial_no_17 = jdcp_pip_pin_assc.pin_number)
AND pecu.software_assembly_id <> jdcp_pip_swa.pip_version
AND jdcp_pip_details.pip_number = 'TEST_FWD_ASSC'
AND jdcp_pip_pin_assc.status_cd NOT IN
('UC', 'SU', 'FA', 'RP', 'EC')
AND jdcp_pip_pin_assc.forward_associated = 'N'
AND ROWNUM BETWEEN 1 AND 25;
rc csgetpgmecultstrecrefrs%ROWTYPE;
BEGIN
OPEN csgetpgmecultstrecrefrs (update_date date,
sequence_type varchar2,
pip_number varchar2,
startfrom int,
endon int);
LOOP
FETCH csgetpgmecultstrecrefrs BULK COLLECT INTO rc;
EXIT WHEN csgetpgmecultstrecrefrs%NOTFOUND;
INSERT
INTO programmed_ecu (component,
component_serial_no,
date_received,
date_programmed,
date_requested,
component_model_no,
product_type,
product_model_no,
product_serial_no,
factory_source,
programming_organization,
programming_site,
program_version,
ecu_serial_no,
ecu_part_no,
ecu_level,
software_assembly_id,
software_assembly_id_upgrade,
software_upgrade_date,
software_upgraded_by,
power_bump,
fuel_system_part_no,
fuel_pump_serial_no,
rack_slope,
off_set,
ecu_hours,
cal_file,
ecu_boot_block_part_no,
user_id,
performance_option_part_no,
vehicle_option_part_no,
sequence_type,
flex_power_part_no,
performance_option_cd,
vehicle_option_cd,
lineage,
replaced_by_esn,
replaces_esn,
esn_copied_from,
payload_seq_no,
vehicle_system_id,
user_account,
ecu_opcode_part_no,
opcode_compat_code,
marked_qa
)
VALUES (
rc.component,
rc.component_serial_no,
rc.date_received,
rc.date_programmed,
rc.date_requested,
rc.component_model_no,
rc.product_type,
rc.product_model_no,
rc.product_serial_no,
rc.factory_source,
rc.programming_organization,
rc.programming_site,
rc.program_version,
rc.ecu_serial_no,
rc.ecu_part_no,
rc.ecu_level,
rc.software_assembly_id,
rc.software_assembly_id_upgrade,
rc.software_upgrade_date,
rc.software_upgraded_by,
rc.power_bump,
rc.fuel_system_part_no,
rc.fuel_pump_serial_no,
rc.rack_slope,
rc.off_set,
rc.ecu_hours,
rc.cal_file,
rc.ecu_boot_block_part_no,
rc.user_id,
rc.performance_option_part_no,
rc.vehicle_option_part_no,
rc.sequence_type,
rc.flex_power_part_no,
rc.performance_option_cd,
rc.vehicle_option_cd,
rc.lineage,
rc.replaced_by_esn,
rc.replaces_esn,
rc.esn_copied_from,
rc.payload_seq_no,
rc.vehicle_system_id,
rc.user_account,
rc.ecu_opcode_part_no,
rc.opcode_compat_code,
rc.marked_qa);
END LOOP;
COMMIT;
END;
어떤 도움에 감사드립니다. 미리 감사드립니다 !!! 내가 무엇입니까 오류 메시지는 다음과 같습니다 라인 147, 열 44 : PLS-00103 :가 발생 상징 "DATE"다음 중 하나를 예상 : 2 호선 ORA-06550에서
오류가 발생했습니다.(), * @ % & | = -! + < />의 모드 나머지는하지 범위 REM => .. <> 또는 = 또는 ~ => = < = <> 및 또는 LIKE2_ LIKE4_ LIKEC_ 같은 사이 등의 사용에서 || MULTISET 부재 SUBMULTISET_ ORA-06550 : 선 (151), 칼럼 (21) : PLS-00103 : 조우 심볼 ")"는 다음 중 하나가 예상 : 일괄로 행을 ORA-06550 : 선 (254), 컬럼 4 : PLS-00103 : 심볼을 "파일의 끝 '가 발생 중 하나를 기대하는 경우 다음
끝은 스크립트 라인 2."
그리고 정확히 질문은 무엇인가? 오류가 있습니까? 그렇다면 정확한 오류 메시지를 붙여 넣으시겠습니까? 예상대로 작동하지 않습니까? 그렇다면 당신이 기대하는 것과 코드가 실패한 부분에 대해 자세히 설명하십시오. –
죄송합니다. 질문에서 오류 메시지를 업데이트했습니다. –
게시물의 어느 곳에서나 올바른 Oracle 오류 메시지가 표시되지 않습니다. –