ãã®èšäºã«ã¯ããªãè«æã¹ã¿ã€ã«ããããŸãã ãã詳现ãªå
容ã¯ãèšäºã®æåŸã«ããæ·»ä»ã®ãããªã«èšèŒãããŠãããOracleã³ã¬ã¯ã·ã§ã³ã«é¢ããè¬çŸ©ãåé²ãããŠããŸããã³ã¬ã¯ã·ã§ã³ã¯ãã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã§äœããã®åœ¢ã§ååšããã©ãã§ã䜿çšã®ç¹ã§åæ§ã®æ¬è³ªãæã£ãŠããŸãã ã€ãŸããåãã¿ã€ãã®ãªããžã§ã¯ãã®ã»ãããä¿åããã»ããå
šäœã«å¯ŸããŠã¢ã¯ã·ã§ã³ãå®è¡ãããããµã€ã¯ã«å
ã®ã»ããã®ãã¹ãŠã®èŠçŽ ã«å¯ŸããŠåãã¢ã¯ã·ã§ã³ãå®è¡ãããã§ããŸãã
ã³ã¬ã¯ã·ã§ã³ã¯ãOracleã§ãåãããã«äœ¿çšãããŸãã
èšäºã®å
容
pl / sqlã®ã³ã¬ã¯ã·ã§ã³ã®æŠèŠ
- ã³ã¬ã¯ã·ã§ã³ã®äœæã¯2段éã§è¡ãããŸã
- ãŸããã³ã¬ã¯ã·ã§ã³ã®ã¿ã€ãã宣èšããŸãïŒassoc_array_type_defãvarray_type_defãnested_table_type_defãæ§ç¯ããŸãïŒ

 - 次ã«ããã®ã¿ã€ãã®å€æ°ã宣èšããŸã
 
 - ã³ã¬ã¯ã·ã§ã³ã¢ã€ãã ãžã®ã¢ã¯ã»ã¹ã®æ§æã¯æ¬¡ã®ãšããã§ãã
variable_name(index) 
 - ã³ã¬ã¯ã·ã§ã³å倿°ã¯NULLã«ã§ããŸãïŒã³ã¬ã¯ã·ã§ã³èŠçŽ èªäœãïŒã
 - 倿¬¡å
ã³ã¬ã¯ã·ã§ã³ãå¯èœã§ãïŒã³ã¬ã¯ã·ã§ã³ã³ã¬ã¯ã·ã§ã³ïŒ
 
ã³ã¬ã¯ã·ã§ã³ã®çš®é¡
| åéã¿ã€ã | ã¢ã€ãã æ° | ã€ã³ããã¯ã¹ã®çš®é¡ | å¯ãŸãã¯ç | åæåãªã | çºè¡šå Žæ | SQLã§ã®äœ¿çš | 
|---|
飿³é
å ïŒããŒãã«ã«ããã€ã³ããã¯ã¹ïŒ | èšå®ãããŠããŸãã | ã²ã Pls_integer | å¯ã§ç | 空㮠| PL / SQLããã㯠ããã±ãŒãž | ãã | 
VARRAY ïŒå¯å€ãµã€ãºã®é
åïŒ | ã«ãã£ãŠèšå® | æŽæ° | é«å¯åºŠã®ã¿ | ãã« | PL / SQLããã㯠ããã±ãŒãž ã¹ããŒãã¬ãã« | ã¹ããŒãåºæã®ã¿ | 
| å
¥ãåã«ãªã£ãããŒãã« | èšå®ãããŠããŸãã | æŽæ° | å¯ã«äœæãããšããŸã°ãã«ãªãããšããããŸã | ãã« | PL / SQLããã㯠ããã±ãŒãž ã¹ããŒãã¬ãã« | ã¹ããŒãåºæã®ã¿ | 
ã³ã¬ã¯ã·ã§ã³ã®å¯åºŠãšã¯ãã³ã¬ã¯ã·ã§ã³ã®èŠçŽ éã«ã®ã£ããã空ãã¹ããŒã¹ããªãããšãæå³ããŸãã 衚ãããããããã«ãäžéšã®ã³ã¬ã¯ã·ã§ã³ã¯ã¹ããŒã¹ã§ããå¯èœæ§ããããŸãã èŠçŽ éã«ã®ã£ãããããå ŽåããããŸãã ããã¯ãããšãã°ãã³ã¬ã¯ã·ã§ã³å
ã«ã€ã³ããã¯ã¹1ãš4ã®èŠçŽ ããããã€ã³ããã¯ã¹2ãš3ã«ã¯èŠçŽ ããªãããšãæå³ããŸãã ãã®å Žåã2çªç®ãš3çªç®ã®èŠçŽ ã®ã¡ã¢ãªã¹ãããã¯ååšããã³ã¬ã¯ã·ã§ã³ïŒãã¹ããããããŒãã«ã®å ŽåïŒã«å±ããŸããããªããžã§ã¯ããå«ãŸãããããã®èŠçŽ ã®å
容ãèªã¿åãããšãããšno_data_foundãšã©ãŒãçºçããŸãã
詳现ã¯ãèšäºã®æåŸã«ãããããªè¬çŸ©ã«èšèŒãããŠããŸãã
飿³é
å
ããŒãã«ãŸãã¯pl / sqlããŒãã«ã«ããã€ã³ããã¯ã¹ãšãåŒã°ããŸãã
ã¿ã€ãã¯æ¬¡ã®ããã«èª¬æãããŸãïŒassoc_array_type_defïŒ:ã

