제목 | Toad 와 같은 DB관리 도구에서 실행되는 쿼리가 simple_query에서는 에러가납니다. | ||
---|---|---|---|
글쓴이 | 래디안트 | 작성시각 | 2013/05/28 03:48:56 |
|
|||
안녕하세요. 우선 개발환경은 Web 서버는 Ubuntu Server 기반에 Apache2 + PHP5 이구요. DB 서버는 Oracle 을 사용하고 있습니다. CI를 이용해서 간단한 Web UI를 작성하다가 기존에 별도로 제작하여 사용중이던 cron을 CI쪽으로 병합하는 과정에서 문제가 생겨서 질문드립니다. 문제가 되는 쿼리는 아래와 같습니다. MERGE INTO MLMS_DAILY_STAT AA USING ( SELECT A.DET_DATE, COUNT (A.DET_DATE) AS ABN_CNT FROM ( SELECT TO_CHAR ( TO_DATE ('1970-01-01', 'YYYY-MM-DD') + NUMTODSINTERVAL (MAX (UD_REGTIME), 'SECOND') + NUMTODSINTERVAL (9, 'HOUR'), 'YYYY-MM-DD') AS DET_DATE FROM MLMS_URI_DETECTION WHERE UD_REGTIME > (TRUNC(SYSDATE - 1) - TO_DATE('01-01-1970 09:00:00', 'MM-DD-YYYY HH24:MI:SS')) * 86400 GROUP BY UW_IDX, U_IDX) A GROUP BY A.DET_DATE ORDER BY A.DET_DATE) BB ON (AA.DS_DATE = BB.DET_DATE) WHEN MATCHED THEN UPDATE SET AA.DS_ABN_CNT = BB.ABN_CNT WHEN NOT MATCHED THEN INSERT (AA.DS_DATE, AA.DS_ABN_CNT) VALUES (BB.DET_DATE, BB.ABN_CNT) 이 쿼리를 독립적으로 PHP OCI 모듈을 이용해서 작업할 때는 문제없이 동작하고 있었으며, Toad와 같은 DB관리 도구에서도 정상적으로 실행되는 쿼리입니다. 헌데 이 쿼리를 CI쪽으로 가져와서 simple_query() 함수의 인자로 전달하면 그냥 FALSE가 나타납니다.. ㅠ 해당 쿼리를 query() 함수에 전달하면 아래와 같은 오류가 나타나구요.. ㅠㅠ (콘솔화면에서 실행하는 것이라 HTML 태그가 그대로 보이는 점 양해 부탁드립니다.) <div id="container"> <h1>데이터베이스 오류가 발생하였습니다.</h1> <p>Error Number: </p><p></p><p>MERGE INTO MLMS_DAILY_STAT AA USING ( SELECT A.DET_DATE, COUNT (*) AS ABN_CNT FROM ( SELECT TO_CHAR ( TO_DATE ('1970-01-01', 'YYYY-MM-DD') + NUMTODSINTERVAL (MAX (UD_REGTIME), 'SECOND') + NUMTODSINTERVAL (9, 'HOUR'), 'YYYY-MM-DD') AS DET_DATE FROM MLMS_URI_DETECTION WHERE UD_REGTIME > '1369580400' GROUP BY UW_IDX, U_IDX) A GROUP BY A.DET_DATE ORDER BY A.DET_DATE) BB ON (AA.DS_DATE = BB.DET_DATE) WHEN MATCHED THEN UPDATE SET AA.DS_ABN_CNT = BB.ABN_CNT WHEN NOT MATCHED THEN INSERT (AA.DS_DATE, AA.DS_ABN_CNT) VALUES (BB.DET_DATE, BB.ABN_CNT)</p><p>Filename: /home/ldh0227/public_html/models/cron_model.php</p><p>Line Number: 37</p> </div> 이상한 점은 오류코드에 대한 정보가 비어있는채로 나타난다는 것이구요.. 이런 경우에는 어떻게 해야 할까요...? |
|||
태그 | 오라클,Oracle,simple_query | ||
다음글 | session 생성 후 초기화 (3) | ||
이전글 | ci 라이센스? 관련 질문입니다.. (2) | ||
milosz
/
2013/05/28 08:17:06 /
추천
0
escape 문제일 듯 한데 모델 부분에 어떻게 작성하셨는지 확인해야 정확히 알 수 있을 것 같네요.
오류코드로 확인이 안되면 profiler를 켜서 확인해보는 것도 좋은 방법입니다.
|
한대승(불의회상)
/
2013/05/28 09:08:31 /
추천
0
$this->output->enable_profiler();
simple_query()로 테스트 하시면 실제 CI가 해석하는 쿼리가 나올듯 하네요. |
래디안트
/
2013/05/28 11:41:52 /
추천
0
모델에서 함수는 아래와 같이 작성했습니다.
function makeDailyStatABN() { $strQuery = <<<EOD MERGE INTO MLMS_DAILY_STAT AA USING ( SELECT A.DET_DATE, COUNT (A.DET_DATE) AS ABN_CNT FROM ( SELECT TO_CHAR ( TO_DATE ('1970-01-01', 'YYYY-MM-DD') + NUMTODSINTERVAL (MAX (UD_REGTIME), 'SECOND') + NUMTODSINTERVAL (9, 'HOUR'), 'YYYY-MM-DD') AS DET_DATE FROM MLMS_URI_DETECTION WHERE UD_REGTIME > (TRUNC(SYSDATE - 1) - TO_DATE('01-01-1970 09:00:00', 'MM-DD-YYYY HH24:MI:SS')) * 86400 GROUP BY UW_IDX, U_IDX) A GROUP BY A.DET_DATE ORDER BY A.DET_DATE) BB ON (AA.DS_DATE = BB.DET_DATE) WHEN MATCHED THEN UPDATE SET AA.DS_ABN_CNT = BB.ABN_CNT WHEN NOT MATCHED THEN INSERT (AA.DS_DATE, AA.DS_ABN_CNT) VALUES (BB.DET_DATE, BB.ABN_CNT) EOD; $bRes = $this->db->simple_query($strQuery); return $bRes; } 또한 프로파일러를 켜도 실행된 쿼리가 없다고만 나와서요.. ㅠ_ㅠ) 그리고 컨트롤러에서는 저 함수를 단지 호출만 하고 있습니다. |
milosz
/
2013/05/28 15:43:17 /
추천
0
음... 개행이 문제가 될 것 같진 않지만 일단 줄바꿈 없이 한줄로 변환하셔서 simple_query 대신 query로 해보시는건 어떨까요?
|