Creative Saplings

UPDATE (Română)

ianuarie 29, 2021
No Comments

Scop

Utilizați instrucțiunea UPDATE pentru a modifica valorile existente într-un tabel sau în tabelul de bază al unei vizualizări sau tabelul principal al unei vizualizări materializate.

Subiecte suplimentare

  • Cerințe preliminare

  • Sintaxă

  • Semantică

  • Exemple

Cerințe preliminare

Pentru pentru a actualiza valorile într-un tabel, tabelul trebuie să fie în propria schemă sau trebuie să aveți privilegiul obiectului UPDATE pe tabelă.

Pentru a vă actualiza valori din tabelul de bază al unei vizualizări:

  • Trebuie să aveți privilegiul obiectului UPDATE în vizualizare și

  • Oricine deține schema care conține vizualizarea trebuie să aibă privilegiul de obiect UPDATE pe tabela de bază.

UPDATE ANY TABLE vă permite, de asemenea, să actualizați valorile în orice masă sau în masa de bază a oricărei vizualizări.

Trebuie să aveți și privilegiul de obiect SELECT pe obiectul pe care doriți să îl actualizați dacă:

  • Obiectul se află pe o bază de date la distanță sau

  • Parametrul de inițializare SQL92_SECURITY este setat la TRUE și operația UPDATE referință la coloanele tabelului, cum ar fi coloanele dintr-o where_clause.

Sintaxă

update :: =

Descrierea ilustrației update.gif

(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, return_clause :: =, error_logging_clause :: =)

DML_table_expression_clause :: =

Descrierea ilustrației DML_table_expression_clause.gif

(subinterogare :: = – parte din SELECT, subinterogare_restricție_clauză :: =, tabel_colecție_expresie :: =)

subinterogare_restricție_clauză :: =


Descrierea ilustrației subquery_restriction_clause.gif

table_collection_expression :: =


Descrierea ilustrației table_collection_expression.gif

update_set_clause :: =


Descrierea ilustrației update_set_clause. gif

where_clause :: =


Descrierea ilustrației where_clause.gif

return_clause :: =


Descrierea ilustrației return_clause.gif

error_logging_clause :: =

Descrierea ilustrației error_logging_clause.gif

Semantică

hint

Specificați un comentariu care transmite instrucțiuni optimizatorului pentru alegerea unui plan de execuție pentru instrucțiune.

Puteți plasa un indiciu paralel imediat după cuvântul cheie UPDATE pentru a paralela atât sub scanarea mincinoasă și operațiile UPDATE.

Consultați și:

  • Ghidul de optimizare a performanței bazei de date Oracle și ” Utilizarea sugestiilor „pentru sintaxa și descrierea sugestiilor

  • Ghidul de optimizare a performanței bazei de date Oracle și conceptele Oracle Database pentru informații detaliate despre DML paralel

DML_table_expression_clause

Clauza ONLY se aplică numai vizualizărilor. Specificați ONLY sintaxă dacă vizualizarea din clauza UPDATE este o vizualizare care aparține unei ierarhii și nu doriți să actualizați rândurile din orice din subvizualizările sale.

Vezi și:

„Restricții privind clauza DML_table_expression_clause” și „Actualizarea unui tabel: exemple”

schema

Specificați schema care conține obiectul de actualizat. Dacă omiteți schema, atunci baza de date presupune că obiectul se află în propria schemă.

tabel | Vizualizați | materialized_view | subinterogare

Specificați numele tabelului, vizualizării, vizualizării materializate sau coloanelor returnate de o subinterogare care urmează să fie actualizate. Emiterea unei instrucțiuni UPDATE împotriva unui tabel declanșează orice declanșator UPDATE asociat cu tabelul.

  • Dacă specificați view, atunci baza de date actualizează tabelul de bază al vizualizării.Nu puteți actualiza o vizualizare decât cu declanșatoarele INSTEAD OF dacă interogarea definitorie a vizualizării conține una dintre următoarele construcții:

Un operator de set ADISTINCToperator O funcție agregată sau analitică AGROUPBY,ORDERBY,MODEL,CONNECTBYsauSTARTWITHclauză O expresie de colecție într-oSELECTlistă O subinterogare dintr-o listăSELECTO subinterogare desemnatăWITH READ ONLYAlăturări, cu unele excepții , așa cum este documentat în Ghidul administratorului de baze de date Oracle

  • Nu puteți actualiza mai multe tabele de bază printr-o vizualizare.

  • În plus, dacă vizualizarea a fost creată cu WITH CHECK , atunci puteți actualiza vizualizarea numai dacă datele rezultate satisfac interogarea care definește vizualizarea.

  • Dacă table sau tabelul de bază al view conține una sau mai multe coloane de index de domeniu, atunci această instrucțiune execută rutina de actualizare adecvată a tipului de index.

  • Nu puteți actualiza rândurile într-o vizualizare materializată numai în citire. Dacă actualizați rândurile într-o vizualizare materializată, atunci baza de date actualizează rândurile din tabelul containerului de bază. Cu toate acestea, actualizările sunt suprascrise la următoarea operație de reîmprospătare. Dacă actualizați rândurile într-o vizualizare materializată actualizabilă care face parte dintr-un grup de vizualizări materializate, atunci baza de date actualizează și rândurile corespunzătoare din tabelul principal.

Consultați De asemenea:

  • Ghidul dezvoltatorului Oracle Data Cartridge pentru mai multe informații despre rutinele de actualizare tip index

  • CREAȚI VIZUALIZARE MATERIALIZATĂ pentru informații despre crearea de vizualizări materializate actualizabile

PARTITION | SUBPARTITION

Specificați numele partiției sau subpartiției din table vizat pentru actualizări. Nu trebuie să specificați numele partiției atunci când actualizați valorile într-un tabel partiționat. Cu toate acestea, în unele cazuri, specificarea numelui partiției poate fi mai eficient decât un where_clause complicat. .

Vezi și:

„Referința la tabele și indexuri partiționate” și „Actualizarea unei partiții: exemplu”

dblink

Specificați un nume complet sau parțial al unei baze de date link către o bază de date la distanță unde t obiectul este localizat. Puteți utiliza un link de bază de date pentru a actualiza un obiect la distanță numai dacă utilizați funcționalitatea distribuită Oracle Database.

Dacă omiteți dblink, atunci baza de date presupune că obiectul este pe baza de date locală.

Consultați și:

„Referirea la obiecte din bazele de date la distanță” pentru informații despre trimiterea la linkurile bazei de date

subquery_restriction_clause

Utilizați subquery_restriction_clause pentru a restricționa interogarea într-unul din următoarele moduri:

CU CITIRE NUMAI Specificați WITH READ ONLY pentru a indica faptul că tabelul sau vizualizarea nu pot fi actualizate.

CU OPȚIUNEA CHECK Specificați WITH CHECK OPTION pentru a indica faptul că baza de date Oracle interzice orice modificare a tabelului sau a vizualizării care ar produce rânduri care nu sunt incluse în subinterogare. Când este utilizat în subconsultarea unei instrucțiuni DML, puteți specifica această clauză într-o subconsultare în clauza FROM, dar nu în subconsultare în WHERE clauză.

CONSTRAINT constrângere Specificați numele constrângerii CHECK OPTION. Dacă omiteți acest identificator, Oracle atribuie automat constrângerii un nume de formă SYS_C n, unde n este un număr întreg care face ca nume de constrângere unic în baza de date.

Consultați și:

„Utilizarea clauzei WITH CHECK OPTION: Exemplu”

table_collection_expression

table_collection_expression vă permite să informați Oracle că valoarea collection_expression ar trebui tratată ca un tabel în scopuri de interogare și operațiuni DML. collection_expression poate fi o interogare, o coloană, o funcție sau un constructor de colecție. Indiferent de forma sa, trebuie să returneze o valoare de colecție – adică o valoare al cărei tip este tabel imbricat sau varray. Acest proces de extragere a elementelor unei colecții se numește colecție nesimțitoare.