- ããŒãšå€ã®ãã¢ã®ã»ãã
 - ããŒã¿ã¯ããŒã®é åºã§ãœãŒããããŠä¿åãããŸãã
 - DMLæäœããµããŒãããŠããŸããïŒéžæã«åå ã§ãããããŒãã«ã«ä¿åã§ããŸããïŒ
 - 宿°ãšããŠå®£èšãããå Žåã颿°ã«ãã£ãŠããã«åæåãããå¿
èŠããããŸã
 - æååã€ã³ããã¯ã¹ãæã€é£æ³é
åã®èŠçŽ ã®é åºã¯ãNLS_SORTããã³NLS_COMPãã©ã¡ãŒã¿ã«äŸåããŸã
 - åè·¯å³ã¬ãã«ã§ã¯åã宣èšã§ããŸããããããã±ãŒãžã§ã¯å®£èšã§ããŸã
 - ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããŸãã
 - ã€ã³ããã¯ã¹ãnullã«ããããšã¯ã§ããŸããïŒãã ããç©ºã®æååãèš±å¯ããŸã-è©³çŽ°ãšæåã®ã³ã¡ã³ãã®äŸãžã®ãªã³ã¯ïŒ
 - ããŒã¿åã¯ãrefã«ãŒãœã«ãé€ãä»»æã®ããŒã¿åã§ãã
 
ã«äœ¿çšïŒ- å°ããªåç
§ããŒãã«ãã¡ã¢ãªã«ä¿åããã«ã¯
 - ã³ã¬ã¯ã·ã§ã³ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãã«ã¯
 
å¶éïŒé£æ³é
åãåããåŸãã»ãã·ã§ã³äžã«NLS_SORTããã³NLS_COMPãã©ã¡ãŒã¿ãŒã倿ŽãããšãæåãæåŸã次ãåã®ã¡ãœããã®åŒã³åºãããäºæããªãçµæãåŸãããå ŽåããããŸãã ãŸãã飿³é
åããã©ã¡ãŒã¿ãŒãšããŠå¥ã®ããŒã¿ããŒã¹ã«æž¡ãéã«ãç°ãªãNLS_SORTããã³NLS_COMPèšå®ãæã€åé¡ãããå ŽåããããŸãã
VARRAY
ããã¯ãé æ¬¡ä¿åãããã¢ã€ãã ã®é
åã§ãã

ã¿ã€ãã¯æ¬¡ã®ããã«èšè¿°ãããŸãïŒvaray_type_defïŒïŒ
次ã®å Žåã«äœ¿çšïŒ- å¯èœãªæå€§èŠçŽ æ°ãç¥ã£ãŠããŸã
 - ã¢ã€ãã ãžã®ã¢ã¯ã»ã¹ã¯äžè²«ããŠããŸã
 
å¶éïŒæå€§ãµã€ãº-2,147,483,647ã¢ã€ãã 
å
¥ãåã«ãªã£ãããŒãã«
ã¿ã€ãã¯æ¬¡ã®ããã«èšè¿°ãããŸãïŒnested_table_type_defïŒïŒ

