Oracle PL/SQL Wstaw, zaktualizuj, usuń i wybierz w [Przykład]
W tym samouczku nauczymy się, jak używać SQL w PL/SQLu. SQL jest rzeczywistym komponentem, który zajmuje się pobieraniem i aktualizacją danych w bazie danych, podczas gdy PL/SQL jest komponentem, który przetwarza te dane. W tym artykule omówimy również, jak połączyć SQL w bloku PL/SQL.
Transakcje DML w PL/SQL
DML oznacza Język manipulacji danymi. Te polecenia są używane głównie do wykonywania czynności manipulacyjnych. Zajmuje się poniższymi operacjami.
- Wstawianie danych
- Aktualizacja danych
- Usuwanie danych
- Wybór danych
W PL/SQL możemy manipulować danymi jedynie za pomocą poleceń SQL.
Wstawianie danych
W PL/SQL możemy wstawić dane do dowolnej tabeli za pomocą polecenia SQL INSERT INTO. To polecenie pobierze nazwę tabeli, kolumnę tabeli i wartości kolumn jako dane wejściowe i wstawi wartość do tabeli podstawowej.
Polecenie INSERT może także pobrać wartości bezpośrednio z innej tabeli przy użyciu instrukcji „SELECT”, zamiast podawać wartości dla każdej kolumny. Za pomocą instrukcji „SELECT” możemy wstawić tyle wierszy, ile zawiera tabela podstawowa.
Składnia:
BEGIN
INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
VALUES(<valuel><value2>,...:<value_n>);
END;
- Powyższa składnia przedstawia polecenie INSERT INTO. Nazwa tabeli i wartości są polami obowiązkowymi, natomiast nazwy kolumn nie są obowiązkowe, jeśli instrukcje wstawiania zawierają wartości dla wszystkich kolumn tabeli.
- Słowo kluczowe „VALUES” jest obowiązkowe, jeśli wartości podano osobno, jak pokazano powyżej.
Składnia:
BEGIN
INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
- Powyższa składnia przedstawia polecenie INSERT INTO, które pobiera wartości bezpośrednio z pliku za pomocą polecenia WYBIERZ.
- Słowo kluczowe „VALUES” nie powinno w tym przypadku występować, gdyż wartości nie są podawane osobno.
Aktualizacja danych
Aktualizacja danych oznacza po prostu aktualizację wartości dowolnej kolumny w tabeli. Można to zrobić za pomocą instrukcji „UPDATE”. Ta instrukcja pobiera nazwę tabeli, nazwę kolumny i wartość jako dane wejściowe i aktualizuje dane.
Składnia:
BEGIN UPDATE <table_name> SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- Powyższa składnia pokazuje UPDATE. Słowo kluczowe „SET” instruuje silnik PL/SQL, aby zaktualizował wartość kolumny o podaną wartość.
- Klauzula „WHERE” jest opcjonalna. Jeżeli klauzula ta nie zostanie podana, wartość wspomnianej kolumny w całej tabeli zostanie zaktualizowana.
Usuwanie danych
Usunięcie danych oznacza usunięcie jednego pełnego rekordu z tabeli bazy danych. W tym celu służy polecenie „USUŃ”.
Składnia:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- Powyższa składnia przedstawia polecenie DELETE. Słowo kluczowe „FROM” jest opcjonalne i z klauzulą „FROM” lub bez niej polecenie zachowuje się w ten sam sposób.
- Klauzula „WHERE” jest opcjonalna. Jeżeli ta klauzula nie zostanie podana, wówczas cała tabela zostanie usunięta.
Wybór danych
Projekcja/pobieranie danych oznacza pobranie wymaganych danych z tabeli bazy danych. Można to osiągnąć za pomocą polecenia „SELECT” z klauzulą „INTO”. Komenda „SELECT” pobierze wartości z bazy danych, a klauzula „INTO” przypisze te wartości do zmiennej lokalnej Blok PL/SQL.
Poniżej znajdują się punkty, które należy uwzględnić w instrukcji „SELECT”.
- 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ż jedną wartość, zostanie zgłoszony wyjątek „TOO_MANY_ROWS”.
- Instrukcja „SELECT” przypisze wartość do zmiennej w klauzuli „INTO”, dlatego aby zapełnić wartość, musi pobrać co najmniej jeden rekord z tabeli. Jeśli nie uzyskano żadnego rekordu, zgłaszany jest wyjątek „NO_DATA_FOUND”.
- Liczba kolumn i ich typ danych w klauzuli „SELECT” powinna 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 pozwala na większe ograniczenie rekordów, które będą pobierane.
- Instrukcja „SELECT” może zostać użyta w warunku „WHERE” innych instrukcji DML w celu zdefiniowania wartości warunków.
- Instrukcja „SELECT” podczas korzystania z instrukcji „INSERT”, „UPDATE”, „DELETE” nie powinna zawierać klauzuli „INTO”, ponieważ w takich przypadkach nie zapełni ona żadnej zmiennej.
Składnia:
BEGIN SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
- Powyższa składnia przedstawia polecenie SELECT-INTO. Obowiązkowe jest słowo kluczowe „FROM”, które określa nazwę tabeli, z której mają zostać pobrane dane.
- Klauzula „WHERE” jest opcjonalna. Jeżeli klauzula ta nie zostanie podana, wówczas pobrane zostaną dane z całej tabeli.
1 przykład:W tym przykładzie pokażemy, jak wykonywać operacje DML w PL / SQL. Zamierzamy wstawić poniższe cztery 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 i usuniemy rekord pracownika „ZZZ”. Na koniec wyświetlimy szczegóły pracownika „XXX”.
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,managed
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(‘Emplovee 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
Wyjaśnienie kodu:
- Linia kodu 2-5: Deklarowanie zmiennej.
- Linia kodu 7-14: Wstawianie rekordów do tabeli emp.
- Linia kodu 15: Zatwierdzanie transakcji wstawiania.
- Linia kodu 17-19: Aktualizacja wynagrodzenia pracownika „XXX” do 15000
- Linia kodu 20: Zatwierdzanie transakcji aktualizacji.
- Linia kodu 22: Usuwanie rekordu „ZZZ”
- Linia kodu 23: Zatwierdzenie transakcji usuwania.
- Linia kodu 25-27: Wybranie rekordu „XXX” i wpisanie zmiennej l_emp_name, l_emp_no, l_salary, l_manager.
- Linia kodu 28-32: Wyświetlanie wartości pobranych rekordów.

