Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak korzystać z tabel Oracle PLSQL (tablica asocjacyjna lub tabela indeksowana)

Tabele Oracle PLSQL

  • Tabele PLSQL są złożonymi typami danych.
  • Zachowują się one w taki sam sposób jak tablice, z wyjątkiem tego, że nie mają górnych granic, co pozwala na ich ciągłe rozszerzanie.
  • Nazywa się je również indeksem według tabeli
  • Tabela PLSQL zawiera dwa elementy

(1) Klucz podstawowy typów danych BINARY_INTEGER, które indeksują tabelę, które nie muszą być kolejnymi. Kolekcja jest rozszerzona o przypisanie wartości do elementu za pomocą wartości indeksu, która aktualnie nie istnieje.
możemy również indeksować za pomocą wartości ciągu

(2) Kolumna skalarnego lub rekordowego typu danych, która przechowuje indeks według elementów tabeli

Jak zdefiniować i zadeklarować typ tabeli

Aby utworzyć tabele PL/SQL, wykonaj dwa kroki. Najpierw definiujesz typ TABLE, a następnie deklarujesz tabele PL/SQL tego typu. Możesz zdefiniować typy TABLE w deklaratywnej części dowolnego bloku, podprogramu lub pakietu za pomocą składni

Syntax 
 TYPE table_type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER;

Jeśli typem elementu jest typ rekordu, każde pole w rekordzie musi mieć skalarny typ danych, taki jak CHAR, DATE lub NUMBER.

Aby określić typ elementu, możesz użyć %TYPE, aby podać typ danych zmiennej lub kolumny bazy danych

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.dept_name%TYPE INDEX BY BINARY_INTEGER;

Możesz dodać ograniczenie NOT NULL do definicji typu TABLE, aby zapobiec przechowywaniu wartości null w tabelach PL/SQL tego typu:

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.location%TYPE NOT NULL INDEX BY BINARY_INTEGER;

Możesz także użyć %ROWTYPE, aby określić typ elementu.

DECLARE 
 TYPE deptTabTyp IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;

do określenia typu elementu używasz typu ZAPIS zdefiniowanego przez użytkownika:

DECLARE 
 TYPE emp_phonetyp IS RECORD
 (
 Stdcode      PLS_INTEGER,
 phn_number   PLS_INTEGER,
 extension    PLS_INTEGER
 );
 TYPE emp_contact IS TABLE OF emp_phonetyp INDEX BY BINARY_INTEGER;

Po zdefiniowaniu typu TABLE możesz zadeklarować tabele PL/SQL tego typu

DECLARE   
 TYPE SalTabTyp IS TABLE OF emp.sal%TYPE 
 INDEX BY BINARY_INTEGER;
 TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
 INDEX BY BINARY_INTEGER;
 sal_tab SalTabTyp;  -- declare PL/SQL table
 emp_tab EmpTabTyp;  -- declare another PL/SQL table

Atrybuty lub metoda tabeli PLSQL

Tabela PL/SQL ma atrybuty EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT i DELETE.

Sprawiają, że tabele PL/SQL są łatwiejsze w użyciu, a Twoje aplikacje łatwiejsze w utrzymaniu.

plsql_table_name.attribute_name

Atrybuty istnieją, PRIOR, NEXT i DELETE przyjmują parametry. Każdy parametr musi być wyrażeniem, które daje wartość BINARY_INTEGER lub wartość domyślnie konwertowaną na ten typ danych.

DELETE działa jak procedura, która jest wywoływana jako instrukcja. Jednak inne atrybuty tabeli PL/SQL działają jak funkcja, która jest wywoływana jako część wyrażenia.