- ã³ã¬ã¯ã·ã§ã³ã®ãµã€ãºã¯åçã«å€åããŸã
 - åçã®ããã«æŸé»ãããå ŽåããããŸãã
< 
 - ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠåæå
 collection_type ( [ value [, value ]... ] ) 
 - ãã©ã¡ãŒã¿ãŒãã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããªãå Žåã空ã®ã³ã¬ã¯ã·ã§ã³ãè¿ãããŸã
 - ããŒã¿åã¯ãrefã«ãŒãœã«ãé€ãä»»æã®ããŒã¿åã§ãã
 - 1ã€ã®ã¹ã«ã©ãŒå€ã®ã¿ãå«ãŸããŠããå Žåãååã¯Column_Valueã§ã
 SELECT column_value FROM TABLE(nested_table) 
ãã®èšäºãžã®ã³ã¡ã³ãã§ã圌ãã¯ããæãŸãããªãã·ã§ã³ãææ¡ããŠããŸã-ããã¯ããæ®éçã§ãããããŒãã«ã®ã¹ã«ã©ãŒå€ã ãã§ãªãïŒ
 SELECT value(t) x FROM TABLE(nested_table) t 
 - ãã©ã¡ãŒã¿ãŒãã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããªãå Žåã空ã®ã³ã¬ã¯ã·ã§ã³ãè¿ãããŸã
 
ãã¹ããããããŒãã«ã䜿çšããã»ããæäœ
æäœã¯ã 
ãã¹ãã
ã衚ã³ã¬ã¯ã·ã§ã³ã§ã®ã¿å¯èœã§ãã æäœã«åå ããäž¡æ¹ã®ã³ã¬ã¯ã·ã§ã³ã¯åãã¿ã€ãã§ããå¿
èŠããããŸãã
æäœã®çµæã¯ã 
ãã¹ããã衚ã®ã³ã¬ã¯ã·ã§ã³ã§ããã
ãŸã ã
| éå¶ | 説æ | 
|---|
| ãã«ãã»ãããŠããªã³ | 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®åéåãè¿ããŸã | 
| ãã«ãã»ãããŠããªã³ã®åºå¥ | éè€ã®ãªã2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®åéåãè¿ããŸãïŒéè€ãåé€ããŸãïŒ | 
| ãã«ãã»ããã®äº€å·® | 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®å
±ééšåãè¿ããŸã | 
| ãã«ãã»ãã亀差ã®åºå¥ | éè€ã®ãªã2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®å
±ééšåãè¿ããŸãïŒéè€ãåé€ããŸãïŒ | 
| ã»ãã | ç°ãªãã³ã¬ã¯ã·ã§ã³ïŒãã€ã¯ã®ãªãã³ã¬ã¯ã·ã§ã³ïŒãè¿ããŸã | 
| ãã«ãã»ãããé€ã | 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®å·®ãè¿ããŸã | 
| DISTINCTãé€ããã«ãã»ãã | 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã®éããåå¥ã«è¿ããŸãïŒéè€ãåé€ããŸãïŒ | 
å°ããªäŸå°ããªäŸïŒ 
MULTISET EXCEPT DISTINCTæäœã®çµæã«æ³šæããŠãã ããïŒ
 DECLARE TYPE nested_typ IS TABLE OF NUMBER; nt1 nested_typ := nested_typ(1,2,3); nt2 nested_typ := nested_typ(3,2,1); nt3 nested_typ := nested_typ(2,3,1,3); nt4 nested_typ := nested_typ(1,2,4); answer nested_typ; BEGIN answer := nt1 MULTISET UNION nt4; answer := nt1 MULTISET UNION nt3; answer := nt1 MULTISET UNION DISTINCT nt3; answer := nt2 MULTISET INTERSECT nt3; answer := nt2 MULTISET INTERSECT DISTINCT nt3; answer := SET(nt3); answer := nt3 MULTISET EXCEPT nt2; answer := nt3 MULTISET EXCEPT DISTINCT nt2; END; 
