안녕하세요. UPDATE문을 한번에 쓰고 싶습니다. 1 7 46,176

by 곰돌이 [SQL Query] UPDATE ORACLE [2013.03.15 14:59:50]


안녕하세요 신입개발자입니다. ㅜㅜㅋ

UPDATE ENDUSER
SET USER_NAME = '으악', INSERT_DATE = sysdate
WHERE USER_ID = '1';
UPDATE ENDUSER
SET USER_NAME = '으악', INSERT_DATE = sysdate
WHERE USER_ID = '2';
UPDATE ENDUSER
SET USER_NAME = '으악', INSERT_DATE = sysdate
WHERE USER_ID = '5';

이런식으로 업데이트구문
ENDUSER테이블의 USER_ID컬럼은 PK이구요

INSERT문은 FROM DUAL UNION ALL식으로 묶어서 한번의 INSERT문으로 쓸 수 있었는데요

같은 방식으로 UPDATE문도 쓸 수 있을까요?


by 약쟁이총각 [2013.03.15 15:03:11]

UPDATE ENDUSER
SET USER_NAME = '으악', INSERT_DATE = sysdate
WHERE USER_ID in ('1','2','5');

by 손님 [2013.03.15 15:07:42]
답변감사합니다.. 그러하면..
UPDATE ENDUSER 
SET USER_NAME = '으악', INSERT_DATE = sysdate
WHERE USER_ID = '1';
UPDATE ENDUSER 
SET USER_NAME = '홍씨', INSERT_DATE = sysdate
WHERE USER_ID = '2';
UPDATE ENDUSER 
SET USER_NAME = '김씨', INSERT_DATE = sysdate
WHERE USER_ID = '5';

이러한 경우라면 어떻게 해야할까요??
질문을 너무 생각없이해서 죄송합니다. ㅜ.ㅜ

by 곰돌이 [2013.03.15 15:16:10]
셀프답변..
UPDATE enduser
SET user_name = case user_id when '1' then '김'
                     when '2' then '수'
                     when '3' then '박' 
                else user_name end,
    insert_date = case user_id  when '1' then sysdate
                      when '2' then sysdate
                      when '3' then sysdate 
                      else insert_date END
WHERE user_id IN ('1','2','3')
이런식으로 하면돼긴돼는군요..

by 마농 [2013.03.15 15:35:58]
 sysdate 은 Case 안 쓰셔도 되요 ^^

by 손님 [2013.03.15 17:43:21]

WITH
TBL AS (
SELECT 1 ID,'으악' NAME FROM DUAL UNION ALL
SELECT 2 ID,'홍씨' NAME FROM DUAL UNION ALL
SELECT 5 ID,'김씨' NAME FROM DUAL
)

UPDATE ENDUSER A
SET USER_NAME = (
    SELECT NAME
    FROM TBL WHERE ID = A.USER_ID)
   ,INSERT_DATE = SYSDATE
WHERE EXISTS (
    SELECT 1
    FROM TBL WHERE ID = A.USER_ID)
;


by 곰돌이 [2013.03.15 21:52:29]
오 WITH절 방법도 있군요..
그런데 실행해보니 에러가 나옵니다.. ㅜㅜ
ORA-00928: missing SELECT keyword
----------------------------------------------------
WITH
TBL AS (
SELECT '1' ID,'으악' NAME FROM DUAL UNION ALL
SELECT '2' ID,'홍씨' NAME FROM DUAL UNION ALL
SELECT '5' ID,'김씨' NAME FROM DUAL
)
UPDATE ENDUSER A
SET USER_NAME = (
    SELECT NAME
    FROM TBL WHERE ID = A.USER_ID)
   ,INSERT_DATE = SYSDATE 
WHERE EXISTS (
    SELECT 1
    FROM TBL WHERE ID = A.USER_ID)

by 마농 [2013.03.16 10:22:24]
 
-- With 문은 Select 문 앞에 와야 합니다.
UPDATE enduser a
   SET user_name = (
                    WITH tbl AS
                    (
                    SELECT 1 id, '으악' name FROM dual
                    UNION ALL SELECT 2, '홍씨' FROM dual
                    UNION ALL SELECT 5, '김씨' FROM dual
                    )
                    SELECT name
                      FROM tbl
                     WHERE id = a.user_id
                    )
     , insert_date = sysdate 
 WHERE a.user_id IN (1,2,5)
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입