PL/SQL ¤ÎÁÒ¸Ë
SQL ¤Î³èÍÑÎã¤È PL/SQL ¥×¥í¥°¥é¥à¤ØÁȤ߹þ¤à¶¦ÄÌ´Ø¿ô¥é¥¤¥Ö¥é¥ê
¤Á¤ê¤âÀѤâ¤ì¤Ð»³¡£¤¢¤Ã¤¿¤éÊØÍø¡¢¤Ê¤¯¤Æ¤âÂ礷¤Æº¤¤é¤Ê¤¤¡£·ä´Ö¤òËä¤á¤ë¥Ë¥Ã¥Á¤Ê¥¹¥È¥¢¡¼¥É¥×¥í¥°¥é¥à
¥Ñ¥Ã¥±¡¼¥¸²½¤â¤·¤Æ¤Ê¤¤¤Î¤Ç¡¢¤´¤ß¤Î»³¡Ä¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¢¨ ¤³¤Î¥Ú¡¼¥¸¤Ï¤¢¤Þ¤ê¤Ë»¨Â¿¤Ê¤Î¤Ç̵¤¯¤¹Êý¸þ¤ÇÅØÎϤ·¤Æ¤¤¤Þ¤¹¡£
¿ôÃÍ´Ø¿ô (ÀÚ¤ê¾å¤²¡¢Ã¼¿ô¡¢16¿Ê¿ô¡¢±ß¼þΨ)
TRUNC_MOD ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(»ØÄê·å°Ê²¼¤Îü¿ô¤ò¼è¤ê½Ð¤¹)
- »ØÄê·å¤Îü¿ôÉô¤ò¼è¤ê½Ð¤¹¡£(¥Ç¥Õ¥©¥ë¥È¤Ï¿ôÃͤξ®¿ôÉô¤ò¼è¤ê½Ð¤¹)
CREATE OR REPLACE FUNCTION RIVUS.TRUNC_MOD(P_NUM IN NUMBER, P_PLACE IN INTEGER := 0)
RETURN NUMBER
IS
BEGIN
RETURN MOD(P_NUM, 10**P_PLACE);
END;
/
HEXTODEC ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(16¿Ê¿ô¢ª10¿Ê¿ôÊÑ´¹)
16¿Ê¿ô ¢Î 10¿Ê¿ô ÊÑ´¹´Ø¿ô ¢Í 10¿Ê¿ô¡¢16¿Ê¿ô ÊÑ´¹
PI ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(±ß¼þΨ)
- PI (½½Ê¬¤ÊÀºÅÙ¤ò¤â¤Ä¶á»÷ÃÍ: ¥Þ¥Ë¥å¥¢¥ë¤Î»ÅÍÍ (ATAN) ¤Ç¤Ï 30 ·å¤Þ¤Ç¤ÎÀºÅÙ¤·¤«¤Ê¤¤)
¾ï¤Ë°ìÄê¤Î¿ôÃͤÎÌ᤹¤Î¤Ç¡¢¥¥ã¥Ã¥·¥å¤Ë»Ä¤ë¤³¤È¤ò´üÂÔ¤·¤Æ DETERMINISTIC ¤Ë¤·¤Æ¤¤¤ë¡£
38 ·å¤Î±ß¼þΨ¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤Û¤É¤ÎÀºÅÙ¤¬ËÜÅö¤ËɬÍפ«¤É¤¦¤«¤ò¸«¶Ë¤á¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«?
¤È¤¤¤¦°ÕÌ£ÉÔÌÀ¤ÊÍýͳ¤ÇÉÔÀµ³Î¤Ê·×»»¼°¤ÎÊý¤ò¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Æ¤ª¤¤Þ¤·¤¿¡£(Ä̾ï·×»»¤Ç¤Ï 10 ·å¤Î¥³¥ó¥¹¥¿¥ó¥ÈÃͤǤ¢¤ì¤Ð½½Æóʬ¤È»×¤¤¤Þ¤¹¡£)
CREATE OR REPLACE FUNCTION RIVUS.PI
RETURN NUMBER
DETERMINISTIC
IS
PI CONSTANT NUMBER := 4*(4*ATAN(1/5)-ATAN(1/239));
-- PI CONSTANT NUMBER := 3.1415926535897932384626433832795028841971;
BEGIN
RETURN PI;
END;
/
-- ·×»»¼°¤ò»ÈÍѤ·¤¿¶á»÷Ãͤξì¹ç
-- NUMBER·¿ ¤ÎºÇÂçÀºÅÙ¤Ï 38 ·å
SELECT TAN(PI/2), TAN(PI), SIN(PI) FROM DUAL ;
TAN(PI/2) TAN(PI) SIN(PI)
---------- ---------- ----------
1.6667E+37 -1.100E-37 1.1000E-37
-- ¥³¥ó¥¹¥¿¥ó¥È
-- PI CONSTANT NUMBER := 3.14¡Á¤ò»ÈÍѤ¹¤ë¤È¡¢TAN(PI/2) ¤Ï¥ª¡¼¥Ð¥Õ¥í¡¼¤·¤Þ¤¹¡£
SELECT TAN(PI), SIN(PI) FROM DUAL ;
TAN(PI) SIN(PI)
---------- ----------
0 0
ʸ»ú´Ø¿ô (Ê£¿ôʸ»ú TRIM¡¢µÕ¤µÆÉ¤ß¡¢LENGTH(NULL)=0)
REVERSE_MULTIBYTE ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(¥Þ¥ë¥Á¥Ð¥¤¥È¥¥ã¥é¥¯¥¿Âбþ:µÕ¤µÆÉ¤ß)
ʸ»úÎóµÕ¤µÆÉ¤ß´Ø¿ô
- REVERSE ¤Ï ɸ½àSQL´Ø¿ô(Èó¸ø¼° ¥·¥ó¥°¥ë¥Ð¥¤¥ÈÍÑ)
REVERSE ¤Ï¡¢²¿¸Î¤«¥Þ¥Ë¥å¥¢¥ë¤Ë¤Ê¤¤¤¿¤á(¥Þ¥ë¥Á¥Ð¥¤¥È¥¥ã¥é¥¯¥¿Âбþ¤¹¤ëͽÄê¤Ç¤â¤¢¤ë¤Î¤«¤Ê?)¡¢
¤Û¤Ü´Ö°ã¤¤¤Ê¤¯¥µ¥Ý¡¼¥ÈÂоݳ°¤Î´Ø¿ô¤È»×¤ï¤ì¤ë¡£(¥×¥í¥°¥é¥ß¥ó¥°¤Ç¤Ï UTL_RAW.REVERSE ¤ò»ÈÍѤ¹¤ë¡£)
CREATE OR REPLACE FUNCTION RIVUS.REVERSE_MULTIBYTE(P_STR IN VARCHAR2)
RETURN VARCHAR2
IS
vReverse VARCHAR2(4000);
BEGIN
FOR i in REVERSE 1..LENGTH(P_STR)
LOOP
vReverse := vReverse || SUBSTR(P_STR, i, 1);
END LOOP;
RETURN vReverse;
END;
/
ʸ»ú´Ø¿ô (ÆüËܸì½èÍý¡§Á´³Ñ¤ò´Þ¤àʸ»ú¡¢È¾³Ñ¥«¥Ê¤ÎÊÑ´¹)
IS_MULTIBYTE ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (Á´³Ñʸ»ú:¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¤¬´Þ¤Þ¤ì¤ë¤«)
¸úΨ¤¬Îɤ¤¤È¤Ï¸Â¤ê¤Þ¤»¤ó¤¬¡¢¥³¥ó¥»¥×¥È¤Ï¼êÈ´¤¤Ç¤¹¡£
CREATE OR REPLACE FUNCTION RIVUS.IS_MULTIBYTE(P_CHAR IN VARCHAR2)
RETURN PLS_INTEGER
IS
BEGIN
IF ( P_CHAR <> CONVERT(P_CHAR, 'US7ASCII')) THEN
RETURN 1;
END IF;
RETURN 0;
END;
/
³«È¯Êä½õ¥³¡¼¥É (TRUNCATE TABLE)
TRUNCATE TABLE ¥é¥Ã¥Ñ¡¼¥×¥í¥·¡¼¥¸¥ã
Ä̾糧¥¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤«¤é¥ª¥Ö¥¸¥§¥¯¥È¤Î¥ª¡¼¥Ê¤È¥×¥í¥·¡¼¥¸¥ã¤Î¼Â¹Ô¼Ô(¥·¥¹¥Æ¥àÍøÍѼÔ)¤Ï°Û¤Ê¤ëÀ߷פò¹Ô¤Ê¤¦¡£
¤½¤Î¤¿¤á TRUNCATE TABLE ¤ò¼Â¹Ô¤µ¤»¤ë¤¿¤á¤Ë¥Þ¥Ë¥å¥¢¥ëÄ̤ê DROP ANY TABLE ¸¢¸Â¤òÉÕÍ¿¤·¤Æ¤·¤Þ¤¦¥±¡¼¥¹¤â¾¯¤Ê¤¯¤Ê¤¤¡£
¤³¤ì¤Ï¡¢Â¾¤Î¥¹¥¡¼¥Þ¥ª¥Ö¥¸¥§¥¯¥È¤ò¼«Í³¤Ë DROP TABLE ¤Ç¤¤ëÈó¾ï¤Ë¶¯ÎϤʸ¢¸Â¤Ç¤¢¤ë¤¿¤á¡¢¤½¤Î¸¢¸Â¤Î±Æ¶ÁÎϤϹÈϰϤˤʤꡢ
¤³¤ì¤òÇÓ½ü¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¥±¡¼¥¹¤¬¤¢¤ë¡£( 1 ¥¤¥ó¥¹¥¿¥ó¥¹¤Ë Ê£¿ô¤Î¥·¥¹¥Æ¥à¤È¥¹¥¡¼¥Þ¤¬¶¦Â¸¤·¤Æ¤¤¤ë´Ä¶¤Ê¤É )
¤½¤Î¤¿¤á¤Ë¤Ï DROP ANY TABLE(TRUNCATE TABLE) ¤Î¼Â¹Ô¤Ïµö²Ä¤»¤º¥×¥í¥·¡¼¥¸¥ã·Ðͳ¤Ç¼Â¹Ô¤µ¤»¤ë¡£
¤³¤ì¤Ç¾¯¤Ê¤¯¤È¤â¾¥·¥¹¥Æ¥à¤Î¥¹¥¡¼¥Þ¤Ë±Æ¶Á¤¬µÚ¤Ð¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
(¼«¥·¥¹¥Æ¥à¤Î¥¹¥¡¼¥Þ¤Ø¤Î DDL ¼Â¹Ô´Æ»ë¤Ï´ÆººÅù¤ÇÁá´üȯ¸«¤¹¤ë¤·¤«¤Ê¤¤¡£)
ÀÚ¤ê¼Î¤Æ¤Ç¤¤ë¥Æ¡¼¥Ö¥ë¤òÀ©¸Â¤·¤Æ¤¤¤ë¤Î¤Ïµ¤µÙ¤áÄøÅ٤Ǻï½ü¤·¤Æ¤âÌäÂê¤Ï¤Ê¤¤¤¬¡¢¥¹¥¡¼¥Þ̾¤Ë¤è¤ëÀ©¸Â¤òºï½ü¤¹¤ë¤È¸ºß²ÁÃͤ¬¤Ê¤¯¤Ê¤ë¡£
( 'TRUNCATE TABLE RIVUS. || vTarget ) -- ¼ÐÂΤÎÉôʬ
CREATE OR REPLACE PROCEDURE RIVUS.TRUNC_TABLE(P_TABLE IN VARCHAR2)
AUTHID DEFINER
IS
vSearch VARCHAR2(30);
vTarget VARCHAR2(30);
TYPE TABLE_LIST_T IS TABLE OF VARCHAR2(30);
-- TRUNCATE TABLE LIST
TRUNCATABLE_LIST TABLE_LIST_T := TABLE_LIST_T(
'TABLE_A', 'TABLE_B', 'TABLE_C'
);
BEGIN
vTarget := NULL;
vSearch := UPPER(P_TABLE);
FOR i IN 1..TRUNCATABLE_LIST.COUNT
LOOP
IF (vSearch = TRUNCATABLE_LIST(i)) THEN
vTarget := vSearch;
EXIT;
END IF;
END LOOP;
IF ( vTarget IS NOT NULL) THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE RIVUS.' || vTarget ;
ELSE
NULL; -- or RAISE userdef_exception;
END IF;
END;
/
SQL Tips (Ê̤ο·µ¬¥Ú¡¼¥¸¤Ëʬ³äͽÄê)
¥Ç¡¼¥¿¤¬¤¢¤ê¤Ê¤·¤Î¥Á¥§¥Ã¥¯ (»ØÄê¾ò·ï¤Î¥Ç¡¼¥¿¤¬¤¢¤ë¤«¡¢¤Ê¤¤¤«¤À¤±¤Î³Îǧ)
°Üž
ROUNDUP ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(ÀÚ¤ê¾å¤²)
¢Í ROUNDUP ´Ø¿ô
IS_DATE ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (ÆüÉÕʸ»úÎó¤Î͸úÀ¥Á¥§¥Ã¥¯) ;
ÆüÉÕʸ»úÎó¤ò¥Á¥§¥Ã¥¯¤¹¤ë¥Õ¥¡¥ó¥¯¥·¥ç¥ó ¢Í ʸ»úÎ󤬯üÉÕ¤ËÊÑ´¹¤Ç¤¤ë¤«¥Á¥§¥Ã¥¯¤¹¤ë
YEAR_OF_AGE ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (ÃÂÀ¸Æü¤«¤éǯÎð¤ò»»½Ð)
¥·¥¹¥Æ¥àÆüÉդˤª¤±¤ëǯÎð¤ò»»½Ð¤¹¤ë¡£¢Í ÃÂÀ¸Æü¤«¤éǯÎð¤ò»»½Ð¤¹¤ë
LENGTH0 ¥Õ¥¡¥ó¥¯¥·¥ç¥ó( Ťµ0 ¤Îʸ»úÎó¤òŤµ0 ¤È¤¹¤ë LENGTH )
Ťµ0 ¤Îʸ»úÎó¤òŤµ¤ò·×¤ë ¢Í LENGTH
¥Á¥§¥Ã¥¯¥Ç¥¸¥Ã¥È(C/D:¥Á¥§¥Ã¥¯¥Ç¥£¥¸¥Ã¥È)¤Î»»½Ð (JAN¡¢ITF ¥³¡¼¥ÉÍÑ)
°ÜžºÑ ¢Í JAN ¥³¡¼¥É¤Î¥Á¥§¥Ã¥¯¥Ç¥¸¥Ã¥È¤ò·×»»¤¹¤ë
TRIM_MULTI ¥Õ¥¡¥ó¥¯¥·¥ç¥ó(Ⱦ³ÑÁ´³Ñ¡¢Ê£¿ôʸ»úÂбþ¤Î TRIM)
¢Í TRIM ´Ø¿ô
ÆüÉÕ´Ø¿ô (ÆüÉÕ¥Á¥§¥Ã¥¯¡¢Ç¯Îð¡¢Ç¯¹æ¡¢·î½é¡¢Àè½µÆüÉÕ)
NAME_OF_ERA ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (»ØÄê¤ÎÆüÉÕ¤Îǯ¹æÌ¾¤ò¼èÆÀ)
¢Í TO_CHAR ´Ø¿ô¡ÊÆüÉÕ¡Ë
FIRST_DAY ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (·î½é¤á¤ò¼èÆÀ)
¢Í LAST_DAY ´Ø¿ô
PREV_DAY ¥Õ¥¡¥ó¥¯¥·¥ç¥ó (Àè½µ¤Î¤¢¤ëÍËÆü¤ÎÆüÉÕ¤ò¼èÆÀ)
¢Í NEXT_DAY ´Ø¿ô
ÆüÉÕ¤ÎÊ¿¶ÑÃͤò¼èÆÀ¤¹¤ë
¢Í MEDIAN ´Ø¿ô ¤Ë°Üư