çµæïŒ nt1 MULTISET UNION nt4: 1 2 3 1 2 4 nt1 MULTISET UNION nt3: 1 2 3 2 3 1 3 nt1 MULTISET UNION DISTINCT nt3: 1 2 3 nt2 MULTISET INTERSECT nt3: 3 2 1 nt2 MULTISET INTERSECT DISTINCT nt3: 3 2 1 SET(nt3): 2 3 1 nt3 MULTISET EXCEPT nt2: 3 nt3 MULTISET EXCEPT DISTINCT nt2: empty set 
 ã³ã¬ã¯ã·ã§ã³ã䜿çšããè«çæŒç®
| éå¶ | 説æ | 
|---|
| IS NULLïŒIS NOT NULLïŒ | ã³ã¬ã¯ã·ã§ã³ãNULLãšæ¯èŒããŸã | 
| æ¯èŒ= | 2ã€ã®ãã¹ããããããŒãã«ã³ã¬ã¯ã·ã§ã³ã¯ãããããåãã¿ã€ãã§ãã¿ã€ããrecordã®ã¬ã³ãŒããå«ãŸãªãå Žåã«æ¯èŒã§ããŸãã åãèŠçŽ ã»ãããæã£ãŠããå Žåã¯åãã§ãïŒã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®æ ŒçŽé åºã«é¢ä¿ãªãïŒ | 
| ã§ | ã³ã¬ã¯ã·ã§ã³ãæ¬åŒ§å
ã®ã³ã¬ã¯ã·ã§ã³ãšæ¯èŒããŸã | 
| éšåéå | ã³ã¬ã¯ã·ã§ã³ãå¥ã®ã³ã¬ã¯ã·ã§ã³ã®ãµãã»ããã§ãããã©ããã確èªããŸãã | 
| ã®ã¡ã³ã㌠| ç¹å®ã®ã¢ã€ãã ïŒãªããžã§ã¯ãïŒãã³ã¬ã¯ã·ã§ã³ã®äžéšã§ãããã©ããã確èªããŸãã | 
| ã»ããã§ã | ã³ã¬ã¯ã·ã§ã³ã«éè€ãå«ãŸããŠãããã©ããã確èªããŸã | 
| 空ã§ã | ã³ã¬ã¯ã·ã§ã³ã空ãã©ããã確èªããŸã | 
è«ççãªåéæäœã䜿çšããå°ããªäŸ DECLARE TYPE nested_typ IS TABLE OF NUMBER; nt1 nested_typ := nested_typ(1, 2, 3); nt2 nested_typ := nested_typ(3, 2, 1); nt3 nested_typ := nested_typ(2, 3, 1, 3); nt4 nested_typ := nested_typ(); BEGIN IF nt1 = nt2 THEN DBMS_OUTPUT.PUT_LINE('nt1 = nt2'); END IF; IF (nt1 IN (nt2, nt3, nt4)) THEN DBMS_OUTPUT.PUT_LINE('nt1 IN (nt2,nt3,nt4)'); END IF; IF (nt1 SUBMULTISET OF nt3) THEN DBMS_OUTPUT.PUT_LINE('nt1 SUBMULTISET OF nt3'); END IF; IF (3 MEMBER OF nt3) THEN DBMS_OUTPUT.PUT_LINE('3 MEMBER OF nt3'); END IF; IF (nt3 IS NOT A SET) THEN DBMS_OUTPUT.PUT_LINE('nt3 IS NOT A SET'); END IF; IF (nt4 IS EMPTY) THEN DBMS_OUTPUT.PUT_LINE('nt4 IS EMPTY'); END IF; END; 
çµæïŒ nt1 = nt2 nt1 IN (nt2,nt3,nt4) nt1 SUBMULTISET OF nt3 3 MEMBER OF nt3 nt3 IS NOT A SET nt4 IS EMPTY 
 åéæ¹æ³
ã¡ãœããåŒã³åºãã®æ§æïŒ
 collection_name.method 
