테스트코드 짜다가 버리기 아까워서 저장.
타입선언
create or replace TYPE USER_OBJECT AS OBJECT ( V_USERNAME VARCHAR2(20), V_PHONE VARCHAR2(20), V_ADDRESS VARCHAR2(100) ); create or replace TYPE USER_OBJECT_ARRAY AS TABLE OF USER_OBJECT;
테이블
CREATE TABLE USERTABLE ( V_USERNAME VARCHAR2(20), V_PHONE VARCHAR2(20), V_ADDRESS VARCHAR2(100) )
그냥 실행문
DECLARE V_CODE VARCHAR2(100); V_MSG VARCHAR2(100); v_CNT NUMBER(4) :=0 ; v_userArr USER_OBJECT_ARRAY; v_user USER_OBJECT; BEGIN v_userArr := USER_OBJECT_ARRAY(USER_OBJECT('김유저', '010-000-3333', '서울시 전체'), USER_OBJECT('최유저', '010-4444-4444', '경기도 전체')); for i in 1..v_userArr.count loop dbms_output.put_line(v_userArr(i).V_USERNAME); end loop; END;
프로시저
create or replace PROCEDURE MASS_USER_PROCEDURE ( v_userArr in USER_OBJECT_ARRAY, O_RESULR_CODE OUT VARCHAR2, O_RESULT_MESSAGE OUT VARCHAR2) IS --V_USERNAME VARCHAR2(20); --V_PHONE VARCHAR2(20); --V_ADDRESS VARCHAR2(100); i BINARY_INTEGER := 0; BEGIN for i in 1..v_userArr.count loop dbms_output.put_line(v_userArr(i).V_USERNAME); insert into usertable (V_USERNAME, V_PHONE, V_ADDRESS) values (v_userArr(i).V_USERNAME, v_userArr(i).V_PHONE, v_userArr(i).V_ADDRESS); end loop; commit; END MASS_USER_PROCEDURE;
프로시저 호출코드
DECLARE v_code VARCHAR2(100); v_message VARCHAR2(100); v_userArr USER_OBJECT_ARRAY; v_user USER_OBJECT; BEGIN v_userArr := USER_OBJECT_ARRAY(USER_OBJECT('김유저', '0103333', '서울시 전체'), USER_OBJECT('최유저', '0104444', '경기도 전체')); for i in 1..v_userArr.count loop MASS_USER_PROCEDURE(v_userArr, V_CODE, V_MSG); dbms_output.put_line(v_CODE); end loop; END;
제일 도움된 페이지 :
https://oracle-base.com/articles/8i/collections-8i