안녕하세요 오라클 초보 인사드립니다.
쿼리 수정하다가 막혀서..오랜만에 질문 드립니다.
프로시저는 계획을 생성하는 프로시저구 반기마다 생성해요~
그러니까 2014년상반기, 2014년하반기 이렇게요.
단말기를 가지고 나가서 계획에서 생성된 칼럼에 있는 메모란에다 내용을 넣구요.
2014년하반기에 또 계획을 생성시키는데
2014년상반기에 있는 메모데이터가 계획생성할때 자동으로 고객에 맞게 이전에 되어서
인서트가 되어야하는데..
밑의 프로시저를 보면 제가 메모데이터 추가라고 주석을 달아놨는데..
칼럼안에 셀렉트쿼리를 추가해서 입력받은 년도가 2014년하반기이면
2014년상반기의 데이터가 조회되어서 인서트될 내용에 포함이 되도록..추가했는데..
저렇게 하면 예를들면 조회될 데이터 로우 첫번째의 메모데이터가 'TEST' 이면
계획생성된 모든 고객들의 메모데이터가 'TEST'로 나오네요. 전기의 메모데이터가 없으면
그냥 없는데로. 있으면 그 고객의 메모가 인서트가 되어야 하는데 말이죠..
매칭을 어떻게 시켜야하는지 모르겠어요.
"계획생성되는 고객들 = 그고객의 전기 메모데이터" 이렇게 말이죠. 일단 프로시저 밑에 첨부하겠습니다.
그리고 또 하나 질문이 있는데 메모데이터 검색하는 조건에 입력받은 년도, 반기의 전기의 데이터가 조회인데..
예를들면 입력값이 2014/2 이면 조회는 2014/1,
입력받은 값이 2015/1 이면 2014/2 이렇게요. 디코드문 써서 입력받은 반기 값이 1이면 2로, 년도는 그대로,
입력받은 반기 값이 2이면 1로 년도는 -1, 이런식으로 하면 될까요?
수정하다가 머리가 안돌아가서 이렇게 질문드립니다. 아시는분 답변 부탁드릴게요.ㅠㅠ 감사합니다. 답변기다릴게요~
---------------------계획생성 프로시저 샘플------------------
(
P_YEAR IN VARCHAR2 , -- 변수(년도), 값은 2014 가 들어갈 예정
P_HF_YEAR IN VARCHAR2 ,-- 변수(반기), 값은 2가 들어갈 예정
P_TEST_AREA IN VARCHAR2--변수(지역)
)
AS
/**************************************************************
계획생성 프로시저
***************************************************************/
V_SEQ DECIMAL(28) ;-- 자동 채번
V_CNT NUMBER(3); -- 카운트용
BEGIN
SELECT NVL(TO_NUMBER(MAX(SUBSTR(ID_NUM,9,6))), 0)
INTO V_SEQ
FROM TESTDB
WHERE ID_NUM LIKE TO_CHAR(SYSDATE,'YYYYMMDD')||'%';
--*******************************************************************
INSERT INTO TESTDB
(ID_NUM,
..................................................................
TX_MEMO
)
SELECT
TO_CHAR(SYSDATE,'YYYYMMDD') || TRIM(TO_CHAR(ROWNUM+V_SEQ,'000000'))
.................................................................
-- 메모데이터 추가
, (SELECT TX_MEMO FROM
(SELECT * FROM TESTDB
WHERE TX_MEMO IS NOT NULL
AND YY_INSP = '2014' AND HF_INSP = '1'
--실제 조건은 P_YEAR = '2014', P_HF_YEAR = '2' 인경우
2014/1의 데이터가 검색될수 있는 조건.
ORDER BY ID_NUM DESC
--로우가 2개 이상일 때 ID가 최신인 데이터만 가져올 수 있도록
)
WHERE ROWNUM = '1')
-- 로우가 2개 이상일 때 ID가 최신인 데이터만 가져올 수 있도록
FROM TABLE1 A, TABLE2 B, TABLE3 C...........
WHERE 조건1,2,3,4,5.................
.........................
AND B.YEAR = P_YEAR
AND B.HF_YEAR = HF_YEAR
AND A.TEST_AREA = P_TEST_AREA
AND A.NO_CUSTOMER NOT IN (SELECT NO_CUSTOMER
-- 이미 계획에 있는 고객들은 빠지도록.
FROM TESTDB
WHERE YEAR = P_YEAR
AND HF_YEAR = P_HF_YEAR
AND TEST_AREA = P_TEST_AREA);
RETURN;
EXCEPTION
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR (-20001, 'TEST' || SQLERRM);
END TEST;
/
--------------------- 프로시저 샘플 종료------------------------- |