| æ¹æ³ | çš®é¡ | 説æ | ããŒãã«ããšã®ã€ã³ããã¯ã¹ | VARRAY | å
¥ãåã«ãªã£ãããŒãã« | 
|---|
| åé€ | æç¶ã | ã³ã¬ã¯ã·ã§ã³ããã¢ã€ãã ãåé€ããŸãã | ã¯ã | ãã©ã¡ãŒã¿ãªãã®ããŒãžã§ã³ã®ã¿ | ã¯ã | 
| ããªã  | æç¶ã | ã³ã¬ã¯ã·ã§ã³ã®æåŸããã¢ã€ãã ãåé€ããŸãïŒã³ã¬ã¯ã·ã§ã³ã®å
éšãµã€ãºã§åäœããŸãïŒ | ãã | ã¯ã | ã¯ã | 
| å»¶é· | æç¶ã | ã³ã¬ã¯ã·ã§ã³ã®æåŸã«ã¢ã€ãã ã远å ããŸãã | ãã | ã¯ã | ã¯ã | 
| ååšãã | æ©èœ | ã¢ã€ãã ãã³ã¬ã¯ã·ã§ã³å
ã«ããå ŽåãTRUEãè¿ããŸãã | ã¯ã | ã¯ã | ã¯ã | 
| æå | æ©èœ | ã³ã¬ã¯ã·ã§ã³ã®æåã®ã€ã³ããã¯ã¹ãè¿ããŸã | ã¯ã | ã¯ã | ã¯ã | 
| æåŸ | æ©èœ | æåŸã®ã³ã¬ã¯ã·ã§ã³ã€ã³ããã¯ã¹ãè¿ããŸã | ã¯ã | ã¯ã | ã¯ã | 
| COUNT | æ©èœ | ã³ã¬ã¯ã·ã§ã³å
ã®ã¢ã€ãã ã®æ°ãè¿ããŸãã | ã¯ã | ã¯ã | ã¯ã | 
| éç | æ©èœ | ã³ã¬ã¯ã·ã§ã³ãä¿åã§ããã¢ã€ãã ã®æå€§æ°ãè¿ããŸãã | ãã | ã¯ã | ãã | 
| äºå | æ©èœ | ã³ã¬ã¯ã·ã§ã³å
ã®åã®ã¢ã€ãã ã®ã€ã³ããã¯ã¹ãè¿ããŸãã | ã¯ã | ã¯ã | ã¯ã | 
| 次㞠| æ©èœ | ã³ã¬ã¯ã·ã§ã³å
ã®æ¬¡ã®ã¢ã€ãã ã®ã€ã³ããã¯ã¹ãè¿ããŸã | ã¯ã | ã¯ã | ã¯ã | 
åé€ãã
- åé€ãããšããã¹ãŠã®ã¢ã€ãã ãåé€ãããŸãã ãããã®ã¢ã€ãã ãä¿åããããã«å²ãåœãŠãããã¡ã¢ãªãããã«ã¯ãªã¢ããŸãã
 - åé€ïŒnïŒã¯ãã€ã³ããã¯ã¹nã®èŠçŽ ãåé€ããŸãã ã¡ã¢ãªãè§£æŸãããŸããã èŠçŽ ã埩å
ããïŒã€ãŸããæ°ããèŠçŽ ãèšå®ããïŒãšãåã®èŠçŽ ãšåãã¡ã¢ãªãå æããŸãã
 - DeleteïŒnãmïŒã¯ãéén..mã®ã€ã³ããã¯ã¹ãæã€èŠçŽ ãåé€ããŸã
 - ã³ã¬ã¯ã·ã§ã³ã«åé€ããã¢ã€ãã ããªãå Žåãäœãå®è¡ãããŸããã
 - VARRAYåã®ã³ã¬ã¯ã·ã§ã³ã®å Žåããã©ã¡ãŒã¿ãªãã®ã¡ãœããã®ããŒãžã§ã³ã®ã¿ã䜿çšå¯èœã§ã
 
䜿çšäŸ DECLARE TYPE nt_type IS TABLE OF NUMBER; nt nt_type := nt_type(11, 22, 33, 44, 55, 66); BEGIN nt.DELETE(2);  
çµæïŒ beginning: 11 22 33 44 55 66 after delete(2): 11 33 44 55 66 after nt(2) := 2222: 11 2222 33 44 55 66 after delete(2, 4): 11 55 66 after nt(3) := 3333: 11 3333 55 66 after delete: empty set 
 
ããªã 
- ããªã ïŒïŒ-ã³ã¬ã¯ã·ã§ã³ã®æåŸã§1ã€ã®ã¢ã€ãã ãåé€ããŸãã èŠçŽ ããªãå ŽåãSUBSCRIPT_BEYOND_COUNTäŸå€ãã¹ããŒããŸã
 - ããªã ïŒnïŒ-ã³ã¬ã¯ã·ã§ã³ã®æåŸã«ããnåã®èŠçŽ ãåé€ããŸãã èŠçŽ ãnåæªæºã®å ŽåãäŸå€SUBSCRIPT_BEYOND_COUNTãã¹ããŒãããŸãã
 - ã³ã¬ã¯ã·ã§ã³ã®å
