![](https://habrastorage.org/files/e23/3ac/7ff/e233ac7ffe814a80a9f360c443b45aa0.jpg)
ç¡æã®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ã§ããå³å¯ã§ãã©ãããã©ãŒã ã«äŸåããªãã³ãŒããæåã«äœ¿çšããå Žåãäœæ¥ã®ç¯å²ã¯çããªãå¯èœæ§ããããŸãã