Oracle PL/SQL Wstaw, zaktualizuj, usuń i wybierz w [Przykład]

⚡ Inteligentne podsumowanie

Instrukcje SQL w środku Oracle Język PL/SQL obsługuje wszystkie zadania związane z manipulacją danymi, umożliwiając blokowi bezpośrednie wstawianie, aktualizowanie, usuwanie i zaznaczanie wierszy. Polecenia INSERT, UPDATE, DELETE i SELECT INTO przenoszą i pobierają dane w bazie danych.

  • ⚙️ Polecenia DML: Polecenia INSERT, UPDATE, DELETE i SELECT INTO wykonują każde zadanie manipulacji danymi w bloku PL/SQL.
  • Wprowadzanie danych: Instrukcja INSERT INTO dodaje wiersze z jawnych wartości VALUES lub bezpośrednio z innej tabeli za pomocą instrukcji SELECT.
  • 🔄 Aktualizacja danych: Instrukcja UPDATE z instrukcją SET zmienia wartości kolumn, natomiast opcjonalna klauzula WHERE ogranicza liczbę wierszy, których to dotyczy.
  • 🗑️ Usuwanie danych: Instrukcja DELETE usuwa pasujące rekordy, natomiast pominięcie klauzuli WHERE powoduje wyczyszczenie całej tabeli.
  • 🎯 Wybierz do: SELECT INTO musi zwrócić dokładnie jeden wiersz lub Oracle wywołuje NO_DATA_FOUND lub TOO_MANY_ROWS.
  • 🤖 Pomoc AI: Asystenci AI, tacy jak GitHub Copilot, tworzą bloki DML i sygnalizują brakujące WHERE lub COMMIT.

Oracle PL/SQL Wstaw Aktualizuj Usuń Wybierz Do

Transakcje DML w PL/SQL

DML to skrót od języka manipulacji danymi, grupy języków SQL polecenia zmieniające dane przechowywane w tabeli. W ramach Blok PL/SQLTe polecenia wykonują pracę manipulacyjną, podczas gdy PL/SQL dostarcza otaczającą logikę. DML zajmuje się poniższymi operacjami.

  • Wstawianie danych
  • Aktualizacja danych
  • Usuwanie danych
  • Wybór danych

W PL/SQL manipulowanie danymi odbywa się wyłącznie za pomocą poleceń SQL.

Wstawianie danych

W języku PL/SQL wiersze są dodawane do tabeli za pomocą polecenia SQL INSERT INTO. Polecenie to przyjmuje nazwę tabeli, kolumny docelowe i wartości kolumn jako dane wejściowe, a następnie wstawia te wartości do tabeli bazowej.

Polecenie INSERT może również pobierać wartości bezpośrednio z innej tabeli za pomocą instrukcji SELECT, zamiast podawać wartości dla każdej kolumny. Za pomocą instrukcji SELECT można wstawić jednocześnie tyle wierszy, ile zawiera tabela źródłowa.

Składnia:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

Powyższa składnia przedstawia polecenie INSERT INTO. Nazwa tabeli i wartości są polami obowiązkowymi, natomiast nazwy kolumn są opcjonalne, gdy polecenie INSERT podaje wartości dla każdej kolumny tabeli. Słowo kluczowe VALUES jest obowiązkowe, gdy wartości są podawane oddzielnie, jak pokazano powyżej.

Składnia:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

Druga forma instrukcji INSERT INTO pobiera wartości bezpośrednio z używając polecenia SELECT. Słowo kluczowe VALUES nie może być tutaj obecne, ponieważ wartości nie są podawane osobno.

Aktualizacja danych

Aktualizacja danych oznacza zmianę wartości kolumny w istniejącym wierszu. Odbywa się to za pomocą instrukcji UPDATE, która przyjmuje nazwę tabeli, nazwę kolumny i nową wartość jako dane wejściowe i aktualizuje dane.

Składnia:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

Powyższa składnia przedstawia instrukcję UPDATE. Słowo kluczowe SET instruuje silnik PL/SQL, aby zaktualizował kolumnę podaną wartością. Klauzula WHERE jest opcjonalna; jeśli jej nie podano, wartość wskazanej kolumny jest aktualizowana w całej tabeli.

Usuwanie danych

Usuwanie danych oznacza usunięcie jednego pełnego rekordu z tabeli bazy danych. W tym celu używa się polecenia DELETE.

Składnia:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

Powyższa składnia przedstawia polecenie DELETE. Słowo kluczowe FROM jest opcjonalne i niezależnie od tego, czy klauzula FROM jest podana, polecenie zachowuje się tak samo. Klauzula WHERE jest opcjonalna; jeśli jej nie podano, cała tabela zostanie opróżniona.

Wybór danych

Projekcja danych, czyli pobieranie, oznacza pobieranie wymaganych danych z tabeli bazy danych. Odbywa się to za pomocą polecenia SELECT wraz z klauzulą ​​INTO. Polecenie SELECT pobiera wartości z bazy danych, a klauzula INTO przypisuje te wartości do zmiennych lokalnych bloku PL/SQL.