éšãµã€ãºã§åäœããŸãã ã€ãŸã Deleteã䜿çšããŠæåŸã®ã¢ã€ãã ãåé€ãããå ŽåãTrimïŒïŒãåŒã³åºããšã以åã«åé€ãããã¢ã€ãã ãåé€ãããŸãã
 - ãããã®ã¢ã€ãã ãä¿åããããã«å²ãåœãŠãããã¡ã¢ãªãããã«ã¯ãªã¢ããŸã
 - DeleteïŒïŒãšçµã¿åãããŠäœ¿çšââããªãæ¹ãè¯ã
 
䜿çšäŸ DECLARE TYPE nt_type IS TABLE OF NUMBER; nt nt_type := nt_type(11, 22, 33, 44, 55, 66); BEGIN nt.TRIM;  
çµæïŒ beginning: 11 22 33 44 55 66 after TRIM: 11 22 33 44 55 after DELETE(4): 11 22 33 55 after TRIM(2): 11 22 33 
 å»¶é·
- EXTENDã¯ãã³ã¬ã¯ã·ã§ã³ã®æåŸã«1ã€ã®nullèŠçŽ ã远å ããŸãã
 - EXTENDïŒnïŒã¯ãnull nullèŠçŽ ãã³ã¬ã¯ã·ã§ã³ã®æåŸã«è¿œå ããŸã
 - EXTENDïŒnãiïŒã¯ãã€ã³ããã¯ã¹iã®ã¢ã€ãã ã®nåã®ã³ããŒãã³ã¬ã¯ã·ã§ã³ã®æåŸã«è¿œå ããŸãã ã³ã¬ã¯ã·ã§ã³ã«NOT NULL宿°ãããå Žåããã®åœ¢åŒã®ã¿ã䜿çšã§ããŸãã
 - Deleteã¡ãœããã䜿çšããŠã¢ã€ãã ã以åã«åé€ãããå ŽåãExtendã¯ã³ã¬ã¯ã·ã§ã³ã«ä¿åãããŠããã¡ã¢ãªã»ã«ã䜿çšããŸããããæ°ããã¢ã€ãã ã远å ããŸãïŒæ°ããã¡ã¢ãªãå²ãåœãŠãŸãïŒ
 
䜿çšäŸ DECLARE TYPE nt_type IS TABLE OF NUMBER; nt nt_type := nt_type(11, 22, 33); BEGIN nt.EXTEND(2, 1);  
çµæïŒ beginning: 11 22 33 after EXTEND(2,1): 11 22 33 11 11 after DELETE(5): 11 22 33 11 after EXTEND: 11 22 33 11 
 ååšãã
- åé€ãããã¢ã€ãã ã«å¯ŸããŠfalseãè¿ããŸãã
 - ã³ã¬ã¯ã·ã§ã³ã®å¢çãè¶ãããšãfalseãè¿ããŸã
 
䜿çšäŸ DECLARE TYPE NumList IS TABLE OF INTEGER; n NumList := NumList(1, 3, 5, 7); BEGIN n.DELETE(2);  
 æåãšæåŸ
- varrayã®å ŽåãFirstã¯åžžã«1ãè¿ããLastã¯åžžã«Countãšåãå€ãè¿ããŸã
 
䜿çšäŸ DECLARE TYPE aa_type_str IS TABLE OF INTEGER INDEX BY VARCHAR2(10); aa_str aa_type_str; BEGIN aa_str('Z') := 26; aa_str('A') := 1; aa_str('K') := 11; aa_str('R') := 18; DBMS_OUTPUT.PUT_LINE('Before deletions:'); DBMS_OUTPUT.PUT_LINE('FIRST = ' || aa_str.FIRST); DBMS_OUTPUT.PUT_LINE('LAST = ' || aa_str.LAST); aa_str.DELETE('A'); aa_str.DELETE('Z'); DBMS_OUTPUT.PUT_LINE('After deletions:'); DBMS_OUTPUT.PUT_LINE('FIRST = ' || aa_str.FIRST); DBMS_OUTPUT.PUT_LINE('LAST = ' || aa_str.LAST); END; 
çµæïŒ Before deletions: FIRST = A LAST = Z After deletions: FIRST = K LAST = R 
 ã«ãŠã³ã
