æè¿ã®ãããžã§ã¯ãã®1ã€ã§ãæ·±å»ãªåé¡ã«çŽé¢ããŸããã ç§ãã¡ãéçºããŠããWebã¢ããªã±ãŒã·ã§ã³ã¯ãéèæ©é¢ã®å
éšããŒã¿ããŒã¹ã䜿çšããããšã§ããã ã»ãã¥ãªãã£äžã®çç±ãããã¢ã¯ã»ã¹ã¯éåžžã«å¶éãããŠããŸãããã¹ãã¢ãããã·ãŒãžã£ã䜿çšããŠå€æŽãè¡ãå¿
èŠããããããŒã¿ã®èªã¿åãã¯ãã¥ãŒã䜿çšããŠã®ã¿å¯èœã§ããã ãã®ãããã¢ããªã±ãŒã·ã§ã³ã¯è€éãªããŒã¿æäœãå®è¡ããå¿
èŠããããŸãããããã®æ§é ã«ã€ããŠã¯ããããŸããã ç§ãã¡ã®äž»ãªåé¡ã¯ãã¢ããªã±ãŒã·ã§ã³ãèªååããããã¹ãããªã倧èŠæš¡ã§è€éãªæé ã«äŸåããããã«ãªã£ãããšã§ãã
å°ãã°ãŒã°ã«ã§ãæšæºã®Oracle SQL DeveloperããŒã«ããã[1]ã«èªåãã¹ããäœæããæ©èœãããããšãçºèŠããŸããã ç§ãã¡ã¯ããã«ãããç 究ãå§ããŸããã æãè€éãªæé ã®ãã¹ãã¯äœæåŸã«äœæããå¿
èŠããããŸããããããã§ããã®ããŒã«ãããã¯ããã€ãã®ãšã©ãŒãæé€ããã®ã«åœ¹ç«ã¡ãæ©èœã®æ¡åŒµãšãªãã¡ã¯ã¿ãªã³ã°ã®ããã»ã¹ã倧ãã«ä¿é²ããŸããã 以äžã§ã¯ãTDDã䜿çšããŠã¹ãã¢ãããã·ãŒãžã£ãæ§ç¯ããäŸã瀺ããŸãããŸããããŒã«ã䜿çšããçµéšãå
±æããŸãã
䜿çšäŸ
顧客ãSMSã¡ãã»ãŒãžãéä¿¡ã§ããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãæã£ãŠãããšããŸãã å¥ã®ããŒã ã¯ãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãšäžŠè¡ããŠåäœããå¿
èŠã®ããæ°ããã¢ããªã±ãŒã·ã§ã³ãéçºããŠããŸãããã®ãããããžãã¹ããžãã¯ã®å
±éã®å ŽæããããšäŸ¿å©ã§ãã
ããŒã¿æ§é
ã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ããŒã¿æ§é ã䜿çšããŸãã
CREATE TABLE CLIENTS( ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME NVARCHAR2(255) NOT NULL, BALANCE NUMBER(*,2) DEFAULT 0 NOT NULL, IS_ACTIVE NUMBER(1) DEFAULT 0 NOT NULL, IS_PREPAY NUMBER(1) DEFAULT 0 NOT NULL ); CREATE TABLE MESSAGE_QUEUE( ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL, ID_CLIENT NUMBER NOT NULL, SENDER VARCHAR2(20), RECIPIENT VARCHAR(20), MESSAGE NVARCHAR2(255) NOT NULL, QUEUED_ON TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, SEND_ON TIMESTAMP WITH TIME ZONE NULL, SENT_ON TIMESTAMP WITH TIME ZONE NULL ); CREATE TABLE TRANSACTIONS( ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL, ID_CLIENT NUMBER NOT NULL, VALUE NUMBER(*,2) NOT NULL, TRANSACTION_TIME TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP );
ç°¡æœã«ããããã«ãäž»ããŒãšå€éšããŒã®å®çŸ©ã¯çç¥ãããŠããŸãã
ç°å¢èšå®
SQL Developerã®åäœãã¹ãã§ã¯ãããŒã¿ããŒã¹ã䜿çšããŠããã¹ãããã®èšå®ãã©ã€ãã©ãªãããã³å®è¡çµæãä¿åããŸãã ãããã®ç®çã®ããã«ããã¹ãçšã®ãŠãŒã¶ãŒãäœæããŠãããããŒã¿ããŒã¹ã«ãªããžããªãäœæããããšã匷ããå§ãããŸãã ãã®ããã»ã¹ã®è©³çŽ°ã¯ããŠããããã¹ãã®ããã¥ã¡ã³ã[2]ã§èª¬æãããŠããŸãã
Oracleãã¹ãã®çšèª
Oracleã䜿çšãããã¹ãçšèªã¯ãxUnit [3]ã®äžè¬ã«åãå
¥ããããŠããçšèªãšã¯å€å°ç°ãªããŸãã
xUnit | SQL Developer | SQL Developerã«é¢ããã³ã¡ã³ã |
---|
ãã¹ãã¹ã€ãŒã | ãã¹ãã¹ã€ãŒã | ä»ã®ãã¹ãã¹ã€ãŒããã¹ã¯ãªãããå«ããããšãã§ããŸã |
ãã¹ãã·ããªãª | ãã¹ã | ãã¹ãã§ããé¢æ°ãŸãã¯ããã·ãŒãžã£ã¯1ã€ã ãã§ãã |
ãã¹ã | ãã¹ãå®è£
| |
ã³ã³ããã¹ãèšå®ïŒã»ããã¢ããïŒ | èµ·åããã»ã¹ | ãã¹ãããã³ãã¹ãã¹ã€ãŒãã¬ãã«ã§å©çšå¯èœ |
ã³ã³ããã¹ãã®ãªã»ããïŒåè§£ïŒ | å解ããã»ã¹ | äžèšåç
§ |
ããã«æ¬æã§ã¯ããã·ã¢èªçã®xUnitçšèªã䜿çšããŸãã
é©ã
ã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ãããšããæåŸ
ã©ããã«åäœããªãå ŽåãããããšãããããŸããã
- å Žåã«ãã£ãŠã¯ãåäœãã¹ãã®ãã¹ãŠã®ã¡ãã¥ãŒé
ç®ãç¡å¹ã«ãªãããšãå€æããŸããã ãã®ãããªå Žåã¯ãã¡ãã¥ãŒé
ç®[衚瀺]â[åäœãã¹ã ]ãã¯ãªãã¯ããŸã
- ã¹ã¯ãªããå
ã®ãã¹ãŠã®ãã¹ãã¯ãèšå®ãšã³ã³ããã¹ããªã»ããã®å
±éã»ããã䜿çšããŸãããããã¯éåžžã«è«ççã§ãã ãã ãããã¹ãã¿ãã§ç·šéãããããããã¹ãããšã«åå¥ã«ã«ã¹ã¿ãã€ãºã§ããããã§ãã
ãã¹ãéçº
éå§ããåã«ã空ã®ããã·ãŒãžã£ãäœæããå¿
èŠããããŸããäœæããªããšããã¹ããäœæã§ããŸããã åŒæ°ãªã¹ãã¯ç©ºã®ãŸãŸã«ã§ããŸããããã®å¿
èŠã¯ãããŸããã
æåã¯ãã¡ãã»ãŒãžãéä¿¡ããããã«ãã¯ã©ã€ã¢ã³ãèå¥åãéä¿¡è
ãåä¿¡è
ãããã³ã¡ãã»ãŒãžèªäœãå¿
èŠã§ãããšæ³å®ã§ããŸãã ãŸããããšãã°ãåºåãã©ã¡ãŒã¿ãéããŠçµæãéç¥ããå¿
èŠããããŸãã ããã·ãŒãžã£ãäœæããããã®ãã€ã¢ãã°ã䜿çšãããšãéåžžã«é©åãªå®çŸ©ãååŸã§ããŸãã
CREATE OR REPLACE PROCEDURE QUEUE_MESSAGE( V_ID_CLIENT IN NUMBER, V_SENDER IN VARCHAR2, V_RECIPIENT IN VARCHAR2, V_MESSAGE IN NVARCHAR2, V_IS_QUEUED OUT NUMBER) AS BEGIN NULL; END QUEUE_MESSAGE;
Oracleã®å ŽåããããŸããªå Žåã«ã¯æåãªDBMSããã£ãŒã«ããåªå
ããŠçŽäºã解決ãããããååããã£ãŒã«ãã®ååãšäžèŽããå¯èœæ§ã®ããå€æ°ã«ãã¬ãã£ãã¯ã¹ãèšå®ããããšã¯çã«ããªã£ãŠããŸãã ãŸããæ··ä¹±ãé¿ããããã«ãäŸå€ãªããã¹ãŠã®å€æ°ã«ãã¬ãã£ãã¯ã¹ãä»ããæ¹ãç°¡åã§ãã
ã泚æ
ããã·ãŒãžã£ãã©ã¡ãŒã¿ãå€æŽãããŠããå Žåã[ ãã¹ãã®åæ... ]ã³ã³ããã¹ãã¡ãã¥ãŒé
ç®ãã¯ãªãã¯ããŠãåãã¹ãã¹ã¯ãªãããæåã§æŽæ°ããå¿
èŠããããŸãã
æåã®ã·ããªãª
ãã®äŸãåçŽåããããã«ã1ã€ã®ã¡ãã»ãŒãžã®ã³ã¹ãã0.03
ãéã ãšä»®å®ããŸãã ãããŠãå¥åŠãªããšã«ãã¬ãŒãã³ã¯ã·ããªãªã®èª¬æã«éåžžã«é©ããŠããŸãã
: - : : , , , .
ãã¹ããäœæããæéã®æ¹æ³ã¯ããªããžã§ã¯ãããªãŒã®ããã·ãŒãžã£ãå³ã¯ãªãã¯ããŠã[ ãŠããããã¹ãã®äœæ... ]ã¡ãã¥ãŒé
ç®ãéžæããããšã§ãã 衚瀺ããããŠã£ã³ããŠã§ãããã«[ å®äº ]ãã¿ã³ãã¯ãªãã¯ã§ããŸãã åäžã®ãã¹ããå«ãQUEUE_MESSAGEã¹ã¯ãªããããŠããããã¹ãããã«ã«è¡šç€ºãããŸãã
ã³ã³ããã¹ãèšå®
ãŸããããŒã¿ããŒã¹ã«å¿
èŠãªããŒã¿ãå
¥åããå¿
èŠããããŸãã ç§ãã¡ã«ãšã£ãŠæã䟿å©ãªã®ã¯ãPL / SQLã¢ãŒãã䜿çšããŠã³ã³ããã¹ããæ§æããã³ãªã»ããããããšã§ããã ãã ãããªãã·ã§ã³ã¯ãããããã©ã€ãã©ãªã«å
¬éããããšã§ç°¡åã«åå©çšã§ããŸãã ã©ã€ãã©ãªããæ¢åã®ã¹ããããã³ããŒããã«ã¯ãããããããŠã³ãªã¹ãããéžæããŠã[ ã³ã㌠]ãã¿ã³ãã¯ãªãã¯ããŸãã å€æŽããã«ã[ ã³ã㌠]ãã¿ã³ã®ä»£ããã«äœ¿çšããå Žåã¯ã[ è³Œèª ]ãã§ãã¯ããã¯ã¹ãã¯ãªãã¯ããå¿
èŠããããŸãã
ã泚æ
æ¢åã®ããŒã¿ããŒã¹ããã¹ãã«äœ¿çšãããšããã¢ã€ãã¢ã¯é
åçã«æãããããããŸããã èšå®ã«ããŒã¿ãä¿åããã³ã³ããã¹ãããªã»ãããããšåŸ©å
ãããããã«èŠããŸã...ããããããããã®æ®µéã§ãã¹ãã®å®è¡äžã«äºæããªããšã©ãŒãçºçããå ŽåãããŒã¿ããŒã¹ã¯ãšã©ãŒäžã®åœ¢åŒã§è¡šç€ºãããããšã«æ³šæããŠãã ããããããŠã³ã³ããã¹ãã®ãªã»ããã¯å®è¡ãããŸããã ãããã£ãŠãã¯ãªãŒã³ãªããŒã¿ããŒã¹ã䜿çšããã®ãæåã§ãããã®ããŒã¿ããŒã¹ã¯ãæ§é ãããŒã¿ãç Žæããå Žåã«æããªããç°¡åã«å®å
šã«åäœæã§ããŸãã
ã³ã³ããã¹ãã調æŽããããã«ç©ºã®ããŒã¿ããŒã¹ã§äœæ¥ããŠãããšä»®å®ãããšãåŸæãã®é¡§å®¢ã¬ã³ãŒãã1åæ¿å
¥ããã ãã§æžã¿ãŸãã Post-paid clientãšåŒã°ããã©ã€ãã©ãªã«ããã«ä¿åã§ããŸã ã
ã³ã³ããã¹ãããªã»ãã
ãã¹ããåå®è¡ããã«ã¯ãè¿œå ããããŒã¿ãã¯ãªã¢ããå¿
èŠããããŸãã ãã ãããã®å Žåããã¹ãã®åœ±é¿ãåãããã¹ãŠã®ããŒãã«ãåçŽã«ã¯ãªã¢ã§ããŸãã ãã®ã¹ãããã¯ãå°æ¥äœ¿çšããããã«ã©ã€ãã©ãªã«ä¿åããå¿
èŠããããŸãã
ææŠãã
ãã¹ãèªäœã®å®è¡ã¯ãã¹ãã¢ãããã·ãŒãžã£ã®ãã©ã¡ãŒã¿ãŒãèšå®ããããšã§æ±ºå®ãããŸãã ããã§ãæ€èšŒã®ããã«åºåãã©ã¡ãŒã¿ã®å€ãèšå®ããããšãã§ããŸãã [ ãã¹ãçµæ]ãã§ãã¯ããã¯ã¹ã䜿çšããŠãåºåãã©ã¡ãŒã¿ãŒã®ãã§ãã¯ãç¡å¹ã«ã§ããŸãã ããŒãã«ã§åçã«æå®ããããã©ã¡ãŒã¿ãŒãåç
§ããŸãã
ã泚æ
å€èŠ³äžãããŒãã«å
ã§ããŠã¹ã䜿çšããŠãã©ã¡ãŒã¿ãèšå®ããããšã¯éåžžã«äŸ¿å©ã«æãããããããŸãããããã®ããŒãã«ã¯ã³ããŒã§ããªãããšã«çæããå¿
èŠããããŸãã ããã¯ãç¹ã«æ°ãããã¹ããçŸåšã®ãã¹ããš1ã€ã®å€ã ãç°ãªãå Žåã«ã次ã®ãã¹ããäœæããããã«ãã¹ãŠã®åŒæ°ãæåã§åèšå®ããå¿
èŠããããããå€æ°ã®åŒæ°ãæã€ããã·ãŒãžã£ã«ãšã£ãŠç¹ã«éèŠã§ãã ããŒãã«ãšã¯ç°ãªããåçã¯ãšãªïŒåçå€ã¯ãšãªïŒãã©ã€ãã©ãªã«ä¿åããŠãããåå©çšãŸãã¯ã³ããŒã§ããŸãã
äžã§ç€ºããããã«ãåçã¯ãšãªã®æ¹ã䟿å©ã§ãã ãŸãããªã¯ãšã¹ãã®åºåãã©ã¡ãŒã¿ã®ååã¯ãååã®æåŸã«$
èšå·ãè¿œå ããå¿
èŠãããããšã«æ³šæããŠãã ããã
select 1 as V_ID_CLIENT, '79052222222' as V_SENDER, '79161111111' as V_RECIPIENT, ' !' AS V_MESSAGE, 1 as V_IS_QUEUED$ from DUAL
ã泚æ
åçã¯ãšãªã¢ãŒãããããŒãã«ã¢ãŒãã«æ»ãã«ã¯ãåçã¯ãšãªã®å€ãå®å
šã«ã¯ãªã¢ããå¿
èŠããããŸãã
åºåãã©ã¡ãŒã¿ãŒã®ãã§ãã¯ãæå®ããã®ã§ãã¹ã¯ãªãããæ¢ã«å®è¡ããŠå€±æã確èªã§ããŸãã ãã¹ãŠãæ£ããè¡ããããšãã·ã¹ãã ã¯ãšã©ãŒãå ±åããã¯ãã§ãã ãã®æ®µéã§ä»ã®é害ãçºçããå Žåãèšå®ãæ£ãããããŸããã
ãã¹ããèœã¡çãããæãç°¡åãªæ¹æ³ã¯ãããã·ãŒãžã£ã®æ¬æã®åºåãã©ã¡ãŒã¿ã«1
ãå
¥åããããšSELECT 1 INTO IS_QUEUED FROM DUAL;
声æ
ãã¹ãã¯åã³ç·è²ã«ãªããŸãããå¿
èŠãªæ¡ä»¶ããã¹ãŠç¢ºèªããŠããŸããã ãããã¯ãåãã·ããªãªã®ä»ã®ãã¹ãã§ç¢ºèªã§ããŸãã æ°ãããã¹ããäœæããåã«ãæ¢åã®ãã¹ãã®ååãããã©ã«ãã®ããã¹ãå®è£
1ããããããžãã£ããªçµæãã«ãã·ããªãªå
šäœããã¢ã¯ãã£ããªåŸæãã¯ã©ã€ã¢ã³ããã¡ãã»ãŒãžãéä¿¡ãããã«å€æŽããããšããå§ãããŸãã
éèŠã§ã
åãã¹ãã¯ãã©ã³ã¶ã¯ã·ã§ã³å
ã§å®è¡ããããšç°¡åã«æšæž¬ã§ããŸãã ããããå®éã«ã¯ããã§ã¯ãããŸããã§ããã äºæããªããšã©ãŒãçºçããå ŽåãããŒã¿ããŒã¹ã¯æªå®çŸ©ã®ç¶æ
ã«ããå¯èœæ§ããããŸãã äºæããããšã©ãŒããã®åäœã¯é©çšãããŸããã
次ã®ãã¹ãã¯ã埮åŠãªãã£ãŒãããã¯ã®ããã«å¥ã®ãã¹ãã«é
眮ãããŸãããæ°ãããã¹ãã¯ããããã³ã³ããã¹ãã®ã»ããã¢ãããšãªã»ããã«æéãè²»ãããåãã¹ãã®å€±æã«ã¯ãã®åå ã«é¢ããæ確ãªã¡ãã»ãŒãžãæäŸãããããšãèŠããŠãã䟡å€ããããŸãã ãã®ã·ããªãªã§ã¯ç°ãªããã¹ãã®ãã¹ããåé¢ãã次ã®ã·ããªãªã§ã¯ãã¹ãŠã®ãã§ãã¯ã1ã€ã®ãã¹ãã«çµåããŸãã
ã泚æ
SQL Developerã§ã¯ã2ã€ã®ãã¹ããåæã«è¡šç€ºããããšã¯ã§ããŸããã ããªãŒå
ã®å¥ã®ãã¹ãã«ç§»åãããšãçŸåšã®ãã¹ãã¯åãããã«å
ã®æ°ãããã¹ãã«çœ®ãæããããŸãã ããã«ããã®ããã«ã2ã€ã®ç¬ç«ããã¹ã¯ããŒã«å¯èœãªé åã«åå²ããããšã¯ã§ããŸããã ãã ãã2ã€ã®ããã«éã®è¿
éãªç§»è¡ã®ããã«ããã¹ããŠã£ã³ããŠãšäžŠè¡ããŠããã·ãŒãžã£ã®ãœãŒã¹ã³ãŒããéããšéåžžã«äŸ¿å©ã§ãã
次ã®ãã¹ãã¯ãã¡ãã»ãŒãžããã¥ãŒã«å
¥ããããããšã確èªããããšã§ãã ã³ã³ããã¹ãã®èšå®ãšãªã»ããã¯ãã§ã«æå®ãããŠãããããã©ã€ãã©ãªããã®åçã¯ãšãªã䜿çšããæ¿èªãã§ãã¯ãèšå®ããå¿
èŠããããŸãã åçã¯ãšãªãã³ããŒããåŸããã§ã«æ€èšŒãããåºåãã©ã¡ãŒã¿ãŒããã§ãã¯ããããšã¯åœ¹ã«ç«ããªãããã«èŠããå ŽåããããŸãã ãã¹ãçµæãã§ãã¯ããã¯ã¹ããªã»ããã§ããŸãã ãã ãããã®ç¶æ
ã§ãã¹ããå®è¡ãããšããã¹ãã®1ã€ãç¡èŠãããããšãããããŸãã å人çã«ã¯ãç¡èŠããããã¹ãã¯æªå®æã®äœæ¥ã®è±¡åŸŽãªã®ã§ããã§ãã¯ããã¯ã¹ãé
眮ããå¿
èŠããããŸãã
ç³ãç«ãŠã確èªããæ¹æ³ã¯ããã€ããããŸãã ãªã¹ãã®æåã®é
ç®ã¯ããŒã«é¢æ°ã§ãã ããŒã«é¢æ°ãäœæãããšãããã€ã¢ãã°ã¯å®å
šã«é©åãªãã³ãã¬ãŒããæäŸããŸãïŒ
æ€èšŒã®ããã«ããã®ãã³ãã¬ãŒãã䜿çšããŠã dual
ãMESSAGE_QUEUE
ã«çœ®ãæããŠãããå¿
èŠãªãã£ã«ã¿ãŒãé©çšããŸãã 粟床ãé«ããã«ã¯ãæ¡ä»¶ãl_count <> 0
ããl_count = 1
ã«å€æŽããå¿
èŠããããŸãã ãã®åŸãå°æ¥ã®äœ¿çšã®ããã«é¢æ°ãã©ã€ãã©ãªã«å®å
šã«ä¿åã§ããŸãã
ã泚æ
ã©ã€ãã©ãªå
ã®ãã¹ãŠã®ãšã³ããªã¯ãã¿ã€ãã«åŸã£ãŠä¿åãããŸãã ããã¯ãããšãã°ãæ¿èªã®æ€èšŒãªã©ãå°æ¥äœ¿çšããå¿
èŠãããå Žåãååã ãã§ãªãã¿ã€ããèŠããŠããå¿
èŠãããããšãæå³ããŸãã ããã¯ãç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãéåžžã«çæéã§éåžžã«äžäŸ¿ã«ãªããŸãã
ãã¹ããå®è¡ãããšããšã©ãŒã衚瀺ãããã¯ãã§ãã éåžžã«ç°¡åã«ä¿®æ£ã§ããŸãã
INSERT INTO MESSAGE_QUEUE(ID_CLIENT, SENDER, RECIPIENT, MESSAGE) VALUES(V_ID_CLIENT, V_SENDER, V_RECIPIENT, V_MESSAGE);
ããã§ããã¹ãŠã®ãã¹ããæåããããšã確èªã§ããŸãã
ã泚æ
ãã¹ãã§äœæ¥ããå Žåããªããžããªã¯ãããã¯ããããããäœæ¥ã®æåŸã«SQL Developerãéãããããªããžããªãéããå¿
èŠããããŸãïŒãªããžããªã®éžæ解é€ïŒã
æåŸã«ããã©ã³ã¶ã¯ã·ã§ã³ã¬ã³ãŒãã確èªããŸãã ãããè¡ãã«ã¯ã次ã®çš®é¡ã®æ€èšŒ-ã¯ãšãªçµæã®æ¯èŒãéžæããŸãã ååã瀺ããšãããéåžžã«åçŽã«æ©èœããŸããçµæãäžèŽãã2ã€ã®ã¯ãšãªãæå®ããå¿
èŠããããŸãã æ£ç¢ºãªæ¥ä»ãšæå»ãèŠã€ããããšã¯äžå¯èœã§ããããã10ç§ä»¥å
ã«ä»»æã®å€ã§æºè¶³ããããšãã§ããŸãã
ãã¹ããå®è¡ããåŸããããŸããªValidation : Compare query results check found differences
ãšã©ãŒã Validation : Compare query results check found differences
衚瀺ãããŸãValidation : Compare query results check found differences
ã ã1ã€ã®æè¿ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¯ãã©ã€ãã©ãªå
ã®æåŸã®ãã§ãã¯ã®ååã§ãã ãããŠããã®ãªãã·ã§ã³ã¯ãã§ã«äŸ¡å€ã®ããããŒã«ã§ãããçµæã®éããæ£ç¢ºã«ç€ºãããšãã§ããã°çŽ æŽãããã§ãããã
æé ã«å¿
èŠãªæ©èœãè¿œå ããŸãã
INSERT INTO TRANSACTIONS(ID_CLIENT, VALUE) VALUES(V_ID_CLIENT, 0.03);
ãããã°
次ã®ãã¹ãå®è¡åŸããšã©ãŒãæ¶ããŠããªãããšãçªç¶å€æããŸããã ããããäžèšã®ã³ãŒãã§ãã§ã«ãšã©ãŒã«æ°ã¥ããŠããã§ãããããå®éã®ç¶æ³ã§ã¯ãç¶æ³ã¯ã¯ããã«è€éã§ãã ããŒã«ã«ã¯éãã衚瀺ãããªããããçç±ãæåã§èŠã€ããå¿
èŠããããŸãã æ®å¿µãªãããSQL Developerã®ãããã°æ©èœã¯ããã§ã¯åœ¹ã«ç«ã¡ãŸããã ã€ãŸãããªã»ãããå®è¡ããã«ãã¹ããå®è¡ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãå¥ã®ã¹ã¯ãªãã-ãããã°ãäœæã§ããŸãã ããæ£ç¢ºã«ã¯ã2ã€ïŒ1ã€-ãªã»ãããªãã§ãéåäœãã¹ããšåãåçèŠæ±ã䜿çšããŠ-äœãèµ·ãã£ãŠããããææ¡ããããã 2çªç®-ã³ã³ããã¹ããèšå®ããã«ãªã»ããã䜿çšããŠ-æåãåé€ããããã
æåã®ã¹ã¯ãªãããéå§ããåŸãããŒãã«ã®å
容ã確èªããæ€èšŒèŠæ±ã確èªã§ããŸãã ããã§ãåé¡ãæ€èšŒãªã¯ãšã¹ãã«æ£ç¢ºã«ãã£ãããšãæããã«ãªããŸããã ããŒã¿ãæ¶å»ããããã«2çªç®ã®ã¹ã¯ãªãããå®è¡ããããšãå¿ããªãã§ãã ããããã¹ãæ¡ä»¶ãä¿®æ£ãã2åç®ã®å®è¡ãæé
ããŸãã ããã§ãã¹ãŠãæŽããŸããã ãããã°ã¹ã¯ãªããã¯å°æ¥ã®ããã«æ®ããŠããããšãã§ããæåã«å®æããã¹ã¯ãªããã¯æ°ãããã¹ãã¹ã€ãŒãã«é
眮ã§ããŸãã
2çªç®ã®ã·ããªãª
ã¡ãã»ãŒãžãæ£åžžã«éä¿¡ããããã®ã¹ã¯ãªãããã§ããã®ã§ãéä¿¡ã«å€±æããå Žåã®ã¹ã¯ãªãããè©Šãããšãã§ããŸãã ããšãã°ãåŸæãã®é¡§å®¢ãéã¢ã¯ãã£ãã®å ŽåïŒ
: - : : , , .
æ°ããã¹ã¯ãªãããäœæããå¿
èŠããããŸãã ãŸããã³ã³ããã¹ãèšå®ãšåçã¯ãšãªã埮調æŽããå¿
èŠããããŸãããããã¯æåããæ°ãããã®ãäœæãããããã¯ããã«ç°¡åã§ãã
ã³ã³ããã¹ããèšå®ããã«ã¯ãPL / SQLã¹ããããActive post-pay clientããã³ããŒããŸããããã§ã 1
ã0
眮ãæãããInactive post-pay clientããšããã©ã€ãã©ãªã«å
¬éããŸãã åçãªã¯ãšã¹ãã«å¯ŸããŠãåãããšãç¹°ãè¿ããæ°ãããªã¯ãšã¹ãã«ãæªéä¿¡ã¡ãã»ãŒãžããšããååãä»ããŸãã ã³ã³ããã¹ãããªã»ããããã«ã¯ãæ¢åã®æé ã䜿çšããŸãã
å®è¡åŸããã¹ãã§ãšã©ãŒã衚瀺ãããŸãã ä¿®æ£ã¯éåžžã«ç°¡åã§ãã SELECT 1 INTO V_IS_QUEUED FROM DUAL
ãSELECT IS_ACTIVE INTO V_IS_QUEUED FROM CLIENTS WHERE ID=V_ID_CLIENT
-ãã¹ãŠãåã³æ©èœããŸãã
次ã«ããã©ã³ã¶ã¯ã·ã§ã³ãä¿åãããŠããªãããšã確èªããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã次ã®ã¿ã€ãã®æ€èšŒ-ããŒãã«ã®æ¯èŒã䜿çšããŸãã æåã¯æ¯èŒãããã®ããªãããã«èŠãããããããŸããããã³ã³ããã¹ããèšå®ããéã«ãæ¢åã®ããŒãã«ãäžæçãªããŒãã«ã«ã³ããŒããæ©äŒããããŸãã ããã¯ç§ãã¡ã«ãŽã£ããã§ãããã©ã³ã¶ã¯ã·ã§ã³ãäžæããŒãã«ã«ã³ããŒããããã·ãŒãžã£ãåŒã³åºããåŸãçµæãæ¯èŒã§ããŸãã äž»ãªããšã¯ãã³ã³ããã¹ãããªã»ãããããšãã«ãã®ããŒãã«ãåé€ããããšãå¿ããªãããšã§ãã 埩å
ãåé€ãããã³åçŽãªåé€ã®2ã€ã®ãªãã·ã§ã³ããããŸãã 埩å
ãããã®ããªãããã2çªç®ã®ãªãã·ã§ã³ãéžæããŸãã ã¯ãšãªæ¯èŒã®å Žåã®ããã«ãå¯äžã®ãã£ãŒãããã¯ãªãã·ã§ã³ã¯äžèŽããããã©ããã§ãã
ãã¹ãã®å®è¡åŸã«ãšã©ãŒãè³è³ããåŸã解決çã«ã€ããŠèããããšãã§ããŸãã ããšãã°ãæ°ãã«æŽæ°ãããV_IS_QUEUEDã䜿çšããŠãæ¡ä»¶ã§æ¿å
¥ãã©ããã§ããŸãã
IF V_IS_QUEUED = 1 THEN INSERT INTO TRANSACTIONS (ID_CLIENT, VALUE) VALUES (V_ID_CLIENT, 0.03); END IF;
ããã·ãŒãžã£ãã³ã³ãã€ã«ãããã¹ããå®è¡ããŸã-ãã¹ãŠãæ©èœããŸãã
çµè«ãšããŠãã¡ãã»ãŒãžãã¥ãŒãå€æŽãããŠããªãããšã確èªããå¿
èŠããããŸãã ãŸãããã©ã³ã¶ã¯ã·ã§ã³ããã¯ã¹ã®æšªã®æ¡ä»¶å
ã«ã¡ãã»ãŒãžããã¯ã¹ãããã«çœ®ãããã«æãããã¿ã䌎ããŸãããããã¯èŠåŸãžã®å±ãŸãã«ãªããŸãã ãããã£ãŠãæåã«ãã®ã¹ããŒãã¡ã³ãã®è¿œå ãã§ãã¯ãäœæããŸãã 次ã®ã¿ã€ãã®ãã§ãã¯ã¯ãè¡ãè¿ããªãã¯ãšãªã§ãã åãã¹ãåŸã«ãã¹ãŠã®ããŒã¿ãå®å
šã«ã¯ãªã¢ããããããã®ãããªã¯ãšãªãšããŠSELECT * FROM MESSAGE_QUEUE
ãæå®ããã ãã§ååã§ãã
ãã¹ãå®è¡ã§ã¯ãšã©ãŒã衚瀺ãããŸãããæ¡ä»¶å
ã«æ¿å
¥ãé
眮ããããšã§ç°¡åã«é€å»ã§ããŸãã ããã§ã2çªç®ã®ã·ããªãªã¯çµäºã§ãã
çµè«
SQL Developerã䜿çšããŠãTDDã¡ãœããã䜿çšããŠã¹ãã¢ãããã·ãŒãžã£ãéçºã§ããŸãã å€æ°ã®æ¬ ç¹ã«ããããããããã®ããã±ãŒãžã¯ãã¹ãã¢ãããã·ãŒãžã£ãéçºããããã®ãã©ãããã©ãŒã ãæäŸããéçºè
ãæ¢åã®ããã·ãŒãžã£ã®æ©èœãç°¡åãã€èªä¿¡ãæã£ãŠå€æŽããã³æ¡åŒµã§ããããã«ããŸãã
æ®å¿µãªããããã¹ããªããžããªã¯Oracle DBMSã§ã®ã¿äœæã§ããŸãã ããã«ãPostgreSQLãMySQLãªã©ã®ãµãŒãããŒãã£DBMSããã¹ãçšã®ããŒã¿ããŒã¹ãšããŠäœ¿çšããããšãããšããã¹ããµãã·ã¹ãã ãã¯ã©ãã·ã¥ããŸãã ãŸããç¶ç¶ççµ±åã·ã¹ãã ã§SQL Developerã䜿çšãããšå€ãã®åé¡ãçºçããããšãå€æããŸããããããã¯å¥ã®è©±ã§ãã
[1] Oracle SQL Developer- http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
[2] Oracle SQL Developerãã«ãïŒãŠããããã¹ããªããžããª-https: //docs.oracle.com/cd/E15846_01/doc.21/e15222/unit_testing.htm#RPTUG45067
[3] xUnit- https://ru.wikipedia.org/wiki/XUnit