Plusul opțional (+) este relevant dacă asociați expresia TABLE cu părintele masa. + Creează o îmbinare exterioară a celor două, astfel încât interogarea să returneze rânduri din tabelul exterior chiar dacă expresia colecției este nulă.

Notă:

În versiunile anterioare ale Oracle, când collection_expression a fost o subinterogare, table_collection_expression a fost exprimat ca THE subquery.Această utilizare este acum depreciată.

Puteți utiliza un table_collection_expression pentru a actualiza rândurile dintr-un tabel pe baza rândurilor dintr-un alt tabel. De exemplu, puteți înfășura patru tabele trimestriale de vânzări într-un tabel anual de vânzări.

t_alias

Specificați un nume de corelație (alias) pentru tabel, vizualizare sau subinterogare la care să faceți referire în altă parte a declarației. Acest alias este necesar dacă DML_table_expression_clause face referire la atribute de tip obiect sau metode de tip obiect.

Vezi și:

„Actualizare corelată: exemplu „

Restricții la clauza DML_table_expression_ Această clauză este supusă următoarelor restricții:

  • Nu puteți executa această declarație dacă table sau tabelul de bază al view conține indici de domeniu marcați IN_PROGRESS sau FAILED.

  • Nu puteți introduce într-o partiție dacă partițiile index afectate sunt marcate UNUSABLE.

  • Nu puteți specifica order_by_clause în subinterogarea DML_table_expression_clause.

  • Dacă specificați un index, o partiție index sau o subpartiție index care a fost marcată UNUSABLE, atunci instrucțiunea UPDATE va eșua, cu excepția cazului în care SKIP_UNUSABLE_INDEXES parametru de sesiune a fost setat la TRUE.

Consultați și:

ALTER SESSION pentru informații despre SKIP_UNUSABLE_INDEXES parametru de sesiune

update_set_clause

update_set_clause vă permite să setați valorile coloanei.

coloană

Specificați numele unei coloane a obiectului care urmează să fie actualizat. Dacă omiteți o coloană a tabelului din update_set_clause, atunci valoarea acelei coloane rămâne neschimbată.

Dacă column se referă la un atribut de obiect LOB, apoi trebuie mai întâi să-l inițializăm cu o valoare goală sau nulă. Nu îl puteți actualiza cu un literal. De asemenea, dacă actualizați o valoare LOB utilizând o altă metodă decât o instrucțiune directă UPDATE SQL, trebuie mai întâi să blocați rândul care conține LOB. Pentru mai multe informații, consultați for_update_clause.

Dacă column face parte din cheia de partiționare a unei tabele partiționate, atunci UPDATE va eșua dacă modificați o valoare din coloană care ar muta rândul pe o altă partiție sau subpartiție, cu excepția cazului în care activați mișcarea rândului. Vă rugăm să consultați row_movement_clause din CREATE TABLE sau ALTER TABLE.

În plus, dacă column face parte din cheia de partiționare a unei tabele partiționate în listă, atunci UPDATE va eșua dacă specificați o valoare pentru coloană care nu există deja în partition_value lista uneia dintre partiții.

subinterogare

Specificați o interogare care returnează exact un rând pentru fiecare rând actualizat.

  • Dacă specificați o singură coloană în update_set_clause, apoi interogarea poate returna o singură valoare.

  • Dacă specificați mai multe coloane în update_set_clause, apoi interogarea trebuie să returneze atâtea valori câte coloane ați specificat.

  • Dacă interogarea nu returnează niciun rând, coloanei i se atribuie un nul.

  • Dacă acest subquery se referă la obiecte la distanță, atunci UPDATE poate rula în paralel atâta timp cât referința ce nu revine la un obiect din baza de date locală. Cu toate acestea, dacă subquery din DML_table_expression_clause se referă la orice obiecte la distanță, atunci UPDATE operațiunea va rula în serie, fără notificare.

