Ⱦ³Ñ¥«¥¿¥«¥Ê¤òÁ´³Ñ¤Ò¤é¤¬¤Ê¡¢Á´³Ñ¥«¥¿¥«¥Ê¤ËÊÑ´¹¤¹¤ë

Oracle ¤Ç²áµî¤Î¥·¥¹¥Æ¥à¤È¤Î·ë¹çÅÙ¤¬Ä㤤¡¢¿·µ¬¤Î¶È̳¥·¥¹¥Æ¥à ¤ò³«È¯¤¹¤ë¤È¤Ê¤Ã¤¿¾ì¹ç¡£
¤½¤³¤Ç¡¢È¾³Ñ¥«¥¿¥«¥Ê¤òºÎÍѤ¹¤ë¤Î¤Ï¤¢¤Þ¤ê˾¤Þ¤·¤¯¤Ê¤¤¡£(Ⱦ³Ñ¥«¥¿¥«¥Ê¤Î»ÈÍѤˤĤ¤¤Æ »²¾È)
´û¸¤Îµì¥·¥¹¥Æ¥à¤«¤é¥Ç¡¼¥¿Ä󶡤ò¼õ¤±¤ë¾ì¹ç¤Ë¤â¡¢ÅêÆþ»þ¤ËÊÑ´¹¤¹¤ë¤è¤¦¤ËÄ´À°¤Ç¤­¤Ê¤¤¤«¥¯¥é¥¤¥¢¥ó¥È¤ÈÁêÃ̤¹¤ë¤Ê¤É¤ÎÅØÎϤò¤·¤Æ¤ß¤ë¤³¤È¤ò¤ª´«¤á¤¹¤ë¡£

Ⱦ³Ñ¥«¥¿¥«¥Ê¤«¤éÁ´³Ñʸ»ú¤Ø¤ÎÊÑ´¹´Ø¿ô

Ⱦ³Ñ¥«¥¿¥«¥Ê¤«¤éÁ´³Ñʸ»úÊÑ´¹´Ø¿ô¤Ï Oracle¤Îɸ½à SQL ¤Îµ¡Ç½¤Ç¤ÏÍѰդµ¤ì¤Æ¤¤¤Ê¤¤(¢¨1)¡£ ¤½¤Î¤¿¤á¡¢TRANSLATE ´Ø¿ô ¤È REPLACE ´Ø¿ô ¤òÊ»ÍѤ·¤¿ ¥¹¥È¥¢¥É¡¦¥Õ¥¡¥ó¥¯¥·¥ç¥ó ¤Ë¤Æ¼ÂÁõ¤¹¤ë¡£

(¢¨1) Oracle 10g R2 ¤«¤é UTL_I18N ¥Ñ¥Ã¥±¡¼¥¸(¢¨2) ¤Ëʸ»úÎóÍÑÊÑ´¹ UTL_I18N.TRANSLITERATE ´Ø¿ô¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡£

SELECT UTL_I18N.TRANSLITERATE ('¤¢¥¤¤¦', 'kana_hiragana') FROM DUAL ;

(¢¨2) I18N ¤Ï¹ñºÝ²½¤Î°ÕÌ£¤Ç InternationalizatioN ¤Îά »²¹Í ¢Í I18N (Wikipedia.org) ³°Éô¥ê¥ó¥¯

ɸ½à´Ø¿ô¤Ç¤¢¤ë¡¢TO_MULTI_BYTE ¤Ï¡¢¥·¥ó¥°¥ë¥Ð¥¤¥Èʸ»ú¤ò¥Þ¥ë¥Á¥Ð¥¤¥È¤ËÊÑ´¹¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¤¬¡¢ Ⱦ³Ñ¥«¥¿¥«¥Ê¤Ï¾ï¤Ë ¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»úÎó ¤È¤·¤Æ°·¤ï¤ì¤ë¤¿¤á¡¢ ¥Ç¡¼¥¿¥Ù¡¼¥¹¡¦¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤Î¼ïÎà¤òÌä¤ï¤ºÊÑ´¹¤µ¤ì¤Ê¤¤¡£

TO_MULTI_BYTE('abcdef') ¢Í '£á£â£ã£ä£å£æ' ... OK
TO_MULTI_BYTE('012345') ¢Í '£°£±£²£³£´£µ' ... OK
TO_MULTI_BYTE('¥¢¥¤¥¦') ¢Í '¥¢¥¤¥¦'       ... NG
                 ¢¬           ¢¬ Á´³Ñɽ¼¨¤µ¤ì¤Æ¤Þ¤¹¤¬¡¢È¾³Ñ¤È¤·¤Æ¸«¤Æ¤¯¤À¤µ¤¤