Podczas stosowania instrukcji SELECT z funkcją INTO należy wziąć pod uwagę poniższe kwestie:

  • Instrukcja SELECT powinna zwrócić tylko jeden rekord podczas korzystania z klauzuli INTO, ponieważ jedna zmienna może przechowywać tylko jedną wartość. Jeśli instrukcja SELECT zwróci więcej niż jeden wiersz, Wyjątek TOO_MANY_ROWS jest podniesiony.
  • Instrukcja SELECT przypisuje wartość zmiennej w klauzuli INTO, więc do jej uzupełnienia potrzebny jest co najmniej jeden rekord. Jeśli nie znajdzie żadnego rekordu, zgłaszany jest wyjątek NO_DATA_FOUND.
  • Liczba kolumn i ich typy danych w klauzuli SELECT powinny odpowiadać liczbie zmiennych i ich typom danych w klauzuli INTO.
  • Wartości są pobierane i wypełniane w tej samej kolejności, jak podano w instrukcji.
  • Klauzula WHERE jest opcjonalna i umożliwia nałożenie większej liczby ograniczeń na pobierane rekordy.
  • Polecenie SELECT można stosować w warunku WHERE innych poleceń DML w celu zdefiniowania wartości warunków.
  • Polecenie SELECT używane wewnątrz poleceń INSERT, UPDATE lub DELETE nie powinno zawierać klauzuli INTO, ponieważ w tych przypadkach nie wypełnia ona żadnej zmiennej.

Składnia:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

Powyższa składnia przedstawia polecenie SELECT-INTO. Słowo kluczowe FROM jest obowiązkowe i identyfikuje tabelę, z której mają zostać pobrane dane. Klauzula WHERE jest opcjonalna; jeśli jej nie podano, zostaną pobrane dane z całej tabeli.

1 przykład: W tym przykładzie pokażemy, jak wykonywać operacje DML w PL/SQL. Wstawimy cztery poniższe rekordy do tabeli emp.

EMP_NAME EMP_NO WYNAGRODZENIE MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
YYY 1002 10000 BBB
ZZZ 1003 7500 BBB

Następnie zaktualizujemy pensję „XXX” do 15000, usuniemy rekord pracownika „ZZZ” i na koniec wyświetlimy dane pracownika „XXX”.

Zrzut ekranu poniżej przedstawia kompletny blok PL/SQL użyty w tym przykładzie.

Oracle Blok PL/SQL wykonujący operacje wstawiania, aktualizacji, usuwania i wybierania w tabeli emp

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

Wyjście:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code Wyjaśnienie:

  • Code wiersz 2-5: Deklarowanie zmiennych.
  • Code wiersz 7-14: Wstawianie rekordów do tabeli emp.
  • Code linia 15: Zatwierdzenie transakcji wstawiania.
  • Code wiersz 17-19: Aktualizacja pensji pracownika „XXX” do kwoty 15000.
  • Code linia 20: Zatwierdzenie transakcji aktualizacji.
  • Code linia 22: Usuwanie rekordu „ZZZ”.
  • Code linia 23: Zatwierdzenie transakcji usunięcia.
  • Code linia 25: Wybranie rekordu „XXX” i wypełnienie zmiennych l_emp_name, l_emp_no, l_salary i l_manager.
  • Code wiersz 26-30: Wyświetlanie pobranych wartości rekordów.

FAQ

Nie. Statyczny PL/SQL nie może bezpośrednio uruchamiać DDL. Zbuduj instrukcję jako ciąg znaków i wykonaj ją za pomocą WYKONAJ NATYCHMIAST, który obsługuje polecenia CREATE, ALTER i DROP w czasie wykonywania.

Instrukcja SELECT INTO musi zwrócić dokładnie jeden wiersz. Aby odczytać wiele wierszy, należy użyć jawnego kursor za pomocą pętli FETCH lub BULK COLLECT INTO kolekcji.

DELETE to DML: usuwa wybrane wiersze z klauzulą ​​WHERE i można je wycofać. TRUNCATE to DDL: natychmiastowo czyści każdy wiersz, automatycznie zatwierdza zmiany i nie można ich cofnąć.

Tak. Zmiany wprowadzone za pomocą poleceń WSTAW, AKTUALIZUJ i USUŃ pozostają w sesji do momentu POPEŁNIĆ; PL/SQL nie zatwierdza automatycznie. Użyj COMMIT, aby zapisać, lub ROLLBACK, aby odrzucić.

MERGE wykonuje operację upsert — aktualizuje wiersze, które spełniają warunek łączenia i wstawia te, które nie spełniają — w jednym poleceniu zamiast oddzielnych przebiegów UPDATE i INSERT.

Instrukcja RETURNING INTO przechwytuje wartości kolumn z wierszy, na które wykonano instrukcję INSERT, UPDATE lub DELETE, i zapisuje je w zmiennych, unikając w ten sposób konieczności wykonywania dodatkowej instrukcji SELECT w celu odczytania zmienionych danych.

Tak. Drugi pilot GitHub tworzy bloki INSERT, UPDATE, DELETE i SELECT INTO na podstawie krótkiego komentarza, sugeruje zmienne wiążące i uzupełnia listy kolumn, choć najpierw należy przejrzeć logikę.

Asystenci AI skanują DML pod kątem brakujących klauzul WHERE, brakujących COMMIT-ów i niebezpiecznych konkatenacji, a następnie sugerują poprawki i wyjaśniają błędy. Ten przegląd oparty na uczeniu maszynowym wychwytuje ryzykowne zmiany, zanim trafią one do produkcji.

Podsumuj ten post następująco: