Обновление нескольких столбцов таблицы - PullRequest
0 голосов
/ 05 августа 2009

У меня есть две таблицы со следующими полями:

table1: OTNAME table2: SNCODE, description_text

Я пытаюсь добавить два столбца таблицы2 в таблицу1 и обновить столбцы. Мой запрос:

alter table  table1 add sncode integer                              
alter table  table1 add description_text varchar2(30)

update table1 set 
sncode,description_text = (SELECT  sncode, description_text
   FROM   table2, table1
  WHERE   SUBSTR (otname, INSTR (otname,'.', 1, 3)
                         + 1, 
                         INSTR (otname, '.', 1, 4)
                              - INSTR (otname,'.', 1, 3)
                              - 1)
                               = sncode)

Я получаю ошибку: ORA 00927 - Отсутствует равно оператору, указывающее на вторую строку моего оператора обновления. Цените, если кто-то может направить меня в правильном направлении.

С уважением,

начинающий

Ответы [ 4 ]

4 голосов
/ 05 августа 2009
MERGE
INTO    table1 t1
USING   table2 t2
ON      (SUBSTR (otname, INSTR (otname,'.', 1, 3)
                         + 1, 
                         INSTR (otname, '.', 1, 4)
                              - INSTR (otname,'.', 1, 3)
                              - 1)
                               = t2.sncode))
WHEN MATCHED THEN
UPDATE
SET    t1.sncode = t2.sncode,
       t1.description_text = t2.description_text

Вы также можете упростить выражение:

MERGE
INTO    table1 t1
USING   table2 t2
ON      (REGEXP_SUBSTR(otname, '[^.]+', 1, 4) = t2.sncode)
WHEN MATCHED THEN
UPDATE
SET    t1.sncode = t2.sncode,
       t1.description_text = t2.description_text
1 голос
/ 05 августа 2009

Ваша проблема в том, что вы пропускаете скобки вокруг полей, подлежащих обновлению. Попробуйте

update table1 set 
( sncode,description_text) = (SELECT  sncode, description_text
   FROM   table2, table1
  WHERE   SUBSTR (otname, INSTR (otname,'.', 1, 3)
                         + 1, 
                         INSTR (otname, '.', 1, 4)
                              - INSTR (otname,'.', 1, 3)
                              - 1)
                               = sncode)
0 голосов
/ 05 августа 2009

Я подозреваю, что вы не должны включать table1 в запрос SELECT. Возможно, это утверждение сработает:

UPDATE table1
   SET
       (sncode, description_text)
       =
       (
         SELECT table2.sncode, table2.description_text
           FROM table2
          WHERE SUBSTR(
                  table1.otname,
                  INSTR(table1.otname,'.', 1, 3) + 1, 
                  INSTR(table1.otname, '.', 1, 4) - INSTR (table1.otname,'.', 1, 3) - 1
                ) = table2.sncode
       )
0 голосов
/ 05 августа 2009

Попробуйте вместо этого установить UPDATE SET FROM. Что-то вроде

update table1 
set  sncode = t1.sncode, description_text = t1.description_text 
from table2 as t2, table1 as t1
where SUBSTR (otname, INSTR (otname,'.', 1, 3)
                     + 1, 
                     INSTR (otname, '.', 1, 4)
                          - INSTR (otname,'.', 1, 3)
                          - 1)
                           = sncode)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...