¥Õ¥¡¥ó¥¯¥·¥ç¥ó¤Î»ÅÍÍ

¥Õ¥¡¥ó¥¯¥·¥ç¥ó̾¡§TO_FULL_KANA
Âè 1¥Ñ¥é¥á¡¼¥¿ÊÑ´¹¤·¤¿¤¤Ê¸»úÎó
Âè 2¥Ñ¥é¥á¡¼¥¿ÊÑ´¹¤¹¤ë¥¿¥¤¥× ['HIRA'¡Ã'KANA'] (¾Êά»þ 'HIRA')
 ¨¦ 'HIRA'=Ê¿²¾Ì¾ , 'KANA'=¥«¥¿¥«¥Ê
Ìá¤êÃÍÊÑ´¹¤·¤¿Ê¸»úÎó
À©¸ÂÆþ½ÐÎϤκÇÂçʸ»úÎóĹ¤Ï 2000 ¥Ð¥¤¥È¤Þ¤Ç

¤³¤ÎÎã¤Ç¤Ï ¥¹¥È¥¢¥É¥Õ¥¡¥ó¥¯¥·¥ç¥ó¤È ¥í¡¼¥«¥ë¡¦¥µ¥Ö¥×¥í¥°¥é¥à ¤ÇºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£¤â¤·¡¢É¬ÍפǤ¢¤ì¤Ð¥Ñ¥Ã¥±¡¼¥¸¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ÁêÅö¿ô¤ò¸Æ¤Ó½Ð¤¹Í½Ä꤬¤¢¤ë¾ì¹ç¤Ë¤Ï¥Ñ¥Ã¥±¡¼¥¸²½¤·ÊÑ´¹¥Æ¡¼¥Ö¥ë¤òÈó¸ø³«¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô²½¤·¤¿Êý¤¬¸úΨ¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£¥½¡¼¥¹¥³¡¼¥É¤¬Ä¹¤¯¤Ê¤ë¤Î¤ÇÄ̾ï¤Î¥Õ¥¡¥ó¥¯¥·¥ç¥ó¤Ç½ñ¤¤¤Æ¤¤¤Þ¤¹¡£

»ÈÍÑÎã

SELECT
	TO_FULL_KANA('Ž©ŽÞŽªŽÞŽªŽÞްޝ' , 'HIRA')
  FROM  DUAL;
-- ·ë²Ì¡§¤¥¡«¤§¡«¤§¡«¡¼¤Ã
 
SELECT
	TO_FULL_KANA('Ž©ŽÞŽªŽÞŽªŽÞްޝ' , 'KANA')
  FROM  DUAL;
-- ·ë²Ì¡§¥¥¡«¥§¡«¥§¡«¡¼¥Ã
 
SELECT
	TO_FULL_KANA('ŽÄ޳޷ޮ޳ŽÄޝ޷ޮ޷ޮ޶޷ޮޏ')
  FROM  DUAL;
-- ·ë²Ì¡§¤È¤¦¤­¤ç¤¦¤È¤Ã¤­¤ç¤­¤ç¤«¤­¤ç¤¯

¥×¥í¥·¡¼¥¸¥ã¤Î¥½¡¼¥¹

²¼¤Î¥½¡¼¥¹¥³¡¼¥É¤Î¡¢È¾³Ñ¥«¥¿¥«¥Ê(Ⱦ³Ñ¤ÎȾÂùÅÀ¡¢ÂùÅÀ´Þ¤à)¤ÏÁ´³Ñ¥«¥¿¥«¥Ê¤ËÊѹ¹¤·¤Æ¤¢¤ë¤¿¤á¡¢¥³¥Ô¡¼¤·¤Æ¤âÀµ¾ï¤Ëưºî¤·¤Þ¤»¤ó¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤Þ¤¿¡¢¼ÂºÝ¤Ë»È¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¤Ï¤Ê¤¤¤Î¤Ç¥Ð¥°¤¬¤¢¤ê¤Þ¤·¤¿¤é¸Ä¡¹¤Ç²þ½¤¤ª´ê¤¤¤·¤Þ¤¹¡£
¥­¥ã¥é¥¯¥¿¥Þ¥Ã¥×¤Ï¡¢µÕÊÑ´¹¤âÁÛÄꤷ¤ÆºîÀ®¤·¤Æ¤¤¤ë¤Î¤ÇÁ´³Ñ¤«¤éȾ³Ñ¤ÎµÕÊÑ´¹¤â¼ÂÁõ¤Ç¤­¤ë¤È»×¤¤¤Þ¤¹¡£

