ãã®èšäºã«ã¯ããªãè«æã¹ã¿ã€ã«ããããŸãã ãã詳现ãªå
容ã¯ãèšäºã®æåŸã«ããæ·»ä»ã®ãããªã«èšèŒãããŠããã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ã®ããªã¬ãŒã«ã€ããŠ