2015-01-08 2 views
0

У меня есть запрос:обновить несколько столбцов в оракула

UPDATE SDM_KARYAWAN 
SET (ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN) = 
(
    SELECT ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN FROM 
     (
     SELECT TO_CHAR(TGL_SK,'YYYYMMDD') URUT,ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN 
     FROM SDM_KARYAWAN_JABATAN 
     WHERE ID_KARYAWAN = '0081005' 
     ORDER BY URUT DESC 
     )DETAIL 
    WHERE ROWNUM = 1 
)X 
WHERE ID_KARYAWAN = '0081005' 

Но показать ошибку, как это: [Err] ORA-00933: SQL команды не правильно закончился

На самом деле я могу использовать этот код:

UPDATE TABLE1 SET COL1 = 'A',COL2='B',COL3='C'... 

но что я хочу обновить несколько столбцов, как это:

UPDATE TABLE1 SET (COL1,COL2,COL3) (SELECT COL1,COL2,COL3 FROM TABLE2) 

:: EDIT :: Я попытался это:

SELECT A.ID_DIVISI,A.ID_UNIT_KERJA,A.ID_JABATAN, 
     DETAIL.ID_DIVISI X,DETAIL.ID_UNIT_KERJA Y,DETAIL.ID_JABATAN Z 
    FROM SDM_KARYAWAN A 
    INNER JOIN 
    (
    SELECT ID_KARYAWAN, TO_CHAR(TGL_SK,'YYYYMMDD') URUT,ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN 
    FROM SDM_KARYAWAN_JABATAN 
    WHERE ID_KARYAWAN = '0081005' 
    ORDER BY URUT DESC 
    )DETAIL 
    ON DETAIL.ID_KARYAWAN = A.ID_KARYAWAN 
    WHERE A.ID_KARYAWAN = DETAIL.ID_KARYAWAN 
    AND ROWNUM = 1 

Результаты:

ID_DIVISI ID_UNIT_KERJA ID_JABATAN X Y Z 
----------------------------------------------------------- 
D1   D5000    D51000  D2 D200 D2100 

Теперь я хочу, чтобы обновить столбцы в таблице SDM_KARYAWAN с X, Y, Z значение. чего не хватает в моем запросе? пожалуйста.

+0

, что является причиной его –

ответ

2

Это будет работать. Пожалуйста, проверьте.

UPDATE SDM_KARYAWAN 
SET (ID_DIVISI, 
    ID_UNIT_KERJA, 
    ID_JABATAN) = 
     (SELECT ID_DIVISI, ID_UNIT_KERJA, ID_JABATAN 
     FROM ( SELECT TO_CHAR (TGL_SK,'YYYYMMDD') 
          URUT, 
         ID_DIVISI, 
         ID_UNIT_KERJA, 
         ID_JABATAN 
        FROM SDM_KARYAWAN_JABATAN 
        WHERE ID_KARYAWAN = '0081005' 
       ORDER BY 1 DESC) DETAIL 
     WHERE ROWNUM = 1) 
WHERE ID_KARYAWAN = '0081005' 
+0

@RubahMalam, вы можете принять этот ответ, если он вам помог. – Himanshu

+1

@ Химаншу принят! – RubahMalam

+0

@ Химаншу вы можете возвысить его, если хотите, чтобы этот ответ заслуживал –

0

попробовать это:

UPDATE 
(SELECT 
Table1.Col1 as OLD1, Table2.Col1 as NEW1 
Table1.Col2 as OLD2, Table2.Col2 as NEW2 
FROM Table1 
INNER JOIN Table2 
-- ON Some Join Conditions 
) t 
SET t.OLD1 = t.NEW1, 
SET t.OLD2 = t.NEW2 
+0

я попробовал и показать эту ошибку: ** [Err] ORA-01732: данные операции манипуляции не легальными этого вида ** – RubahMalam

+0

@RubahMalam если таблицы назначения являются вид, то вы можете 't обновить его –

+0

Пожалуйста, см. мое редактирование .. – RubahMalam

Смежные вопросы