Âоݥե¡¥¤¥ë̾´Á»ú¥³¡¼¥É
¥×¥í¥·¡¼¥¸¥ã¥Õ¥¡¥¤¥ëfileto_full_kana.sql.2Shift JIS
CREATE OR REPLACE FUNCTION RIVUS.TO_FULL_KANA(
	P_SOURCE_STR VARCHAR2,
	P_TO_CHARSET VARCHAR2 :='HIRA'
)
RETURN VARCHAR2
IS
	/*********************************************************************/
	-- $Id: to_full_kana.sql,v 1.1 2005/06/18 00:11:59 rivus Exp $
	-- ¥¹¥¯¥ê¥×¥È̾ ¡§TO_FULL_KANA
	-- ¥Ñ¥é¥á¡¼¥¿   ¡§(I  ) P_SOURCE_STR	ÊÑ´¹Ê¸»úÎó
	--              ¡§(I  ) P_TO_CHARSET	ÊÑ´¹¥­¥ã¥é¥¯¥¿¥»¥Ã¥È
	-- Ìá¤êÃÍ       ¡§ÊÑ´¹¸å¤Îʸ»úÎó
	-- ÆÃµ­»ö¹à     ¡§ÆþÎϤª¤è¤Ó½ÐÎÏ·ë²Ìʸ»úÎóĹ¤Ï 2000 ¥Ð¥¤¥È¤Þ¤Ç
	/*********************************************************************/
	TYPE  CHAR_MAP_T IS TABLE OF VARCHAR2(30);
	-- Ⱦ³Ñ¥«¥¿¥«¥Ê(ËÜÍè¤ÏȾ³Ñ¥«¥Ê¤Ç¤¹¤¬¡¢¤¹¤Ù¤ÆÁ´³Ñ¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹)
	HANDAKU_KANA_HALF CHAR_MAP_T := CHAR_MAP_T(
	'¥Ñ', '¥Ô', '¥×', '¥Ú', '¥Ý','¡¬'
	);
	DAKU_KANA_HALF CHAR_MAP_T := CHAR_MAP_T(
	'¥¬', '¥®', '¥°', '¥²', '¥´', 
	'¥¶', '¥¸', '¥º', '¥¼', '¥¾', 
	'¥À', '¥Â', '¥Å', '¥Ç', '¥É', 
	'¥Ð', '¥Ó', '¥Ö', '¥Ù', '¥Ü',
	'¥ô', '¡«'
	);
	KANA_HALF CHAR_MAP_T := CHAR_MAP_T(
	'¥¢¥¤¥¦¥¨¥ª', '¥«¥­¥¯¥±¥³', '¥µ¥·¥¹¥»¥½', '¥¿¥Á¥Ä¥Æ¥È', '¥Ê¥Ë¥Ì¥Í¥Î',
	'¥Ï¥Ò¥Õ¥Ø¥Û', '¥Þ¥ß¥à¥á¥â', '¥ä¥æ¥è',     '¥é¥ê¥ë¥ì¥í', '¥ï¥ò¥ó',
	'¥¡¥£¥¥¥§¥©', '¥Ã¥ã¥å¥ç¡¼', '¥¤¥¤¥¨¥«¥±'
	);
	-- Á´³Ñ¤Ò¤é¤¬¤Ê
	HANDAKU_HIRA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¤Ñ', '¤Ô', '¤×', '¤Ú' ,'¤Ý', '¡¬'
	);
	DAKU_HIRA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¤¬', '¤®', '¤°', '¤²', '¤´', 
	'¤¶', '¤¸', '¤º', '¤¼', '¤¾', 
	'¤À', '¤Â', '¤Å', '¤Ç', '¤É', 
	'¤Ð', '¤Ó', '¤Ö', '¤Ù', '¤Ü',
	'¤¦¡«', '¡«' 
	);
	HIRA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¤¢¤¤¤¦¤¨¤ª', '¤«¤­¤¯¤±¤³', '¤µ¤·¤¹¤»¤½', '¤¿¤Á¤Ä¤Æ¤È', '¤Ê¤Ë¤Ì¤Í¤Î',
	'¤Ï¤Ò¤Õ¤Ø¤Û', '¤Þ¤ß¤à¤á¤â', '¤ä¤æ¤è',     '¤é¤ê¤ë¤ì¤í', '¤ï¤ò¤ó',
	'¤¡¤£¤¥¤§¤©', '¤Ã¤ã¤å¤ç¡¼', '¥ð¤ð¤ñ¥õ¥ö'
	);
	-- Á´³Ñ¥«¥¿¥«¥Ê
	HANDAKU_KANA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¥Ñ', '¥Ô', '¥×', '¥Ú', '¥Ý','¡¬'
	);
	DAKU_KANA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¥¬', '¥®', '¥°', '¥²', '¥´', 
	'¥¶', '¥¸', '¥º', '¥¼', '¥¾', 
	'¥À', '¥Â', '¥Å', '¥Ç', '¥É', 
	'¥Ð', '¥Ó', '¥Ö', '¥Ù', '¥Ü',
	'¥ô', '¡«'
	);
	KANA_FULL CHAR_MAP_T := CHAR_MAP_T(
	'¥¢¥¤¥¦¥¨¥ª', '¥«¥­¥¯¥±¥³', '¥µ¥·¥¹¥»¥½', '¥¿¥Á¥Ä¥Æ¥È', '¥Ê¥Ë¥Ì¥Í¥Î',
	'¥Ï¥Ò¥Õ¥Ø¥Û', '¥Þ¥ß¥à¥á¥â', '¥ä¥æ¥è',     '¥é¥ê¥ë¥ì¥í', '¥ï¥ò¥ó',
	'¥¡¥£¥¥¥§¥©', '¥Ã¥ã¥å¥ç¡¼', '¥¤¥¤¥¨¥õ¥ö'
	);
	vKANA_HIRA	VARCHAR2(10);
	vOUT_STR	VARCHAR2(2000);
 
	PROCEDURE ONE_BY_ONE(
		P_STR IN OUT VARCHAR2
		,P_SRCMAP CHAR_MAP_T
		,P_DSTMAP CHAR_MAP_T
	)
	IS
	BEGIN
		FOR i IN 1..P_SRCMAP.COUNT
		LOOP
			P_STR := REPLACE(P_STR, P_SRCMAP(i), P_DSTMAP(i));
		END LOOP;
	END;
