Oracle SQL UPDATE SELECT с JOIN получил ошибку - PullRequest
0 голосов
/ 08 октября 2019

Вот мой SQL-запрос

UPDATE
(SELECT
    *
FROM
    web_fe_ipo_ipo_application   apps
    INNER JOIN web_fe_ipo_ipo_entry ipo ON apps.ipo_link_id = ipo.ipo_ref_number
WHERE
    ( ( apps.status = 0
        OR ( apps.status = 2
             AND apps.sub_status = 0
             AND ipo.enable_omnibus_account = 1 ) )
      AND ( apps.applied_qty BETWEEN 1 AND 10 )
      AND apps.ipo_link_id = '984'
      AND apps.latest = 1
      AND ipo.latest = 1
      AND apps.tranche_name = 'Public-1' )
ORDER BY
    ipo_random(50)
FETCH FIRST 5 ROWS ONLY) selection 
SET selection.initial_allot_qty = 5;

, но он не работал должным образом

Мне нужно выбрать случайные данные из таблицы, а затем обновить после выполнения этого запроса Я получил ниже ошибку

Error at Command Line : 20 Column : 5
Error report -
SQL Error: ORA-01733: virtual column not allowed here
01733. 00000 -  "virtual column not allowed here"
*Cause:    
*Action:

1 Ответ

1 голос
/ 08 октября 2019

Используйте оператор MERGE.

Вот пример:

MERGE INTO workers e
USING data_works h -- You can use the SELECT statement as well.
ON (e.f_id= h.f_id)
WHEN MATCHED THEN
UPDATE SET e.address= h.address
WHEN NOT MATCHED THEN
INSERT (f_id, address)
VALUES (h.f_id, h.address);

Вот ваш код. Надеюсь, это сработает.

    MERGE INTO web_fe_ipo_ipo_application apps
 USING (SELECT * FROM web_fe_ipo_ipo_entry  ipo ORDER BY
    ipo_random)
 ON(apps.ipo_link_id = ipo.ipo_ref_number)
  WHEN MATCHED THEN
  UPDATE SET apps.initial_allot_qty = 5
WHERE apps.status = 0
        OR(apps.status = 2
             AND apps.sub_status = 0
             AND ipo.enable_omnibus_account = 1) 
      AND apps.applied_qty BETWEEN 1 AND 10 
      AND apps.ipo_link_id = '984'
      AND apps.latest = 1
      AND ipo.latest = 1
      AND apps.tranche_name = 'Public-1'
      AND rownum <=5;

Используйте инструкцию MERGE для выбора строк из одного или нескольких источников для операций INSERT или UPDATE в таблице или представлении.

Вы можете указать условия, чтобы определить, является ли целевая таблица или представлениеобновляется.

Операция слияния - это удобный способ объединения нескольких операций. Это также позволяет избежать нескольких операторов INSERT, UPDATE и DELETE DML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...