Istnieje(n) Zwróć prawdę, jeśli istnieje n-ty element w tabeli
liczba Zwróć liczbę elementów w tabeli
Pierwszy i ostatni FIRST i LAST zwracają pierwszą i ostatnią (najmniejszą i największą) liczbę indeksów w tabeli PL/SQL
PRIOR(n ) zwraca numer indeksu poprzedzający indeks n w tabeli PL/SQL
NASTĘPNY(n ) zwraca numer indeksu, który następuje po indeksie n
Usuń DELETE usuwa wszystkie elementy z tabeli PL/SQL. USUŃ(n ) usuwa n element. Jeśli n ma wartość null, DELETE(n ) nic nie robi. USUŃ(mn ) usuwa wszystkie elementy z zakresu m .. n . Jeśli m jest większy niż n lub jeśli m lub n ma wartość null, DELETE(mn ) nic nie robi

Tabele PL/SQL do przenoszenia danych zbiorczych do i z tabel bazy danych lub między aplikacjami po stronie klienta a zapisanymi podprogramami.

Jak wypełnić dane w tabeli PLSQL

Tabele z prostymi typami danych można wypełniać jako:

<variable>(<integer>) := <value>;

Tabele ze złożonymi typami danych będą wymagały kolumn wypełnionych indywidualnie jako:

<variable>(<integer>).<column_name> := <value>;

Lub z kursora:

fetch <cursor_name> into <variable>(<integer>);
Type emptabletype  is table of varchar2(10)
Index by binary_integer;
emp_table emptabletyp;
emp_table (1) := ‘good’;
emp_table (2) := ‘bad’’;

Możesz pobrać dane Oracle do tabeli PL/SQL na trzy inne sposoby

a) Instrukcja SELECT INTO pozwala wybrać pojedynczy wiersz danych

Używając instrukcji SELECT INTO, możesz wybrać wpis kolumny do elementu skalarnego. Możesz też wybrać cały wiersz do elementu rekordu. W poniższym przykładzie wybierasz wiersz z tabeli bazy danych dept do rekordu przechowywanego przez pierwszy element tabeli PL/SQL dept_tab:

DECLARE
TYPE DeptTabTyp IS TABLE OF dept%ROWTYPE
INDEX BY BINARY_INTEGER;
dept_tab DeptTabTyp;
BEGIN
/* Select entire row into record stored by first element. */
SELECT * INTO dept_tab(1) FROM dept WHERE deptno = 10;
IF dept_tab(1).dname = 'ACCOUNTING' THEN ...
...
END;

b)  Oświadczenie FETCH

Za pomocą instrukcji FETCH możesz pobrać całą kolumnę danych Oracle do tabeli skalarów PL/SQL.

Możesz też pobrać całą tabelę danych Oracle do tabeli rekordów PL/SQL.

DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
i BINARY_INTEGER := 0;
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
LOOP
i := i + 1;
/* Fetch entire row into record stored by ith element. */
FETCH c1 INTO emp_tab(i);
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
END;

c) pętla kursora FOR umożliwia pobranie wielu wierszy.

DECLARE
TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE SalTabTyp IS TABLE OF emp.sal%TYPE
INDEX BY BINARY_INTEGER;
ename_tab EnameTabTyp;
sal_tab SalTabTyp;
n BINARY_INTEGER := 0;
BEGIN
/* Fetch entire columns into PL/SQL tables. */
FOR emp_rec IN (SELECT ename, sal FROM emp) LOOP
n := n + 1;
ename_tab(n) := emp_rec.ename;
sal_tab(n) := emp_rec.sal;
END LOOP;
...
END;

Musisz przeczytać te inne posty o PLSQL

Struktura i typy bloków Oracle PLSQL
Rekordy Oracle PLSQL
Pytania dotyczące Oracle PLSQL w rozmowie kwalifikacyjnej
Szybkie samouczki dotyczące Oracle SQL i plsql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sumuj kolumny z wartościami null w Oracle

  2. Wartości sekwencji Oracle nie są uporządkowane

  3. Kolejność Oracle SQL według problemów z podzapytaniami!

  4. Tworzenie tabeli na podstawie zapytania przy użyciu innej przestrzeni tabel (Oracle SQL)

  5. TRANSLATE(… UŻYWAJĄC) Funkcja w Oracle