èšäºã®å
容ãã€ãŸããã®ååãæå³ãããã®ã
ããã«ãèè
ã¯ããã圌ã®èгç¹ãããªãå¿
èŠãªã®ãã説æããSUBJã¯åãªããã¡ãã·ã§ããã«ãªãã¯ãããžãŒã§ã¯ãªãããäºéã«å¿
èŠãªããžãã¹-å¿«é©ã§äŸ¿å©ãªãã®ãã§ããããšãäŒããŸãã
äœäººãã®æèœãã人ã
ãã©ã®ããã«äœããããã®ãïŒããã°ã©ãã³ã°èšèªããªãããã§ã¯ãªãã®ãïŒã圌ãã解決ããããšããŠããåé¡ãšåœŒããèªåã§èšå®ããã¿ã¹ã¯ãæ£ç¢ºã«ç¥ã£ãŠããã®ãèŠãã®ã¯åžžã«è峿·±ãã ãŸããèªåã§äœæããã¹ãããŸãã å®å®ã®èª¿åã®ç¶æãæåç·ã«çœ®ããŠãã巚倧å§å¡äŒã®èšå¿µç¢çãªåµé ç©ãšæ¯èŒããªãã§ãã ããã
ããšãã°ã
FORTRANãš
PL / 1ã®éåœãæ¯èŒããŠãã ããã ãã®PL / 1ã«ã€ããŠèª°ãä»èŠããŠããã§ãããã
ãã®èгç¹ãããããšãã°
AWKã¯éåžžã«æåããŠããŸãã
ãã©ãŽã³ããã¯ã®èè
ã®äžäººã§ãã圌ã®ã¿ã€ãã«Aã¯
ã¢ã«ãã¬ããã»ã¢ãã§ãããWã¯Fortran-77ã«æãæºãã
ããŒã¿ãŒã»ã¯ã€ã³ããŒã¬ãŒã§ãããKã¯
ãã©ã€ã¢ã³ã»ã«ãŒãã¬ã³ã§ããã圌ã¯åœŒãªãã§ãããšèšã䟡å€ããããŸãã ãã®èšèªã¯ãããã»ã¹éã®ãã€ãã§ãªã³ã¶ãã©ã€ã®ããã¹ãã¹ããªãŒã ãåŠçããããšãç®çãšããŠããŸãã
èšèªã¯ã¿ã€ãã¬ã¹ã§ãïŒ
ããã¯å®å
šã«çå®ã§ã¯ãããŸãã ïŒãæ§æã¯Cã«éåžžã«äŒŒãŠããããã£ã«ã¿ãªã³ã°æ©èœã飿³é
åãã¹ããªãŒã ã®éå§/çµäºã®ã€ãã³ããæ¹è¡ã€ãã³ãããããŸã...
äœæè
ã¯ããã®èšèªã«ã€ã³ã¿ããªã¿ãã€ã³ã¹ããŒã«ããå¿
èŠããªããåžžã«UNIXã©ã€ã¯ãªã·ã¹ãã ã«ååšããWindowsã§ã¯å®è¡å¯èœãã¡ã€ã«ãã³ããŒããã ãã§ååã§ãããšããäºå®ã«ãæéãåããŠããŸãã ãã ããããã§ã¯ãããŸããã
ãã®éçšã§ãèè
ã¯ããªãé »ç¹ã«SQL + AWKãã³ãã«ã䜿çšããå¿
èŠãããããã®ããã§ãã SQLã¯ãããŒã¿ãããŒãå¶åŸ¡ããããã«èšèšãããæåã®å®£èšåèšèªã®ãŸãŸã§ãã éèšé¢æ°ã®åœ¢åŒã§ã¯ãšãªå®è¡ã®ã³ã³ããã¹ããæäœããæ©äŒã¯éåžžã«éãããŠããŸãã
ããšãã°ãSQLã䜿çšããŠ2次å
ã®ãã¹ãã°ã©ã ãäœæããæ¹æ³ã¯ïŒ
ãã ããGROUP BYã®äœ¿çšã¯äžŠã¹æ¿ããæå³ãã1åè¡ïŒãŸãã¯ãã以äžïŒã®è¡ãããå Žåãããã¯å®æãªåã³ã§ã¯ãããŸããã
UPDïŒã³ã¡ã³ãã§ãããã¯ããã§ã¯ãªãïŒãŸãã¯ãŸã£ãããªãïŒãšç§ã«ä¿®æ£ããŸããSQLããã»ããµã«ã¯ãã°ã«ãŒãååºæºã«åŸã£ãŠããã·ã¥ãæ§ç¯ããããã»ã¹ã§éçŽé¢æ°ãå®è¡ããæ©èœããããŸãã ãããè¡ãã«ã¯ãããã·ã¥ããããã¡ã¢ãªã«é
眮ããã®ã«ååãªç©ºãã¡ã¢ãªãå¿
èŠã§ãã
ãã®åŸãããŒãã«ã®èªã¿åãæã«ã°ã«ãŒãã®ã³ã³ããã¹ããæŽæ°ããããã®èªã¿åãã®çµããã«ãã§ã«èšç®çµæãåŸãããŸãã
åãææ³ããŠã£ã³ããŠé¢æ°ïŒäžèšïŒã«æ¡åŒµããããšãã§ããŸãããã³ã³ããã¹ãã ããã倪ãããªããŸãã
ã°ã«ãŒãã®æ°ãäºåã«äžæãŸãã¯éåžžã«å€§ããå ŽåãSQLããã»ããµã¯äžæã€ã³ããã¯ã¹ãäœæãã2åç®ã®ãã¹ã§å®è¡ããããšã匷å¶ãããŸãã
ããšãã°ã次ã®ãããªåçŽãªå Žå-åçŽãªCOUNTãæ®éçãªãªãã·ã§ã³ãå¯èœã§ã-äžæçãªã€ã³ããã¯ã¹ïŒcxãcyãcountïŒãå°æ°ã®ã°ã«ãŒãã§ã¯ããã£ãã·ã¥ãããããŒãžã®ãã¹ãŠã®ã¡ã¢ãªã«æ ŒçŽãããŸãã è€éãªå ŽåããŠã£ã³ããŠãæ©èœããå Žåãã°ã«ãŒãã®ç¶æ
ã¯éèŠãªãã®ã«ãªããå»åž«ã泚æãããã®ã§ã¯ãªããåžžã«ã·ãªã¢ã«åãããŸãã
èŠçŽïŒSQLããã»ããµãŒã¯ãGROUP BYã®åŸã®ã°ã«ãŒãæ°ãæšå®ã§ããªãå ŽåããœãŒãã«é ŒããŸãã ãã ããèšç®å€ã«ããã°ã«ãŒãåã¯ïŒå€ãã®å ŽåïŒãŸãã«ãã®ã±ãŒã¹ã§ãã
ãããã£ãŠã次ã®ãããªããšãããå¿
èŠããããŸãã
psql -t -q -c 'select x, y from samples' | gawk -f mk_hist2d.awk
mk_hist2d.awkã¯ã飿³é
åã«çµ±èšãèç©ããäœæ¥ã®å®äºæã«çµ±èšã衚瀺ããŸã
# mk_hist2d.awk { bucket[int($2*0.01), int($3*0.01)]+=$1; } END { for (i=0; i < 500; i++) for (j=0; j < 500; j++) { if ((i, j) in bucket) print i*100." "j*100." "bucket[i, j]; else print i*100." "j*100." 0"; } }
ãã ãã1ã€ãããŸãããµãŒããŒããäœæ¥ãã·ã³ã«å®å
šãªããŒã¿ã¹ããªãŒã ãéä¿¡ããå¿
èŠããããŸãããããã»ã©å®ãã¯ãããŸããã
SQLã¯ãšãªã®å®è¡äžã«ãäžŠã¹æ¿ãã«é Œããã«çµ±èšãèç©ããããã«ãäœããã®æ¹æ³ã§æ¥œãããã®ãšäŸ¿å©ãªãã®ãçµã¿åãããããšãã§ããŸããïŒ ã¯ããããšãã°ãã«ã¹ã¿ã éèšé¢æ°ã䜿çšããŸãã
ã«ã¹ã¿ã éèšé¢æ°
Subjã¯ããŸããŸãªã·ã¹ãã ã«ååšããã©ãã§ãç¬èªã®æ¹æ³ã§è¡ãããŸãã
- PostgreSQL ããã¥ã¡ã³ãã¯ãã¡ãã§ãã 詳现ã¯ãã¡ã ã
ããã¯ãæå€§å£åº§æ®é«ãèšç®ãããå Žæã§ãã
ãããŠãããã¯ããŒã«åã®è©³çްãèšç®ããäŸã§ã-trueãŸãã¯falseã
ãã®ããã«èŠããŸã-
CREATE AGGREGATE mode(boolean) ( SFUNC = mode_bool_state, STYPE = INT[], FINALFUNC = mode_bool_final, INITCOND = '{0,0}' );
ããã§ã SFUNCã¯ã¹ããªãŒã å
ã®ãã¹ãŠã®è¡ã«å¯ŸããŠåŒã³åºããã颿°ã§ãã
ãã®æåã®åŒæ°ã¯STYPEåã§ãã
FINALFUNCã¯ãèšç®ãå®äºããéèšã®å€ãè¿ãããã«äœ¿çšãããŸãã
INITCOND-æåã®åŒæ°ãšããŠæž¡ãããå
éšç¶æ
ã®åæå€ïŒ STYPE ïŒã®åæåã
颿°ã¯Cã§èšè¿°ã§ããããšãèãããšïŒå
éšç¶æ
ã§ã¯ããªã¯ãšã¹ããéãããšèªåçã«è§£æŸãããã¡ã¢ãªã䜿çšã§ããããšãæå³ããŸãïŒãããã¯éåžžã«åŒ·åãªããŒã«ã§ãã ãã®äœ¿çšã®ç¯å²å€ã§ã¯ããŸã è¡ããªããã°ãªããŸããã - MS SQL
以å ïŒ2000幎ïŒããã®ãªããžã§ã¯ãã䜿çšããŠéèšãè¡ãã«ã¯ãActiveXãªããžã§ã¯ããäœæããèŠæ±ã®åã«å¿
èŠã§ããã
çŸåš ïŒ2016以éïŒãããã¯CLRç°å¢ã§è¡ãããŠããŸãã ã«ã¹ã¿ã 颿°ãäœæãã ã¢ã»ã³ããªãäœæããŠç»é²ããå¿
èŠããããŸãã ãã®åŸã éèšãäœæã§ããŸãã
幟äœå¹³åã®èšç®ãšæååã®ããŒãžã®äŸ ïŒè¿œå ã®ãã©ã¡ãŒã¿ãŒãšäžéç¶æ
ãä¿åããããã®ãŠãŒã¶ãŒå®çŸ©åã䜿çšããŸãã - ãªã©ã¯ã«
Oracleã§ã¯ãããã¯ODCIAggregate Data Cartridge ïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒã䜿çšããŠè¡ãããŸãã
ç¬èªã®éèšãäœæããã«ã¯ã4ã€ã®ã¡ãœãããå®è£
ããã«ã¹ã¿ã ã¿ã€ããèšè¿°ããå¿
èŠããããŸã
-åæåïŒODCIAggregateInitializeïŒãéçãç®çã®åã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããã©ã¡ãŒã¿ãŒãä»ããŠè¿ãå¿
èŠããããŸã
-ããŒã¿ã®åè¡ã§åŒã³åºãããå埩ïŒODCIAggregateIterateïŒ
-mergeïŒODCIAggregateMergeïŒã䞊è¡ããŠå®è¡ãããéçŽãããŒãžããããã«äœ¿çš
-çµäºïŒODCIAggregateTerminateïŒ-çµæåºå
äŸïŒ 1ã2ã3ã4 ã - DB2
DB2ã§ã«ã¹ã¿ã éèšã䜿çšããæç€ºçãªæ¹æ³ã¯ãããŸããã
ãã ããæšæºé¢æ°ïŒMAXã§ã¯ãããïŒããŠãŒã¶ãŒå®çŸ©åïŒJavaã®å ŽåïŒã«ã¹ãªããããã·ã¹ãã ã«ãã©ãŒã ã®ã¯ãšãªãå®è¡ãããããšãã§ããŸãã
CREATE TYPE Complex AS ( real DOUBLE, i DOUBLE ) ⊠CREATE TABLE complexNumbers ( id INTEGER NOT NULL PRIMARY KEY, number Complex ) ⊠SELECT sum..real, sum..i FROM ( SELECT GetAggrResult(MAX(BuildComplexSum(number))) FROM complexNumbers ) AS t(sum)
ããããã¹ãŠã®ã·ã¹ãã ã§æ³šç®ãã¹ãããšã¯äœã§ããïŒ
- äœããã®æ¹æ³ã§ãããŒã¿ããŒã¹ã«ãªããžã§ã¯ããäœæããå¿
èŠããããŸãã AGGREGATEãŸãã¯TYPEã«ãªããŸãã å°ãªããšããé©åãªæš©å©ãå¿
èŠã§ãã ãããŠã圌ã®èã«ããã€ãã®æ°åã远å ãããã ãã§ãã
- CãCïŒãJavaãªã©ãå¥ã®èšèªã§äœããæžãå¿
èŠããããããããŸããã
ã·ã¹ãã ã«æžã蟌ãŸããå
容ãçµ±åããã«ã¯ãååºŠãæš©éãå¿
èŠã§ãã ç§ã¯ãã ...
- åæåã®é£ããã ç°ãªããã¹ã±ãããµã€ãºã®ãã¹ãã°ã©ã ãèªã¿ãããšããŸãã ç°¡åã«æããŸã-éåäœïŒPostgreSQLïŒãšããžãã¹å
šäœã宣èšãããšãã«ãç®çã®INITCONDã瀺ããŸãã ãã ãããã¹ã±ããã®ãµã€ãºããšã«ãç¬èªã®éèšãå¿
èŠã«ãªããŸãããã®å Žåããæš©å©ãå¿
èŠã§ãã
ããã§ã¯ãããŒãã£ããªãã¯ã«é Œã£ãŠãåæåè¡ïŒãã©ã¯ãŒãïŒãšããŒã¿ãããŠããªã³ããã»ããµãã¹ãªããããã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãªããæåã®è¡ãåãåã£ããšãã«ã³ã³ããã¹ããæ§ç¯ã§ããŸãã
- ããã§ãã説æãããŠããå¶éããã£ãŠããã«ã¹ã¿ã éèšã䜿çšãããšãäœã§ãèšç®ã§ããŸãã
- å°ãªããšãPostgreSQLã§éèšã䞊ååã§ããããšãéèŠã§ãããOracleïŒEnterprise EditionïŒããããå®è¡ã§ããŸãã ãã®ããã«ã¯ãäžéç¶æ
ãã·ãªã¢ã«å/éã·ãªã¢ã«åããæ¹æ³ãåŠç¿ããç°ãªãã¹ããªãŒã ããåä¿¡ããç¶æ
ãããªãŒãºããå¿
èŠããããŸãã
ãŠã£ã³ããŠé¢æ°
ãŠã£ã³ããŠé¢æ°ã¯
SQLïŒ2003æšæºã«ç»å ŽããŸããã çŸæç¹ã§ã¯ãäžèšã®ãã¹ãŠã®ã·ã¹ãã ã§ãµããŒããããŠããŸãã æ¬è³ªçã«ããŠã£ã³ããŠé¢æ°ã¯ãŠãããã䜿çšããäœæ¥ã®æ¡åŒµã§ãã ãããŠããã¡ãããã«ã¹ã¿ã éèšé¢æ°ããŠã£ã³ããŠã³ã³ããã¹ãã§æ©èœããŸãã
æ¡åŒµåã¯ããã§ãã SQLïŒ2003以åã¯ãéèšé¢æ°ã¯ç¹å®ã®ãŠã£ã³ããŠã§æ©èœããŸãããããã¯ãGROUP BYåŒã®ãã£ãŒã«ãå€ã®çµã¿åããã«å¯Ÿå¿ããçµæã»ããå
šäœãŸãã¯ãã®äžéšã®ããããã§ããã ãŠãŒã¶ãŒã¯ãã®ãŠã£ã³ããŠãèªç±ã«æäœã§ããããã«ãªããŸããã
éãã¯ããŠã£ã³ããŠã䜿çšããŠèšç®ãããå€ãå¥ã®åã®åºåã«è¿œå ãããéèšé¢æ°ã䜿çšããŠã¹ããªãŒã å
šäœãæããããå¿
èŠããªãããšã§ãã ãã®ããã1ã€ã®èŠæ±ã§ãããããç¬èªã®ã³ã³ããã¹ãïŒãŠã£ã³ããŠïŒã§è€æ°ã®ãŠã£ã³ããŠéåã䜿çšã§ããŸãã 以åã¯ããã€ãã®éçŽé¢æ°ããããŸãããããããã¯ãã¹ãŠ1ã€ã®ãŠã£ã³ããŠã§æ©èœããŸããã
倧ããªã¹ãããŒã¯
- 以äžïŒïŒ
ãŠã£ã³ããŠã¯çµæã»ããå
šäœã§ãã ã¯ãšãª ' select countïŒ1ïŒfrom Samples 'ã169ãè¿ããšããŸãããã®å Žåã ' select countïŒ1ïŒoverïŒïŒfrom Samples 'ãå®è¡ãããšã169å169åæžã蟌ãŸããåãåŸãããŸãã - ãªãŒããŒïŒããŒãã£ã·ã§ã³ãã€ïŒ
ããã¯GROUP BYã®é¡äŒŒç©ã§ãããå€ã®çµã¿åããããšã«ãéèšé¢æ°ãå®è¡ããããŠã£ã³ããŠãäœæãããŸãã SamplesããŒãã«ã§ã1ã€ã®æŽæ°åãvalã§ãããããŒã¿ã1ã169ã®æ°åã§ãããšããŸãã
次ã«ã ãµã³ãã«ããã¯ãšãª ' select countïŒ1ïŒoverïŒpartition byïŒ12 + valïŒ/ 13ïŒ 'ã¯ãå€13ã169åæžã蟌ãŸããåãè¿ããŸãã
- ãªãŒããŒïŒORDER BYïŒ
PARTITION BYãšçµã¿åãããããšãã§ããã«ãŒãœã«ã®éã«ãŠã£ã³ããŠã®ãµã€ãºãåçã«å€æŽã§ããŸãããã®å ŽåããŠã£ã³ããŠã¯ã°ã«ãŒãã®å
é ããçŸåšã®ã«ãŒãœã«äœçœ®ãŸã§æ¡åŒµãããŸãã ãã®çµæãã°ã«ãŒãã¯éèšåã§åãå€ãååŸãããç¬èªã®å€ãååŸããŸãã 环ç©éé¡ã®èšç®ã«äŸ¿å©ã§ãã ã¯ãšãªçµæ
'Select sumïŒvalïŒoverïŒorder by valïŒfrom Samples 'ã¯ãnçªç®ã®èŠçŽ ã«1ããnãŸã§ã®èªç¶æ°ã®åèšãå«ãŸããåã«ãªããŸãã - ãªãŒããŒïŒè¡ïŒ
ã«ãŒãœã«äœçœ®ãŸãã¯ORDER BYç¯å²ã®éå§/çµäºããéå§ããŠããŠã£ã³ããŠãã¬ãŒã ãå®çŸ©ã§ããŸãã
ããšãã°ãã ... ROWS 1 PRECEDING ... ãã¯ããŠã£ã³ããŠãçŸåšã®è¡ãšãã®åã®1ã§æ§æãããããšãæå³ããŸãã A ... ... 1 FOLLOWINGãš2 FOLLOWING ... 'ã®é-ROWSã¯ãã«ãŒãœã«ã®çŽåŸã®2è¡ã§æ§æãããŠããŸãã
ãã®ã¢ãŒãã®CURRENT ROWã¯ãçŸåšã®ã«ãŒãœã«äœçœ®ã瀺ããŸãã ããšãã°ããçŸåšã®è¡ãšæªãã€ã³ãã®ãã©ããŒã®é ãã¯ãçŸåšã®è¡ããç¯å²ã®çµãããŸã§ãæå³ããŸãã - ãªãŒããŒïŒç¯å²ïŒ
ããã§CURRENT ROWã¯ããŠã£ã³ããŠã®å
é ãšããŠORDER BYããã®ç¯å²ã®å§ãŸããæå³ãããŠã£ã³ããŠã®çµãããšããŠORDER BYã®ç¯å²ã®æåŸã®è¡ãæå³ãããšããç¹ã§ROWSãšç°ãªããŸãã
ç°ãªãã·ã¹ãã ã§ãŠã£ã³ããŠé¢æ°ã䜿çšããããã®æ§æã¯ãããã«ç°ãªããŸãã
äžèšãèŠçŽãããšãSQLã®ããŸããŸãªã¬ããŒãã®æ§ç¯ãåæããéçºè
ãæãäžè¬çãªã±ãŒã¹ã匷調ããæ§æã§å³å¯ã«å
·äœåãããšããå°ãèŠçãªæ°æã¡ãæ®ã£ãŠããŸãã
ã¬ã³ãŒããè¿ã颿°
éèš/ãŠã£ã³ããŠé¢æ°ã®åºåã§ã¯ãçµæã®åè¡ã¯ãçä¿¡ããŒã¿ã¹ããªãŒã ã®ç¹å®ã®ç¯å²ã®è¡ã«å¯Ÿå¿ããŸãã 人çã§ã¯ããã®ãããªéä¿¡ã¯åžžã«ååšãããšã¯éããŸããã
ããšãã°ãå
±åæ£è¡å10X10ãäœæããå¿
èŠããããŸãïŒ
ãã®ããã«ã¯ã672X672ãå¿
èŠã«ãªããŸãïŒã ãã
㯠1ã€ã®ãã¹ã§å®è¡ã§ããŸãããã®ããã10åã®æ°å€ãã©ã¡ãŒã¿ãŒã䜿çšããŠäœæããéèšé¢æ°ãå®è¡ããŸãã 圌女ã®äœæ¥ã®çµæã¯ã10åã®å€ãããªã10è¡ã®ã¬ã³ãŒãã»ããã§ããåãããªãã¯ã¹èŠçŽ ã¯ãå
¥åã¹ããªãŒã ã®ãã¹ãŠã®è¡ãåç
§ããŸãïŒããã€ãããã«é¢ä¿ãªãïŒã
ããšãã°ãPostgreSQlã§ã¯ã颿°ãã2次å
é
åãè¿ã
ããšãã§ããŸãïŒäŸïŒ 'ARRAY [[1,2]ã[3,4]'ïŒã ãŸãã¯ããããªãã¯ã¹ãè¡ã«ã·ãªã¢ã«åããŸãã
è¯ãããšã§ããããã®ã¢ãããŒãã§åãå
¥ãããããã¬ãŒã ã¯ãŒã¯ã§çµæã®ãµã€ãºãç¶æããããšã¯åžžã«å¯èœãšã¯éããŸããã
åæ
çãªäœè«ããšãã°ãç§ãã¡ã®ã¿ã¹ã¯ã¯ãžãªã¡ããªãäžè¬åããããšã§ãã
ãžãªã¡ããªã®ãµã€ãºã¯äžæã§ãããæ°åäžãã€ã³ãã®ãŠãŒã©ã·ã¢ã®æµ·å²žç·ã§ããå¯èœæ§ããããŸãã ãŸãã¯ãã®éã«ãéåžžã«ç²ããžãªã¡ããªããããããã¹ãã©ã€ã³ã§æ»ããã«ããå¿
èŠããããŸãã ãã©ã¡ãŒã¿ãéçŽã«æž¡ãããã¯ãã«ãŸãã¯æååã§ã¯ãªãããŒã¿ã¹ããªãŒã ãååŸããããšæããŸãã
ãã¡ãããããªãã¯åé¡ãã¯ããã«ãã§ãããããŠãããšèšãããšãã§ããŸãã誰ããããããªããDBMSã®ãžãªã¡ããªã¯ç¹å¥ãªæ¹æ³ã§ä¿åããããžãªã¡ããªãåŠçããããã®ç¹å¥ãªããã°ã©ã ããããŸã...
å®éã1ã€ã®ãã€ã³ããç§»åããããšã§blobå
šäœãæžãæããå¿
èŠããªããšããçç±ã ãã§ããžãªã¡ããªãéåžžã®ããŒãã«ã«ãã€ã³ãåäœã§ä¿åãããšéåžžã«äŸ¿å©ã§ãã DBMSã®ããããå Žæã§ç©ºéããŒã¿ããªãŒã¯ãããåã¯ãããšãã°
ArcSDEã«ãããŸãã ã
ãžãªã¡ããªBLOBã®å¹³åãµã€ãºãããŒãžãµã€ãºãè¶
ãããšããã«ããã€ã³ããçŽæ¥æäœããæ¹ãããæçã«ãªããŸãã ãã€ã³ããããŒã§æäœããç©ççãªæ©äŒããã£ãå Žåãããããå±¥æŽãã€ãŒã«ãåã³å転ããŸãã
æåŸã«çµæå
šäœãåæã«ååŸããããããå
±åæ£è¡åã¯ãŸã å
¥åã¹ããªãŒã ãšåºåã¹ããªãŒã éã®éåæåã®éåžžã«è¯ãäŸã§ã¯ãããŸããã ãœãŒã¹ããŒã¿ã¹ããªãŒã ãåŠç/å§çž®ããããšããŸãã åæã«
- 倧éã®ããŒã¿ãããããããã¯ã€ã³ããã¯ã¹ãªãã®ãããŒããã«ãããŸããå®éããããã¯åã«ãè¿
éã«ããã£ã¹ã¯ã«æžã蟌ãŸããŸããã
- æ¯èŒçå°æ°ã®ç°ãªãã«ããŽãªã«åé¡ããå¿
èŠããããŸã
- ã«ããŽãªå
ã§ãæéééã®å¹³åãå¹³åã®ã¿ãæž¬å®æ°ãšåæ£ã®ã¿ãä¿å
- ããããã¹ãŠãè¿
éã«è¡ãå¿
èŠããããŸã
ãªãã·ã§ã³ã¯äœã§ããïŒ
- SQLå
ã§ã¯ãæééé/ã«ããŽãªã§ãœãŒãããå¿
èŠããããŸãããããã¯æåŸã®ãã€ã³ããšççŸããŸãã
- ããŒã¿ãæ¢ã«æéã§ãœãŒããããŠããïŒå®éã«ã¯ä¿èšŒãããŠããªãïŒããã®äºå®ãSQLããã»ããµã«äŒããããšãã§ããå Žåã¯ããŠã£ã³ããŠé¢æ°ãš1ã€ã®ãã¹ã§è¡ãããšãã§ããŸãã
- ããããã¹ãŠè¡ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã PL / SQLããŸãã¯ããå€ãã®å ŽåãC / C ++ã§å€ãã®ããŒã¿ãããããšãèãããšã
- ã¬ã³ãŒããè¿ã颿°ã ãããã圌ãã¯ç§ãã¡ãå©ããããšãã§ããŸãã
A.4ãã®è©³çް ããã«ã¯ãäžæããŒãã«ãšãã€ãã©ã€ã³é¢æ°ã®2ã€ã®ã¡ã«ããºã ããããŸãã
- ã³ã³ãã¢æ©èœã
ãã®ã¡ã«ããºã ã¯OracleïŒ2001幎9i以éïŒã«ç»å Žããã¬ã³ãŒãã»ãããè¿ã颿°ãããŒã¿ãèç©ãããå¿
èŠã«å¿ããŠèšç®ã§ããããã«ããŸãïŒãã€ãçµç±ã§æ¥ç¶ããã2ã€ã®ããã»ã¹ã®stdoutãšstdinã®åæã«äŒŒãŠããŸãïŒã
ã€ãŸã ãã€ãã©ã€ã³é¢æ°ã®çµæã¯ããã®é¢æ°ãçµäºããåã«åŠçãéå§ããå ŽåããããŸãã ãã®ããã«ã¯ã颿°ã®å®çŸ©ã§èšãã ãã§ååã§ã
FUNCTION f_trans(p refcur_t) RETURN outrecset PIPELINED IS âŠ
æ¬äœã«çµæè¡ãç»é²ããŸã
LOOP ⊠out_rec.var_char1 := in_rec.email; out_rec.var_char2 := in_rec.phone_number; PIPE ROW(out_rec); ⊠END LOOP;
ãã®çµæã
SELECT * FROM TABLE( refcur_pkg.f_trans( CURSOR(SELECT * FROM employees WHERE department_id = 60)));
ãã€ãã©ã€ã³é¢æ°ãããå Žåãã«ã¹ã¿ã éèšã¯å¿
èŠãããŸããã
ãªã©ã¯ã«ããã©ããŒïŒ
å°ãåïŒ2014ïŒããã€ãã©ã€ã³é¢æ°ã¯DB2ïŒIBM i 7.1 TR9ãi 7.2 TR1ïŒã«ãç»å ŽããŸããã - äžæããŒãã«ã
ããããã MS SQLã§ãPostgreSQLã§ããéçŽé¢æ°ããã«ãŒãœã«ãè¿ãããšã¯æããã«äžå¯èœã§ãã
ããŠããã€ãã©ã€ã³é¢æ°ãšåæ§ã«ãã«ãŒãœã«ããã©ã¡ãŒã¿ãŒãšããŠååŸããåŠçããäžæããŒãã«ã«è¿œå ããŠãã«ãŒãœã«ãæ»ããŸãããã
ãã ããMS SQLã§ã¯ããã©ã¡ãŒã¿ã«ãã£ãŠã¹ãã¢ãããã·ãŒãžã£ã«ã«ãŒãœã«ãæž¡ãããšã¯ã§ããŸãã ;ããã·ãŒãžã£ã§ã«ãŒãœã«ãäœæããåºåãéããŠãã©ã¡ãŒã¿ãè¿ãããšã®ã¿ãå¯èœã§ãã PostgreSQL ã«ã€ããŠãåãããšãèšããŸãã
ããŠã倧äžå€«ãã«ãŒãœã«ãéããŠæžç®ããå€ãåŠçããçµæãèšç®ããäžæããŒãã«ã«è¿œå ããŠãã«ãŒãœã«ãã¬ã³ããªã³ã°ããŸãã
ãŸãã¯ãããã«ç°¡åã«ãã¯ãšãªçµæã1ã€ã®äžæããŒãã«ã«è¿œå ããŠåŠçããã«ãŒãœã«ãä»ããŠå¥ã®äžæããŒãã«ã«çµæãè¿ããŸãã
äœãšèšã£ãŠãããã ãŸãããããŠæãéèŠãªããšã¯ãã«ãŒãœã«ãä»ããããŒã¿ã®èªã¿åãã¯ãã¹ããªãŒã ã§ã®åŠçãããé
ãããšã§ãã æ¬¡ã«ããªãSQLããã»ããµãå¿
èŠãªã®ããã«ãŒãœã«ã䜿çšããŠããŒãã«ãèªã¿åããæã§äžæããŒãã«ãäœæããã«ãŒãå
ã«çµåããžãã¯ãäœæããŸããã... C / C ++ã§ã®ã¢ã»ã³ãã©æ¿å
¥ã®ããã§ãã
ãããã£ãŠãã¬ã³ãŒãã»ãããè¿ã颿°ã«é¢ãã質åãæ€èšããçµæãçµè«ã«éããŸããã
- ããã§ã¯ãã«ã¹ã¿ã éèšã¯ããŸã圹ã«ç«ã¡ãŸããã
- ãããã«ãããããŒã¿ããŒã¹ã«ããã€ãã®ãªããžã§ã¯ããäœæããå¿
èŠããããŸãã 颿°ã§ããäžæããŒãã«ã§ããã å°ãªããšããé©åãªæš©å©ãå¿
èŠã§ãã ãããŠãããã€ãã®æ°åãåŠçãããã ãã§ãã
- ããã«ããããããã説æãããŠããå¶éããã£ãŠããããŸããšã¬ã¬ã³ãã§ã¯ãªãå ŽåããããŸããããã®æ¹æ³ã䜿çšããŠåé¡ã解決ã§ããŸãã
ä»ã«äœ
å®éãåé¡ã解決ããæ©äŒããã§ã«ããå Žåãèè
ã«ã¯ä»ã«äœãå¿
èŠã§ããïŒ
å®éããã¥ãŒãªã³ã°ãã·ã³ã¯äœã§ãèšç®ã§ããŸãããããã¯éåžžã«éããªããããŸã䟿å©ã§ã¯ãããŸããã
次ã®ããã«èŠä»¶ãçå®ããŸãã
- æ®ãïŒéžæãæåœ±ãªã©ïŒãšåçã«äœ¿çšã§ããé¢ä¿æŒç®åã§ããå¿
èŠããããŸãã
- ããããŒã¿ã¹ããªãŒã ãå¥ã®ããŒã¿ã¹ããªãŒã ã«å€æããæŒç®åã§ãªããã°ãªããŸãã
- å
¥åã¹ããªãŒã ãšåºåã¹ããªãŒã ã®éã«åæã¯ãããŸãã
- æŒç®å宣èšã¯ãåºåã¹ããªãŒã ã®æ§é ãå®çŸ©ããŸã
- æŒç®åã¯ãåçã«åæåããæ©èœãæã£ãŠããŸãïŒé¢æ°ã®åœ¢åŒã§ãããæ£ç¢ºã«ã¯ãã®æ¬äœã§ãæŒç®åã®å®çŸ©ã§çŽæ¥æå®ãããŸãïŒ
- 颿°ã®åœ¢åŒã®ãã¹ãã©ã¯ã¿ïŒ...ïŒ
- å
¥åã¹ããªãŒã ããæ°ããè¡ãååŸããããã³ã«åŒã³åºããã颿°ïŒ...ïŒ
- ãªãã¬ãŒã¿ãŒã«ã¯å®è¡ã³ã³ããã¹ãããããŸã-äœæ¥ã«å¿
èŠãªãŠãŒã¶ãŒå®çŸ©ã®å€æ°ããã³/ãŸãã¯ã³ã¬ã¯ã·ã§ã³ã®ã»ãã
- ãã®æŒç®åãå®è¡ããã«ã¯ãããŒã¿ããŒã¹ãªããžã§ã¯ããäœæããå¿
èŠã¯ãããŸããã远å ã®æš©éã¯å¿
èŠãããŸãã
- ä»äºã«å¿
èŠãªãã®ã¯ãã¹ãŠã1ã€ã®å Žæã1ã€ã®èšèªã§å®çŸ©ãããŸãã
ãããããã
ãèè
ã¯ãå®è£
ããã
TTM /ãã¥ãŒããªã¢ã«Dã®ãµãã»ããã®èªäœããã»ããµãæ¡åŒµããæŒç®åãäœæããŸãã
ã çŸåšãSQLã«ã€ããŠãåãèãæ¹ãææ¡ãããŠããŸãã
èŠåãã䟡å€ããããŸããããã§SQLãçµäºããå³èãå§ãŸããŸãã æ§æã¯å
ã®ãã®ã®ãŸãŸã§ãããæçµçã«ã¯ä»»æã®æ§æç³ãååšããå¯èœæ§ããããŸãããããã¯æ¬è³ªã倿ŽããŸããã
ãããã£ãŠã
åãæŒç®åã¯
- åºåãã£ãŒã«ããšãã®ã¿ã€ãã®ãªã¹ããå«ãããããŒã
ååºåïŒããã³å
¥åïŒãã£ãŒã«ãã¯ããŒã«ã«å€æ°ã§ãã
äŸïŒ â chew {â var1â floatãâ var2â integer}âã¯ãåºåã¹ããªãŒã ã«æµ®åå°æ°ç¹ãšæŽæ°ã®2ã€ã®åãããããšãæå³ããŸã - ããã£-çŸæç¹ã§ã®ã€ãã³ãã®ã³ãŒã«ããã¯ã®ãªã¹ã-ã¹ããªãŒã ã®éå§ãã¹ããªãŒã ã®çµäºãã©ã€ã³ã æ§æäžã颿°ã¯PL / SQLã«è¿ãã§ãã äºåå®çŸ©é¢æ°__interrupt ïŒïŒã¯PIPEã«é¡äŒŒããŠãããåºååã«å¯Ÿå¿ãã倿°ããå€ãååŸããåºåã¹ããªãŒã ã«é
眮ããŸãã åºåã¹ããªãŒã ã®ãããã¡ããªãŒããŒãããŒãããšããã³ãã©ãŒã®äœæ¥ãäžæåæ¢ããã¹ããªãŒã ã®åä¿¡åŽã®äœæ¥ãéå§ãããŸãã
äŸïŒãããã¯ãinitã{var1ïŒ= 0; var2ïŒ= -1; } "
äŸã衚瀺ããæãç°¡åãªæ¹æ³ã
- éèšé¢æ°SUMã®é¡äŒŒç©ã
ããã°ã£ãŠããŸãããããã¯åãªãäŸã§ãã
ããã€ãã®æ°åã远å ããããã«Cããã°ã©ã ãäœæããå¿
èŠã¯ãããŸããã - SUM + AVG
ããã§ã¯ãåèšã1åããçºçããªããšããäºå®ã«æ³šç®ããŸãã - SUM + GROUP BY
- ROW_NUMBERïŒïŒOVERïŒïŒ
ãã®ã¢ãããŒããéåžžã®æ¹æ³ã§æ ¹æ¬çã«éæã§ããªãçµæãããããäŸãæäŸããããšã¯å¯èœã§ããïŒ ãããããããŸãã
ããŒã¿ãã»ãšãã©ãœãŒããããŠããå ŽåããããŸãã å®å
šã«äžŠã¹æ¿ããããŠããå ŽåããããŸããã確å®ã«ã¯ããããŸããã
äžèšã®äŸïŒããŒã¿ã¹ããªãŒã å§çž®ïŒã§ãããŒã¿ã¯ããŸããŸãªãœãŒã¹ããã®ãã®ã§ãããããŸããŸãªçç±ã§ãããã«æ··åšããå¯èœæ§ããããšããŸãã ã€ãŸã
ã¿ã€ã ã¹ã¿ã³ãT1ãæã€1ã€ã®ãœãŒã¹ããã®è¡ã¯ãæéT2ãæã€å¥ã®ãœãŒã¹ããã®è¡ã®åŸã«ããŒã¿ããŒã¹ã«ååšã§ããŸãããT1 <T2ã§ããT1ãšT2ã®å·®ãç¹å®ã®ïŒããããªïŒå®æ°ã決ããŠè¶
ããªãããšãä¿èšŒãããšããŠããããã§ïŒåŸæ¥ã®æ¹æ³ã§ïŒãœãŒãããã«ã¯ã§ããŸããããã ããææ¡ãããã¢ãããŒãã䜿çšãããšãå
¥åã¹ããªãŒã ããããã¡ãªã³ã°ãããçŸåšã®æéééã®ããŒã¿ãåŠçãããã®ã¯ãå
¥åãééã®å³å¢çãŸã§ã«å°ãªããšãäžå®ã®å®æ°ãè¶
ããã¿ã€ã ã¹ã¿ã³ããæã€è¡ãåä¿¡ããåŸã®ã¿ã§ããããã«ã¯éåžžã«éèŠãªãã€ã³ãããããŸããããŒã¿ãã»ãšãã©ãœãŒããããŠããããšãç¥ã£ãŠããã®ã¯ç§ãã¡ã ãã§ããç§ãã¡ã ãããã®å®æ°ã®å€ãç¥ã£ãŠããŸãããã®å®æ°ã¯ããã®åé¡ã«ã®ã¿ç¹åŸŽçã§ããããããããã®å®éšã«ã®ã¿ç¹åŸŽçã§ãããããŠããã®ããã¯ãèªåã®è²¬ä»»ã§äœ¿çšããŠããœãŒããåé¿ããŸããã¿ã¹ã¯ã«é¢ããæšæºçãªç¥èã¯ãSQLããã»ããµã«äŒããããã®æšæºçãªæ¹æ³ã§ã¯ååšãããæ³åããããšã¯å°é£ã§ãããŸããã©ã ã颿°ã䜿çšãããšãSQLããã»ããµã«ãå¿
èŠãªå Žæã§å¿
èŠãªããšãæ£ç¢ºã«å®è¡ãããæ®éçãªæ¹æ³ãæäŸãããŸãããããã«
ææ¡ãããèšèšã¯ãå®è£
ããã®ãããã»ã©é£ãããªãããã§ãããããã®å Žåã§ããæå¹ãªPL / SQLã䜿çšããŸããã¢ã€ãã¢èªäœã¯ã·ã³ãã«ã§çŽæçã§ãæ°ãããšã³ãã£ãã£ãèšèªã«è¿œå ããŸãããããã¯åäžã®ãŠãããã§ãããå¿
èŠã«å¿ããŠãéçŽé¢æ°ãšãŠã£ã³ããŠé¢æ°GROUP BYã眮ãæããŸããåŸæ¥ã®SQLããã»ããµã§ã¯æ¹æ³ããªãå Žåã«ããœãŒããªãã§å®è¡ã§ããã¡ã«ããºã ãããããæãéèŠãªã®ã¯ãããŒã¿ã䜿çšããŠæãå¿
èŠãªæ¹æ³ã§ã奜ããªããšãèªç±ã«è¡ããã¡ã«ããºã ã§ããPSïŒèšäºã®æºåã«åå ããŠãããDorofei Proleskovskyã«æè¬ããŸãã