䜿çšäŸ DECLARE TYPE NumList IS VARRAY(10) OF INTEGER; n NumList := NumList(1, 3, 5, 7); BEGIN DBMS_OUTPUT.PUT('n.COUNT = ' || n.COUNT || ', '); DBMS_OUTPUT.PUT_LINE('n.LAST = ' || n.LAST); n.EXTEND(3); DBMS_OUTPUT.PUT('n.COUNT = ' || n.COUNT || ', '); DBMS_OUTPUT.PUT_LINE('n.LAST = ' || n.LAST); n.TRIM(5); DBMS_OUTPUT.PUT('n.COUNT = ' || n.COUNT || ', '); DBMS_OUTPUT.PUT_LINE('n.LAST = ' || n.LAST); END; 
çµæ n.COUNT = 4, n.LAST = 4 n.COUNT = 7, n.LAST = 7 n.COUNT = 2, n.LAST = 2 
 å¶é
- VARRAYã®å Žåãã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®æå€§æ°ãè¿ããä»ã®ã³ã¬ã¯ã·ã§ã³ã®å Žåã¯nullãè¿ããŸã
 
䜿çšäŸ DECLARE TYPE aa_type IS TABLE OF INTEGER INDEX BY PLS_INTEGER; aa aa_type;  
çµæïŒ aa.COUNT = 4 aa.LIMIT = va.COUNT = 2 va.LIMIT = 4 nt.COUNT = 3 nt.LIMIT = 
 åãšæ¬¡
- ã³ã¬ã¯ã·ã§ã³å
ãç§»åã§ããŸã
 - å/次ã®èŠçŽ ã®ã€ã³ããã¯ã¹ãè¿ããŸãïŒèŠçŽ ããªãå Žåã¯nullïŒ
 
䜿çšäŸ DECLARE TYPE nt_type IS TABLE OF NUMBER; nt nt_type := nt_type(18, NULL, 36, 45, 54, 63); BEGIN nt.DELETE(4); DBMS_OUTPUT.PUT_LINE('nt(4) was deleted.'); FOR i IN 1 .. 7 LOOP DBMS_OUTPUT.PUT('nt.PRIOR(' || i || ') = '); print(nt.PRIOR(i)); DBMS_OUTPUT.PUT('nt.NEXT(' || i || ') = '); print(nt.NEXT(i)); END LOOP; END; 
çµæïŒ nt(4) was deleted. nt.PRIOR(1) = nt.NEXT(1) = 2 nt.PRIOR(2) = 1 nt.NEXT(2) = 3 nt.PRIOR(3) = 2 nt.NEXT(3) = 5 nt.PRIOR(4) = 3 nt.NEXT(4) = 5 nt.PRIOR(5) = 3 nt.NEXT(5) = 6 nt.PRIOR(6) = 5 nt.NEXT(6) = nt.PRIOR(7) = 6 nt.NEXT(7) = 
 äžæ¬åé
- äžåºŠã«1ã€ã§ã¯ãªãããããã§PL / SQLã®SQLã¹ããŒãã¡ã³ãã®çµæãè¿ããŸã
 - äžæ¬åéãéžæ
 - FETCH BULK COLLECT INTO [å¶é]
 - äžæ¬åå
 - 飿³é
åã§ã¯æ©èœããŸããïŒpls_integerã§ã€ã³ããã¯ã¹ä»ãããããã®ãé€ãïŒ
 
䜿çšäŸ DECLARE TYPE NumTab IS TABLE OF employees.employee_id%TYPE; TYPE NameTab IS TABLE OF employees.last_name%TYPE; CURSOR c1 IS SELECT employee_id,last_name FROM employees WHERE salary > 10000 ORDER BY last_name; enums NumTab; names NameTab; BEGIN SELECT employee_id, last_name BULK COLLECT INTO enums, names FROM employees ORDER BY employee_id; OPEN c1; LOOP FETCH c1 BULK COLLECT INTO enums, names LIMIT 10; EXIT WHEN names.COUNT = 0; do_something(); END LOOP; CLOSE c1; DELETE FROM emp_temp WHERE department_id = 30 RETURNING employee_id, last_name BULK COLLECT INTO enums, names; END; 
 forallãµã€ã¯ã«
