
ç§ãã¡ã®çµç¹ãé·ãéãç·å¯ã«Oracleã䜿çšããŠããã®ã¯å¶ç¶ã§ãã ç§èªèº«ã¯ã第6ããŒãžã§ã³ã®æã«OracleããŒã¿ããŒã¹ã«åºäŒããŸãããããã以æ¥ãäžå¿«æã¯ãããŸããã§ããã ãã¹ãŠãåžå Žé¢ä¿ãå°ç¡ãã«ããŸããã æè¿ã顧客ãç¡æã®
DBMSã䜿çšããŠããå Žåã顧客ãç§ãã¡ã®ãããžã§ã¯ãããã奜æçã«èŠãŠããããšã«æ°ä»ãå§ããŸããã ãããã®ãããžã§ã¯ãã®1ã€ãç§»æ€ããããšã¯ç§ã®è©±ã«ãªããŸã...
ç¡æã®DBMSãéžæããããšã¯ãç§ã«ãšã£ãŠé·ãå°é£ãªåé¡ã§ããããæçµçã«ã¯ãããç¥ããã2ã€ã®éžæè¢ã«ãªããŸããã
PostgreSQLã¯ãã®è±å¯ãªïŒãããŠãŸã é²åããŠããïŒæ©èœã§é
åçã§ãããã
MySQLã¯ããã©ãŒãã³ã¹ãšããŒãã管çã«é
äºãããŸããã Oracleãç§ãã¡ãçããããç§ãã¡å
šå¡ã
SQLãç¥ã£ãŠããŠæããã®ã§ã倿°ã®æ°ãã
NoSQLã®äºçš®ã¯æºæ±ºåã§ãèœã¡ãŸããã
PostgreSQLãšMySQLã®äž¡æ¹ãæ¥ãã§æ¯èŒããããå®å
šã«æ£åœãªå€æãäžãããããã«ãPostgreSQLãšMySQLã®äž¡æ¹ãçãçããšæããæ©äŒãäžãã1ã€ã®ã¿ããŒãããã²ãŒã ããªããã°ãã©ã®DBMSã«è¡ãçãããèšãã®ã¯é£ããã§ãã ãã¡ãããæ©èœã«å ããŠãããã©ãŒãã³ã¹ãæ¯èŒããŸããã 詳现ã¯èª¬æããŸãããããè¶³å Žãã®éèŠãªãã€ã³ãã®1ã€ã¯ãããŒã¿ããŒã¹ã«å€§éã®ã¬ã³ãŒããè¿
éãã€ç¢ºå®ã«æ¿å
¥ã§ããããšïŒ
ACID ãã¯ãïŒã§ãã ãã®äž»é¡ã«ã€ããŠãã¹ãã宿œãããŸããã
瞊軞ã¯ãããŒã¿ããŒã¹ã«æ¯ç§ä¿åãããåºå®é·ã®ã¬ã³ãŒãæ°ã瀺ããŸãã ãå¡äŸãã®æ°åã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®ãµã€ãºãæå³ããŸãã ããã§ã¯ãMySQLããçŸç¶ã®ãŸãŸã枬å®ãããPostgreSQLã¯éåžžã®
ããŒãã£ã·ã§ã³ããŒãã«ãš
ãããªã¢ã©ã€ãºããã¥ãŒã§åäœããæ©èœãæäŸããå°ããª
ã¹ããªããã䜿çšããŠããããšã«æ³šæããŠãã ããã ãä¿¡é Œæ§ã®é«ããã¹ãã¬ãŒãžã«é¢ãããã®ã§ãããããã°ã©ãäžã®
MyISAMã¯ã䜿çšããããŒããŠã§ã¢ã®æãŸããããã©ãŒãã³ã¹ã®ãçè«äžã®æå€§å€ããã©ãã«ããã®ããå®å
šã«çè§£ããããã ãã«è¡šç€ºãããŸãã
ãã¹ãèªäœã¯é·æéã«ããã£ãŠè¡ãããå©çšå¯èœãªããŒããŠã§ã¢äžã®
SSDã®èãããããªãã£ããããã°ã©ãã«ç€ºããã絶察å€ã¯å®èª¬ãšããŠæ±ãããã¹ãã§ã¯ãããŸããã ãã¡ãããããŒã¿ãããã«é«éã«ä¿åã§ããŸãããïŒã»ãŒïŒåãæ¡ä»¶ã§åäœããããŸããŸãªDBMSã®ããã©ãŒãã³ã¹æ¯ã«èå³ããããŸããã PostgreSQLã¯ãããŒãã£ã·ã§ã³ããªã¬ãŒã«ãã£ãŠå§è¿«ãããŠããŠãã
InnoDBã䜿çšããŠMySQLãšã»ãŒåãé床ã§åäœããå€§èŠæš¡ãªãã©ã³ã¶ã¯ã·ã§ã³ïŒ1000ã¬ã³ãŒã以äžïŒã§MyISAMã«è¿œãã€ãå§ããããšã«é©ããŸããã
ç°¡åã«æšæž¬ã§ããããã«ãäžèšã®ã°ã©ãã¯ã€ãã«PostgreSQLã«åãæ¿ããã¹ãã ãšç¢ºä¿¡ããŸããã ãªãŒããŒã©ã€ãåã¿ã€ãïŒæ°å€ãšæŽæ°ã®æ°å€ãvarcharãšããã¹ãã®varchar2ãªã©ïŒã䜿çšããŠããŒãã«ãåäœæããã®ã¯ç°¡åã§ããã
XMLãš
XSLTã¯ããŒã¿ã®ç§»è¡ãæ¯æŽããŸããã
XMLã®å©ç¹ã«ã€ããŠå³å¯ã«èšãã°ãXMLã¯ä»¥åã«ã圹ç«ã¡ãŸããã åœç€Ÿã®è£œåã®ç¹åŸŽã®1ã€ã¯ãéåžžã®è¡šåœ¢åŒããŒã¿ã®åœ¢åŒã§ããžãã¹ãšã³ãã£ãã£ã®èª¬æãããŒã¿ããŒã¹ã«ä¿åããããšã§ãïŒããã¯éåžžã«ãªãªãžãã«ã§ã¯ãªããšæããŸãïŒã 2ã€ã®ç°ãªãã¹ããŒãã®ãã®ãããªãã¡ã¿ããŒã¿ããæ¯èŒããã®ã¯ãXMLèšè¿°ã«ã¢ããããŒãããå°ããªããã±ãŒãžãäœæãããŸã§ã¯å€§ããªé çã®çš®ã§ããã 説æå
ã®ã¿ã°ãäžŠã¹æ¿ããããšã«ãããéåžžã®ããã¹ããã¡ã€ã«ãšããŠã¿ã°ãæ¯èŒããããšãå¯èœã«ãªããŸããã XSLTã¯ãèšè¿°ãã¡ã€ã«ããSQLã¹ã¯ãªãããèªåçã«çæããããšã§ç¶æ³ãè£å®ããŸããã
Oracleçšã«äœæããããã¹ãŠã®SQLã³ãŒãã®æäœæ§ã確ä¿ããããã«æ®ã£ãŠããŸãã ãªã¯ãšã¹ãã®ã»ãšãã©ãæ©èœããäžéšã¯ããããªå€èгã®å€æŽåŸã«æ©èœããŸããã ãŸãã
ãã¥ã¢ã«ããŒãã«ãäœæããŸããã
create table dual ( x varchar(1) not null ); insert into dual(x) values('x');
ãããªãã§ã¯ã§ããªãã£ãããã§ã¯ãããŸããããã¯ãšãªã§é »ç¹ã«äœ¿çšãããŠãããããæžãæããã®ã¯å®çšçã§ã¯ãããŸããã§ããã PostgreSQLããæºè¶³ããããã«ã¯ãã¯ãšãªã«ããã«å³å¯ãã远å ããå¿
èŠããããŸããã
OracleããŒãžã§ã³ select b.id id, b.name name from ( select list_value from acme_obj_list_value group by list_value ), acme_list_value b where b.id = list_value
PostgreSQLããŒãžã§ã³ select b.id id, b.name as name from ( select list_value from acme_obj_list_value group by list_value ) a, acme_list_value b where b.id = a.list_value
ãã¹ãŠã®
ã€ã³ã©ã€ã³ãã¥ãŒã«ã¯ååã
ä»ããå¿
èŠããããåãšã€ãªã¢ã¹ã®åã«ã
as ãããŒã¯ãŒãã䜿çšããããšã匷ããå§ãããŸãã ã»ãšãã©ã®åã§ã¯çç¥ã§ããŸããããnameãããvalueããªã©ã®ååã䜿çšãããšããšã©ãŒãçºçããŸãã æ¬¡ã®ã¹ãããã¯ããã©ãããã©ãŒã åºæã®ã³ãŒãããOracleãšPostgreSQLã®äž¡æ¹ã§ãµããŒããããŠããé©åãªæ§é ã«çœ®ãæããããšã§ããã ç§ãã¡ã¯
nvlãš
ãã³ãŒã ãããã³
å€éšæ¥ç¶ã®æä»£é
ãã®æ§æã«ã€ããŠè©±ããŠããŸãã æåã®2ã€ã¯ãæšæºã®ïŒããæè»ãªïŒ
åäœãš
caseã«ç°¡åã«çœ®ãæããããŸããå€éšæ¥ç¶ã䜿çšããå Žåã¯ããªã¯ãšã¹ããæžãæããå¿
èŠããããŸãã
OracleããŒãžã§ã³ select ot.name, mv.str_value from acme_object o, acme_meta_value mv, acme_obj_type ot where o.id = :object_id and ot.id = o.obj_type_id and mv.owner_id(+) = ot.id and mv.param_id(+) = 9520
PostgreSQLããŒãžã§ã³ select ot.name, mv.str_value from acme_object o left join acme_meta_value mv on (mv.owner_id = ot.id and mv.param_id = 9520) inner join acme_obj_type ot on (ot.id = o.obj_type_id) where o.id = :object_id
ANSI Joinã¯ããŒãžã§ã³9以éOracle
ã§ãµããŒããããŠãããç§ã®æèŠã§ã¯
ïŒ+ïŒã䜿çšããåŸæ¥ã®ããŒãžã§ã³ããã䟿å©ã§ãïŒç°¡æœã§ã¯ãããŸããã
ïŒ ã 1ã€ã®SQLã¯ãšãªã§ç°ãªã圢åŒã®çµåãçµã¿åãããããšããªãã§ãã ããã å€éšçµåã䜿çšããå Žåãå
éšçµåã§ã¯ã
fromå¥ã«ã³ã³ãã䜿çšããŠããŒãã«ããªã¹ã
ããã®ã§ã¯ãªãã
å
éšçµåã䜿çšããã®ãéåžžã«è«ççã§ãã
SQLã³ãŒãã®ç§»è¡äœæ¥ã®å€§éšåã¯ãéå±€ã¯ãšãªã®æžãæãã«é¢é£ããŠããããšã倿ããŸããã PostgreSQLã®
connect byãšãããã¬ãŒãºã¯åœç¶ãµããŒã
ãããŠããŸããã äžæ¹ã次ã®ã¿ã€ãã®ãªã¯ãšã¹ãã倿°ãããŸããã
éå±€ã¯ãšãªã®äŸ select t.id as value from acme_object t, acme_obj_ref_value rv where rv.object_id = t.id and rv.attr_id = 220102 and rv.ref_value = :object_id and t.obj_type_id in ( select ot.id from acme_obj_type ot connect by prior ot.id = ot.parent_id start with ot.id = 200335 )
CTEã䜿çšããŠãã®ãããªèŠæ±ãç°¡åã«æžãæããŠãããã©ãããã©ãŒã ã«äŸåããããšã¯ã§ããŸããã OracleïŒããŒãžã§ã³11.2以éïŒ
ã¯ååž°ã¯ãšãªã
ãµããŒãããŠããŸããããã®æ§æã¯
PostgreSQLã§äœ¿çšãããŠ
ãããã®ãšã¯ç°ãªã
ãŸã ã ç¹ã«ãPostgreSQLã§ã¯ãååž°ããŒã¯ãŒãã®äœ¿çšã¯å¿
é ã§ãããOracleã¯ãçè§£ããŸãããã 幞ããªããšã«ãã»ãšãã©ã®å ŽåãèŠæ±ã®éå±€éšåã¯
ãã¥ãŒã§ãé衚瀺ãã§ããã
OracleããŒãžã§ã³ create or replace view acme_arm(id) as select ot.id from acme_obj_type ot connect by prior ot.id = ot.parent_id start with ot.id = 200335
PostgreSQLããŒãžã§ã³ create or replace view acme_arm(id) as with recursive t(id) as ( select id from acme_obj_type where id = 200335 union all select a.id from acme_obj_type a inner join t on (t.id = a.parent_id) ) select id from t
ããŒãžã¹ããŒãã¡ã³ãã®æžãæãã¯ããããäžå¯è§£ãã§ããããšã倿ããŸããïŒæ®å¿µãªãããéå±€ã¯ãšãªã»ã©é »ç¹ã«ã¯äœ¿çšãããŸããã§ããïŒã PostgreSQLã¯ãã®ã¹ããŒãã¡ã³ãããµããŒãããŠããŸãããã
æŽæ°ã¹ããŒãã¡ã³ãã§ã®
fromããã³
returnãã¬ãŒãºã®äœ¿çšããµããŒãããŠããŸããåŸè
ã¯ã
withãã¬ãŒãºã§äœ¿çšã§ããããã«ãå®å
šãªçµæã»ããïŒ
selectã¹ããŒãã¡ã³ããšåæ§ïŒãè¿ã
ãŸã ã ããã«çœ®ããŠãããŸãã
OracleããŒãžã§ã³ merge into acme_obj_value d using ( select object_id from acme_state_tmp ) s on (d.object_id = s.object_id) when matched then update set d.date_value = least(l_dt, d.date_value) when not matched then insert (d.id, d.object_id, d.date_value) values (acme_param_sequence.nextval, s.object_id, l_dt)
PostgreSQLããŒãžã§ã³ with s as ( select object_id from acme_state_tmp ), upd as ( update acme_obj_value set date_value = least(l_dt, d.date_value) from s where acme_obj_value.object_id = s.object_id returning acme_obj_value.object_id ) insert into acme_obj_value(id, object_id, date_value) select nextval('acme_param_sequence'), s.object_id, l_dt from s where s.object_id not in (select object_id from upd)
ãã®äŸã§ã¯ãPostgreSQLã§ã®
ã·ãŒã±ã³ã¹ã®æäœãOracleã§æ¡çšãããŠãããã®ãšã¯ç°ãªãããšã«æ°ä»ãã§ãããã ãã¡ãããOracleã§ã¯ãPostgreSQLã®ã·ãŒã±ã³ã¹ããå€ãåãåã颿°ãšåæ§ã®é¢æ°ãå®çŸ©ã§ããŸããããOracleã³ãŒãïŒããã³Javaã³ãŒãïŒã®æžãæããé¿ããããšæããŸããã ããã«ããã®ã¢ãããŒãã¯è¿œå ã®ãªãŒããŒãããã«é¢é£ä»ããããšãã§ããŸãã
å€ãã®åã³ãä»äºã
æ¥ä»ãšæéãšãšãã«ãããããŸã
ã ã å®éãOracleã§åºã䜿çšãããŠãã
æ¥ä»åã¯ããã®å€ãåŠçããéã«å€å°ã®ããããæããŠããŸãã ãã®ãããªå€ã¯æ°å€ã§ãããæŽæ°éšã¯ãéæ³ã®ãæ¥ä»ããçµéããæ¥æ°ã決å®ããå°æ°éšã¯æå€§1ç§ãŸã§ã®æéãæ±ºå®ãããšæ³å®ã§ããŸãã ïŒOracleã®ã»ãšãã©ã®æ©èœãšåæ§ã«ïŒããçšåºŠæ
£ãããšãããã¯éåžžã«äŸ¿å©ã§ãããPostgreSQLã¯ããŒã¿åã«é¢ããŠã¯ããã«å³å¯ã§ãã
date '2001-09-28' + interval '1 hour'
ãããã£ãŠãäžå®ã®ééãæ¥ä»ã«è¿œå ã§ããŸããã倿°å€ã远å ããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒ æ±ããããŠãã衚çŸã¯ãŸã£ããæããã§ã¯ãããŸããã
date '2001-09-28' + (to_char(p_hours, '99') || ' hour')::interval
'
hour 'ã®åã®è¡ã«ã¹ããŒã¹ãå¿
èŠã§ãïŒ ãŸããPostgreSQLã®å³å¯æ§ã¯ãæ°å€ããæååãžã®å€æã«ãé©çšãããããšã«æ³šæããŠãã ããïŒãã¡ãããã®éãå¯èœã§ãïŒã ãã¹ã¯ã¯ã9ã€ã ãã§æ§æãããŠããå Žåã§ãå¿
èŠã§ãã Oracleã§ã®äœæ¥ã«æ
£ããŠããæé»ã®å€æã¯æ©èœããŸããã
æ®ãã®ãªã¯ãšã¹ãã¯ããã»ã©æ ¹æ¬çãªå€æŽãåããŠããŸããã
Oracleãš
PostgreSQLã®å¯Ÿå¿ãã颿°ã®å€èгãç°ãªããããæååãæäœãããã¹ãŠã®ã³ãŒãã«ã¯æ¹èšãå¿
èŠã§ãã ãŸã æ®ã£ãŠãã
rownumåã¯ããŠã£ã³ããŠ
row_numberïŒïŒã«çœ®ãæããå¿
èŠããããŸããã 衚瀺ãããè¡æ°ãå¶éããããã«rownumæ¡ä»¶ã䜿çšãããå ŽåãèŠæ±ã¯ãã¬ãŒãº
limitã䜿çšããŠæžãæããããŸããã
ããŒãã«é¢æ°ã«ã€ããŠã話ãã¹ãã§ãã
Oracleãš
PostgreSQLã®äž¡æ¹ã«ãã
ãŸã ã ãã¡ããå®è£
ã¯ç°ãªããŸãããSQLã¯ãšãªããã¢ã¯ã»ã¹ããæ¹æ³ã¯äŒŒãŠããŸãã æ®å¿µãªãããååž°CTEã®å Žåã®ããã«ããã¹ãŠã1ã€ã®ããŒã¯ãŒãã®ååšãå°ç¡ãã«ããŸãã
OracleããŒãžã§ã³ select * from table(acme_table_fuction(...))
PostgreSQLããŒãžã§ã³ select * from acme_table_fuction(...)
ããã±ãŒãžãæ±ãããšã¯æ®ã£ãŠã
ãŸã ã PostgreSQLã«ã¯ãã®ãããªæŠå¿µã¯ãããŸãããã詳ãã調ã¹ãŠã¿ããšãå®éã«ã¯å¿
èŠãªãããšãããããŸãã å®éãOracleã®ããã±ãŒãžã¯äœã§ããïŒ ã°ããŒãã«å€æ°ãšåæåã³ãŒãïŒããã¯äœ¿çšããŸããïŒãå¥ã«ããã°ãããã±ãŒãžã®äž»ãªå©ç¹ã¯ãäŸåé¢ä¿ã®ãã§ãŒã³ãå£ãããšã§ãã ããŒã¿ããŒã¹ãªããžã§ã¯ãã倿ŽãããšãäŸåããã±ãŒãžã®å®è£
ã®ã¿ãç¡å¹ã«ãªããããããŒã¯ç¡å¹ã«ãªããŸããã ããã±ãŒãžå
ã§ååž°åŒã³åºããè¡ãæ©èœã¯ããã®äºå®ã®çµæã®1ã€ã§ãã
PostgreSQLã§ã¯ãäŸåæ§ã¡ã«ããºã ã¯å®è£
ãããŠããŸããã ã¹ãã¢ã颿°ãžã®ååž°åŒã³åºãïŒPostgreSQLã«ã¯ããã·ãŒãžã£ã¯ãããŸããïŒã§ã¯ããã¹ãŠãé åºã©ããã§ãã ã¯ã©ã€ã¢ã³ãã³ãŒãã«æå°éã®å€æŽãå ããå¿
èŠãããããã«ã¯ãããã±ãŒãžã®æäœãç¶ç¶ããå€èгã®ã¿ãæäŸããã ãã§ååã§ãã PostgreSQLã¹ããŒãã¯ããã«æé©ã§ãã ãã¡ããããã®ãããªãããã±ãŒãžãã§ã¯ãããã©ã€ããŒããæ©èœãå®è£
ããããšã¯ã§ããŸããããããã¯ããã»ã©å€§ããªåé¡ã§ã¯ãããŸããã ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
PostgreSQLããã±ãŒãžãšãã¥ã¬ãŒã·ã§ã³ drop function acme_utils.get_str_res(numeric); drop function acme_utils.c_str_res_ot(); drop function acme_utils.c_str_res_id_attr(); drop schema acme_utils; create schema acme_utils; create or replace function acme_utils.c_str_res_ot() returns numeric as $$ begin return 20069; end; $$ language plpgsql IMMUTABLE; create or replace function acme_utils.c_str_res_id_attr() returns numeric as $$ begin return 20070; end; $$ language plpgsql IMMUTABLE; create or replace function acme_utils.get_str_res(in p_res_id numeric) returns text as $$ declare res text; begin select o.name into strict res from acme_object o inner join acme_obj_value rid on (rid.object_id = o.id and rid.attr_id = acme_utils.c_str_res_id_attr()) where o.obj_type_id = acme_utils.c_str_res_ot() and rid.num_value = p_res_id; return res; end; $$ language plpgsql STABLE;
ã¹ããŒã ããåäœæãããåã«ãã¹ãŠã®ãªããžã§ã¯ããåé€ããå¿
èŠã¯å°ãéå±ã§ãããçããããšã¯ã§ããŸãã ããã¹ãã«ã
strict ããšããçããåèªãããããšã«æ°ä»ããããããŸããã ãŒããŸãã¯è€æ°ã®ã¬ã³ãŒãããã§ããããããšãããšãã«ãéåžžã®Oracleã®åäœãæäŸããŸãã ä»ã®èšæ¶ã«æ®ãç¬éãããæåŸã®ã¯ãšãªã«ãã£ãŠå€æŽãããè¡ã®æ°ãèšç®ãã
å¥åŠãªæ§é ã«èšåã§ããŸãã
OracleããŒãžã§ã³ insert into acme_resource_tmp(id, device_id, profile_id, owner_id, type_id, res_num, name) select acme_main_sequence.nextval, t.device_id, t.profile_id, r.id, p.type_id, t.num, t.value from acme_state_tmp t inner join acme_profile_detail p on (p.profile_id = t.profile_id and p.param_id = t.param_id) inner join acme_resource r on (r.device_id = t.device_id and r.owner_id is null); l_ic := sql%rowcount;
PostgreSQLããŒãžã§ã³ insert into acme_resource_tmp(id, device_id, profile_id, owner_id, type_id, res_num, name) select nextval('acme_main_sequence'), t.device_id, t.profile_id, r.id, p.type_id, t.num, t.value from acme_state_tmp t inner join acme_profile_detail p on (p.profile_id = t.profile_id and p.param_id = t.param_id) inner join acme_resource r on (r.device_id = t.device_id and r.owner_id is null); get diagnostics l_ic = row_count;
ãã¡ãããããŸãå€ãã¯ãªãããããã¹ãŠã®ããã±ãŒãžã®å®è£
ãæžãæããå¿
èŠããããŸããã ç§ã®ä»¥åã®ç©èªãããæžãçŽããããã¹ãŠã®SQLã³ãŒãã3ã€ã®ã«ããŽãªã«åå²ãããããšãçè§£ã§ããŸãã
- å°èŠæš¡ãªæžãçŽãã«ãã£ãŠããã©ãããã©ãŒã ã«äŸåããªããã©ãŒã ã«ã€ãªããããšãèŠæ±ãã
- ãã©ãããã©ãŒã åºæã®ãã©ã°ã¡ã³ãããã¥ãŒã«é ãããã¯ãšãª
- 確ãã«ãã©ãããã©ãŒã åºæã®ã³ãŒã
æåã®2ã€ã«åé¡ã¯ãããŸããã åŸè
ã®ã«ããŽãªã¯ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠçæããããªã¯ãšã¹ãã«ãã©ãããã©ãŒã äŸåã®ã³ã³ã¹ãã©ã¯ããååšããå Žåãããã€ãã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã å®éãJavaã³ãŒãã¯æžãçŽãããããªãã®ã§ãã ããŸããŸãªDBMSã§åäœãã2ã€ã®ããŒãžã§ã³ã«ãœãŒã¹ãåå²ããå¿
èŠæ§ã¯ããã«å°ãªããªããŸãã æ®å¿µãªããããã©ãããã©ãŒã åºæã®èšèšãã¯ã©ã€ã¢ã³ãã³ãŒãããå®å
šã«é€å€ããããšã¯ã§ããŸããã§ããã ã»ãšãã©ã®å Žåã
tableããŒã¯ãŒãã¯ããŒãã«é¢æ°ã®ã¯ãšãªã«å¹²æžããŸããã ã·ãŒã±ã³ã¹åŒã³åºããšããã€ãã®éå±€ã¯ãšãªããããŸããã
ãã©ãããã©ãŒã ã«äŸåãããã¹ãŠã®ã¯ãšãªãããŒã¿ããŒã¹ã«ä¿åããæåã®ã¢ã¯ã»ã¹æã«ãããããœãããŠã§ã¢ãã£ãã·ã¥ã«ããŒãããããšã«ããŸããã æåã¯ãåããŒã¿ããŒã¹ãç¬èªã®ããŒãžã§ã³ã®ã¯ãšãªãä¿åãããšæ³å®ãããŠããŸãããã䜿çšããããã¹ãŠã®DBMSã«ã¯ãšãªãåæã«ä¿åããæ¹ã䟿å©ã§ããããšã倿ããŸããã Oracleã§ã¯ãã¯ãšãªããã¹ããä¿åããããã«
CLOBãã£ãŒã«ãã䜿çšãããPostgreSQLã§ã¯
textã䜿çšãããŠããŸããã åäžæ§ã確ä¿ããããã«ãCLOBããvarchar2ãžã®å€æã䜿çšã
ããæå€§ã¯ãšãªãµã€ãºã4000æåã«
å¶éãããŸãã ïŒãã ãã1ã€ã®ã¯ãšãªã¯ãã®ãµã€ãºãè¶
ããŠã¯ããŒã«ãããŸãããPostgreSQLããŒãžã§ã³åãã§ããããããå§çž®ãããå¿
èŠã¯ãããŸããã§ããïŒã
to_char倿
èªäœã¯ããã¥ãŒã䜿çšããŠé衚瀺ã«ããå¿
èŠããããŸããã
OracleããŒãžã§ã³ create or replace view acme_query(name, sql) as select a.name, to_char(c.clob_value) from acme_object a inner join acme_obj_list_value b on (b.object_id = a.id and b.attr_id = 10061) inner join acme_obj_value c on (c.object_id = a.id and c.attr_id = 10062) where a.obj_type_id = 10004 and b.list_value = 10061;
PostgreSQLããŒãžã§ã³ create or replace view acme_query(name, sql) as select a.name, c.clob_value from acme_object a inner join acme_obj_list_value b on (b.object_id = a.id and b.attr_id = 10061) inner join acme_obj_value c on (c.object_id = a.id and c.attr_id = 10062) where a.obj_type_id = 10004 and b.list_value = 10062;
èŠçŽãããšãç§ã¯ãã®äœåãæåã«æããã»ã©æãã¯ãªãã£ããšèšããŸãã ãã®ã»ãšãã©ã¯éå±€ã¯ãšãªãšOracleããã±ãŒãžã®æžãæãã«é¢é£ããŠãããã»ãšãã©ã®åé¡ã¯ããå³å¯ãªSQLæ§æãšPostgreSQLã®éåžžã®æé»çãªå€æã®æ¬ åŠã«é¢é£ããŠããŸããã Oracleã§ããå³å¯ã§ãã©ãããã©ãŒã ã«äŸåããªãã³ãŒããæåã«äœ¿çšããå Žåãäœæ¥ã®ç¯å²ã¯çããªãå¯èœæ§ããããŸãã