SQLite Update 쿼리 Oracle로 변환 질문입니다. 0 6 1,388

by 시리 [SQL Query] [2017.01.16 12:06:52]


테이블이 다르고 온라인/오프라인 기능을 지원해야 해서 
안드로이드에서 쓰는 sqlite의 업데이트 쿼리인 이 쿼리문을

 update survey_his  
                 set  
                 dept_id = (select dept_id from survey_prod where survey_his.dept_id = survey_prod.dept_id) ,   
                 LOCA_ID = (select LOCA_ID from survey_prod where survey_his.LOCA_ID = survey_prod.LOCA_ID) ,  
                 EMP_ID = (select EMP_ID from survey_prod where survey_his.EMP_ID = survey_prod.EMP_ID) ,  
                 PROD_STATUS_FLG = (select PROD_STATUS_FLG from survey_prod where survey_his.PROD_STATUS_FLG = survey_prod.PROD_STATUS_FLG)  
                 where survey_his.prod_Barcode = ?  

이런 식으로 

	query =  UPDATE product P 
 SET (DEPT_ID, LOCA_ID, EMP_ID, PROD_STATUS_FLG ) 
 = ( SELECT SURV_DEPT_ID, SURV_LOCA_ID, SURV_EMP_ID, PROD_STATUS_FLG 
 FROM surveyH S 
 WHERE S.prod_barcode = ?  000000010087
 AND S.SURV_YEAR = ?  2016
 AND S.SURV_NO = ? )  5
 WHERE P.PROD_BARCODE = ?  000000010087	

오라클 구문으로 바꿨습니다.

 

이 쿼리들은 한개씩 지원하는 것이라 괜찮았는데요

 

대량 업데이트 하는 법을 잘 모르겠습니다.

 

sqlite 구문은 이렇게 형성되어져 있습니다.

  update survey_his  
set  
dept_id = (select dept_id from survey_prod where survey_his.dept_id = survey_prod.dept_id) ,   
LOCA_ID = (select LOCA_ID from survey_prod where survey_his.LOCA_ID = survey_prod.LOCA_ID) ,  
EMP_ID = (select EMP_ID from survey_prod where survey_his.EMP_ID = survey_prod.EMP_ID) ,  
PROD_STATUS_FLG = (select PROD_STATUS_FLG from survey_prod where survey_his.PROD_STATUS_FLG = survey_prod.PROD_STATUS_FLG)  
where survey_his.dept_id = ? ;

 

 

 

부서 코드로 구분해서 부서별로 업데이트 하는 구문입니다.

 

검색을 해 봐도 

 


UPDATE product P
SET (DEPT_ID, LOCA_ID, EMP_ID, PROD_STATUS_FLG ) = 
( SELECT SURV_DEPT_ID, SURV_LOCA_ID, SURV_EMP_ID, PROD_STATUS_FLG FROM surveyH S 
WHERE S.SURV_DEPT_ID = 1 AND S.SURV_YEAR = 2016 AND S.SURV_NO = 5 )

 

이런 식으로밖에 못 짜겠어서 도움의 손길 요청드립니다 ㅠㅠ...

 

by 우리집아찌 [2017.01.16 12:52:13]

위에 보면 컬럼 하나씩 서브쿼리 하셨네요.

테이블 두개의  구조(조인할 컬럼)을 설명해주세요

 


by 시리 [2017.01.16 13:17:30]

surveyH - 에서 
deptId, locaId, EmpId, STatusFlag를 읽어와서

product에 업데이트 시켜줘야 하는 쿼리인데

생긴 거는 거의 동일하나 컬럼명이 약간 다르고
(이게 마스터와 로그 테이블이라고 들었습니다)

오라클에서는
surv_year와 surv_no라는 컬럼이 있어서 그거를 where절에 넣어줘야 합니다 


by 우리집아찌 [2017.01.16 13:49:14]

surveyH 랑 product 조인이 되는게 있어야 해당 컬럼에 데이터를 넣을것 같은데요.

SELECT SURV_DEPT_ID, SURV_LOCA_ID, SURV_EMP_ID, PROD_STATUS_FLG FROM surveyH S 
WHERE S.SURV_DEPT_ID = 1 AND S.SURV_YEAR = 2016 AND S.SURV_NO = 5

의 쿼리는 하나의 로우만 만들어지나요? 만약 DEPT_ID 가 PK 이라고 하면

WHERE S.SURV_DEPT_ID = 1   -> WHERE S.SURV_DEPT_ID  = P.DEPT_ID

라고 고치시면 될텐데요.


by 마농 [2017.01.17 14:16:46]

sqlite 원본 쿼리 그대로 Oracle 에서 사용하셔도 됩니다.
구문 동일합니다.
물론 바꾸면 더 좋긴 한데 완전 거꾸로 바꾸셨네요.
원본테이블과 타겟테이블을 바꿔버리셧네요...헐...


by 시리 [2017.01.17 14:51:25]

ㅠㅠ 저게 온라인에서는 테이블명이 다 다르거나 반대로 되어 있더라구요... 

 

결론적으로는 

 

UPDATE product A
SET (A.DEPT_ID, A.LOCA_ID, A.EMP_ID, A.PROD_STATUS_FLG) = 
( SELECT B.SURV_DEPT_ID, B.SURV_LOCA_ID, B.SURV_EMP_ID, B.PROD_STATUS_FLG
  FROM surveyH B
  WHERE A.PROD_ID = B.PROD_ID
  AND A.PROD_BARCODE = B.PROD_BARCODE
  AND B.SURV_YEAR = 2016
  AND B.SURV_SEQ = 4
)
WHERE A.DEPT_ID = 1

 

요런 거였습니다...


by 마농 [2017.01.18 10:06:18]

글쎄요?

테이블만 다른게 아닌 것 같네요.

쿼리가 전혀 다른 쿼리네요.

전반적으로 다 다른 듯 합니다.

원본쿼리를 보고 고치실게 아니라 요구사항을 정리해서 새로 짜셔야 할 듯.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입