- SQLïŒ
BULK_ROWCOUNT-ã³ã¬ã¯ã·ã§ã³ãådmlã¹ããŒãã¡ã³ãã®åœ±é¿ãåããè¡ã®æ°ãå«ãŸããŸã
 - SQLïŒ
ROWCOUNT -forallã«ãŒãã®dmlã¹ããŒãã¡ã³ãã®åœ±é¿ãåããè¡ã®ç·æ°
 
䜿çšäŸ DECLARE TYPE NumList IS TABLE OF NUMBER; depts NumList := NumList(10, 20, 30); TYPE enum_t IS TABLE OF employees.employee_id%TYPE; e_ids enum_t; TYPE dept_t IS TABLE OF employees.department_id%TYPE; d_ids dept_t; BEGIN FORALL j IN depts.FIRST .. depts.LAST DELETE FROM emp_temp WHERE department_id = depts(j) RETURNING employee_id, department_id BULK COLLECT INTO e_ids, d_ids; END; 
 forallã®äŸå€
åéã®äŸå€
- COLLECTION_IS_NULL-åæåãããŠããªãã³ã¬ã¯ã·ã§ã³ãåŠçããããšããŸã
 - NO_DATA_FOUND-åé€ãããã¢ã€ãã ãèªã¿åãããšããŸã
 - SUBSCRIPT_BEYOND_COUNT-ã³ã¬ã¯ã·ã§ã³ã®å¢çãè¶ããŠ
 - SUBSCRIPT_OUTSIDE_LIMIT-ç¯å²å€ã®ã€ã³ããã¯ã¹
 - VALUE_ERROR-ã€ã³ããã¯ã¹ãnullã§ããããæŽæ°ã«å€æã§ããŸãã
 
äŸå€ãã¹ããŒããç¶æ³ã®äŸ DECLARE TYPE NumList IS TABLE OF NUMBER; nums NumList; BEGIN nums(1) := 1;  
 DBMS_SESSION.FREE_UNUSED_USER_MEMORY
- DBMS_SESSION.FREE_UNUSED_USER_MEMORYããã·ãŒãžã£ã¯ãã·ã¹ãã ã«ããå€ãã®æªäœ¿çšã¡ã¢ãªãè¿ããŸã
 - Oracleã®ããã¥ã¡ã³ãã§ã¯ãããŸãã«ãã€æ
éã«ãã®äœ¿çšãæšå¥šãããŠããŸãã
 - å°çšãµãŒããŒã¢ãŒãã§æ¥ç¶ããå Žåããã®ããã·ãŒãžã£ãåŒã³åºããšãæªäœ¿çšã®PGAã¡ã¢ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«è¿ãããŸãã
 - å
±æãµãŒããŒã¢ãŒãã§æ¥ç¶ãããŠããå Žåããã®ããã·ãŒãžã£ãåŒã³åºããšã å
±æããŒã«å
ã®æªäœ¿çšã®ã¡ã¢ãªãè¿ãããŸã
 
ãã®å Žåãã¡ã¢ãªãè§£æŸããå¿
èŠããããŸãã- sort_area_sizeé åå
šäœã䜿çšããå Žåã®å€§èŠæš¡ãªãœãŒã
 - å€§èŠæš¡ãªPL / SQLããã±ãŒãžãããã·ãŒãžã£ããŸãã¯é¢æ°ã®ã³ã³ãã€ã«
 - PL / SQLã€ã³ããã¯ã¹ããŒãã«ã«å€§éã®ããŒã¿ãä¿åãã
 
䜿çšäŸ CREATE PACKAGE foobar type number_idx_tbl is table of number indexed by binary_integer; store1_table number_idx_tbl;  
 ãã®èšäºã®å·çã«åºã¥ããè¬çŸ©ã®ãããªé²ç»ïŒ
Oracleã®ãããã¯ã«é¢ããä»ã®å€ãã®ãããªã¯ããã®ãã£ã³ãã«ã§èŠã€ããããšãã§ããŸãã
www.youtube.com/c/MoscowDevelopmentTeamãã®ä»ã®Oracleã®èšäº
Oracleã®ããªã¬ãŒã«ã€ããŠ