Puteți utiliza flashback_query_clause din subinterogare pentru a actualiza table cu date anterioare. Pentru mai multe informații despre această clauză, consultați flashback_query_clause din SELECT.

Consultați și:

  • SELECȚIONEAZĂ ȘI „Folosirea subconsultărilor”

  • parallel_clause în documentația CREATE TABLE

expr

Specificați o expresie care se rezolvă la noua valoare atribuită coloanei corespunzătoare.

Consultați și:

Capitolul 6, „Expresii” pentru sintaxa expr și „Actualizarea unui tabel de obiecte: exemplu”

DEFAULT Specificați DEFAULT pentru a seta coloana la valoarea specificată anterior ca implicită valoare pentru coloană. Dacă nu a fost specificată nicio valoare implicită pentru coloana corespunzătoare, atunci baza de date setează coloana la nulă.

Restricție la actualizarea valorilor implicite Nu puteți specifica DEFAULT dacă actualizați o vizualizare.

Clauza VALUE

Clauza VALUE vă permite să specificați întregul rând al unei tabele obiect.

Restricție la clauza VALUE Puteți specifica această clauză numai pentru o tabelă de obiecte.

Notă:

Dacă introduceți literele șirului într-o coloană RAW, atunci în timpul interogărilor ulterioare, Oracle Database va efectua o scanare completă a tabelului mai degrabă decât să folosiți orice index care ar putea exista în coloana RAW.

Consultați și:

„Actualizarea unui tabel de obiecte: exemplu” / div>

where_clause

where_clause vă permite să restricționați rândurile actualizate la cele pentru care condition este adevărat. Dacă omiteți această clauză, atunci baza de date actualizează toate rândurile din tabel sau din vizualizare. Vă rugăm să consultați capitolul 7, „Condiții” pentru sintaxa condition.

where_clause determină rândurile din care valori sunt actualizate. Dacă nu specificați where_clause, atunci toate rândurile sunt actualizate. Pentru fiecare rând care satisface where_clause, coloanele din stânga operatorului de egalitate (=) din update_set_clause sunt setate la valori a expresiilor corespunzătoare din dreapta operatorului. Expresiile sunt evaluate pe măsură ce rândul este actualizat.

return_clause

Clauza returnată recuperează rândurile afectate de o instrucțiune DML. Puteți specifica această clauză pentru tabele și vizualizări materializate și pentru vizualizări cu un singur tabel de bază.

Când operați pe un singur rând, o instrucțiune DML cu un returning_clause poate prelua expresii de coloană folosind rândul afectat, rowid și REFs pe rândul afectat și le poate stoca în variabile gazdă sau variabile PL / SQL.

Când operați pe mai multe rânduri, o instrucțiune DML cu returning_clause stochează valori din expresii, rânduri și REFs care implică rândurile afectate în matrice de legare.

expr Fiecare element din lista expr trebuie să fie o sintaxă de expresie validă.

ÎN INTO clauza indică faptul că valorile rândurilor modificate trebuie stocate în variabilele specificate în lista data_item.

data_item Fiecare data_item este o variabilă gazdă sau variabilă PL / SQL care stochează valoarea expr recuperată.

Pentru fiecare expresie din lista RETURNING, trebuie să specificați o variabilă PL / SQL sau o variabilă gazdă corespunzătoare compatibile cu tipul în INTO listă.