BEGIN
	vKANA_HIRA := UPPER(P_TO_CHARSET);
	vOUT_STR := P_SOURCE_STR;
	IF (INSTR(vOUT_STR,'¡¬') != 0) THEN
		IF (vKANA_HIRA = 'HIRA') THEN
			ONE_BY_ONE(vOUT_STR, HANDAKU_KANA_HALF, HANDAKU_HIRA_FULL);
		ELSE
			ONE_BY_ONE(vOUT_STR, HANDAKU_KANA_HALF, HANDAKU_KANA_FULL);
		END IF;
	END IF;
	IF (INSTR(vOUT_STR,'¡«') != 0) THEN
		IF (vKANA_HIRA = 'HIRA') THEN
			ONE_BY_ONE(vOUT_STR, DAKU_KANA_HALF, DAKU_HIRA_FULL);
		ELSE
			ONE_BY_ONE(vOUT_STR, DAKU_KANA_HALF, DAKU_KANA_FULL);
		END IF;
	END IF;
 
	FOR i IN 1..KANA_HALF.COUNT
	LOOP
		IF (vKANA_HIRA = 'HIRA') THEN
			vOUT_STR := TRANSLATE(vOUT_STR, KANA_HALF(i), HIRA_FULL(i));
		ELSE
			vOUT_STR := TRANSLATE(vOUT_STR, KANA_HALF(i), KANA_FULL(i));
		END IF;
	END LOOP;
	RETURN vOUT_STR;
END;
/


´ØÏ¢»ö¹à

¥¹¥Ý¥ó¥µ¡¼¥É ¥ê¥ó¥¯

IT¥¨¥ó¥¸¥Ë¥¢ ¥­¥ã¥ê¥¢¥¢¥Ã¥×¡¦Å¾¿¦¡¦µá¿Í¾ðÊó

Oracle & ITµ»½Ñ¼Ô ÀìÌç½ñ

¢£³¨¤Ç¸«¤Æ¤ï¤«¤ëOracle¤Î»ÅÁȤß
²Á³Ê: 2,310 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 1,580 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2006-06-21
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 4 ·ï

¢£¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼¶µ²Ê½ñ Bronze Oracle Database 10g¡ÚSQL´ðÁÃI¡
²Á³Ê: 3,990 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 2,400 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2004-12-21
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 4 ·ï

¢£¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼¶µ²Ê½ñ Bronze Oracle Database 10g(DBA10g)ÊÔ
²Á³Ê: 3,990 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 2,800 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2004-08
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 16 ·ï

ÆüËÜ¥ª¥é¥¯¥ë
¢£ ÆüËÜ¥ª¥é¥¯¥ë ³ô¼°²ñ¼Ò
¢£ ¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼»ñ³Ê ¡Ê¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼¤È¤Ï¡Ë
¢£ ²ñ°÷À©¡Ê̵ÎÁ¡Ë¤Î¸ø¼°µ»½Ñ¥µ¥¤¥È
Google