Oracle
 sql >> база данни >  >> RDS >> Oracle

АКТУАЛИЗИРАНЕ със синтаксис JOIN за Oracle Database

Синтаксисът на оператора UPDATE е:

http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm

където dml_table_expression_clause е:

Моля, обърнете внимание на ( subquery ) част от горния синтаксис.

subquery е функция, която позволява извършване на актуализация на обединения.

В най-простата форма може да бъде:

UPDATE (
   subquery-with-a-join
)
SET cola=colb

Преди да актуализирате присъединяване, трябва да знаете ограниченията, изброени тук:

https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm

  • Оператор за набор
  • ОПЕРАТОР DISTINCT
  • Агрегирана или аналитична функция
  • клауза GROUP BY, ORDER BY, MODEL, CONNECT BY или START WITH
  • Израз за колекция в списък SELECT
  • Подзаявка в списък SELECT
  • Подзаявка, обозначена САМО ЗА ЧЕТЕНЕ
  • Присъединява се, с някои изключения, както е документирано в Ръководството на администратора на база данни на Oracle

както и общи правила, свързани с обновяеми изгледи - тук (раздел:Updating a Join View ):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055

Първо можем да създадем подзаявка с присъединяване:

SELECT age 
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'

Тази заявка просто връща следния резултат:

       AGE
----------
        30

и сега можем да опитаме да актуализираме нашата заявка:

UPDATE (
    SELECT age 
    FROM ages a
    JOIN names m ON a.id = m.id
    WHERE m.name = 'Sally'
)
SET age = age + 1;

но получаваме грешка:

Тази грешка означава, че едно от горните ограничения не е изпълнено (таблица със запазен ключ).

Ако обаче добавим първични ключове към нашите таблици:

alter table names add primary key( id );
alter table ages add primary key( id );

сега актуализацията работи без грешка и крайният резултат е:

select * from ages;

        ID        AGE
---------- ----------
         1         25
         2         31
         3         35



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение в PL/SQL Ref курсори в Oracle Database

  2. Не може да се зареди тип „NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle“

  3. Изключение за внедряване на Weblogic:PaddingException:Не може да се изпълни депадинг:невалиден байт за подложка

  4. Oracle процедура за създаване на sql за показване на седмично класиране

  5. Как да проверите стойностите на NLS параметрите в базата данни на Oracle