Restricții Următoarele restricții se aplică clauzei RETURNING:

  • expr este restricționat după cum urmează:

    • Pentru UPDATE și DELETE declarații fiecare expr trebuie să fie o expresie simplă sau o expresie de funcție agregată cu un singur set. Nu puteți combina expresii simple și expresii de funcții agregate cu un singur set în același returning_clause. Pentru instrucțiunile INSERT, fiecare expr trebuie să fie o expresie simplă. Funcțiile agregate nu sunt acceptate într-o clauză INSERT RETURNING.

    • Single- expresiile de funcții agregate set nu pot include cuvântul cheie DISTINCT.

  • Dacă expr lista conține o coloană cheie primară sau altă coloană NOT NULL, atunci instrucțiunea de actualizare eșuează dacă tabelul are un declanșator BEFORE UPDATE definit pe acesta.

  • Nu puteți specifica returning_clause pentru un insert multitabil.

  • Nu puteți utiliza această clauză cu DML paralel sau cu obiecte la distanță.

  • Nu puteți prelua tipurile LONG cu această clauză.

  • Nu puteți specifica această clauză pentru o vizualizare pe care a fost definit un declanșator INSTEAD OF.

Vezi și :

Utilizator PL / SQL ” s Ghid și referință pentru informații despre utilizarea BULK COLLECT clauză pentru a returna mai multe valori variabilelor de colectare

error_logging_clause

Error_logging_clause are același comportament într-o instrucțiune UPDATE ca într-o instrucțiune INSERT. Pentru mai multe informații, consultați instrucțiunea INSERT error_logging_clause.

Consultați și:

„Introducerea într-un tabel cu înregistrarea erorilor: Exemplu”

Exemple

Actualizarea unui tabel: Exemple Următoarele declarația oferă comisioane nule tuturor angajaților cu postul SH_CLERK:

UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";

Următoarea declarație îl promovează pe Douglas Grant în funcția de manager din Departamentul 20 cu o creștere de 1.000 USD:

UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant"; 

Următoarea declarație mărește salariul unui angajat în employees tabel pe baza de date remote:

UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";

Următorul exemplu prezintă următoarele construcții sintactice ale declarație:

  • Ambele forme ale update_set_clause împreună într-o singură declarație

  • O interogare corelată

  • A where_clause pentru a limita rândurile actualizate

Instrucțiunea UPDATE precedentă efectuează următoarele operațiuni:

  • Actualizează numai acei angajați care lucrează în Geneva sau Munchen (locațiile 2900 și 2700)

  • Seturi department_id pentru acești angajați la department_id corespunzător Bombay (location_id 2100)

  • Stabilește salariul fiecărui angajat la 1,1 ori salariul mediu al departamentului lor

  • Setează comisionul fiecărui angajat la 1,5 ori comisionul mediu al departamentului lor

Actualizarea unei partiții: exemplu Următorul exemplu actualizează valorile într-o singură partiție a tabelului sales:

UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;

Actualizarea unui tabel de obiecte: Exemplu Următoarea declarație creează două tabele de obiecte, people_demo1 și people_demo2 , a obiectului people_typ creat în colecțiile de tabele: exemple. Exemplul arată cum să actualizați un rând de people_demo1 selectând un rând din people_demo2:

Exemplul folosește VALUE funcția de referință a obiectului atât în clauza SET, cât și în subinterogare.

Actualizare corelată: exemplu pentru un exemplu care folosește o interogare corelată pentru a actualiza rândurile de tabele imbricate, vă rugăm să consultați „Colecții de tabele: exemple”.

Utilizarea clauzei RETURNING În timpul UPDATE: Exemplu Următorul exemplu returnează valori din rândul actualizat și stochează rezultatul în PL / Variabile SQL bnd1, bnd2, bnd3:

The următorul exemplu arată că puteți specifica o funcție agregată cu un singur set în expresia clauzei returnate:

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;

Articles
Previous Post

Cumpărați magazinele online din SUA și livrăm în India în 2-4 zile!

Next Post

Rase de câini albastre - Ce le face atât de frumoase?

Lasă un răspuns Anulează răspunsul

Articole recente

  • Cele mai bune școli de fotografie din lume, 2020
  • Cetățenii suverani își duc filosofia anti-guvernamentală la drumuri
  • Ghid de costuri de reparații stuc
  • Muckrakers (Română)
  • Oncologie de precizie

Arhive

  • februarie 2021
  • ianuarie 2021
  • decembrie 2020
  • noiembrie 2020
  • octombrie 2020
  • septembrie 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.