Tabela dual w bazie Oracle jest tabelą w schemacie SYS do którego uprawnienia odczytu na rola PUBLIC wprowadzonym by pomóc rozwiązać problemy z zapytaniami nie operującymi na zbiorach. Oracle inaczej niż SQL Server nie pozwala na użycie klauzuli SELECT bez FROM.
Używamy jej gdy chcemy wyciągnąć zmienne systemowe, pobrania nowej wartości sekwencji i wielu innych miejscach.
SQL> select sysdate from dual;
SYSDATE
-------------------
2010-11-15 15:22:13
SQL> select user from dual;
USER
------------------------------
SYS
Tabelę jako taka możemy obejrzeć przy pomocy DESC
SQL> desc dual;
Name Null? Type
---------- -------- --------------
DUMMY VARCHAR2(1)
Możemy również obejrzeć jej zawartość
SQL> select * from dual;
D
-
X
Jednym z podstawowych założeń jest fakt że tabela dual ma jeden rekord w kolumnie DUMMY
SQL> select count(*) from dual;
COUNT(*)
----------
1
O tyle ciekawym wydaje się fakt, że bez większych problemów możemy go usunąć lub dodać następne a nawet zmienić samą tabelę co nie jest dobrą praktyką.
Po dodaniu wiersza do tabeli
SQL> select count(*) from dual;
COUNT(*)
----------
1
Ale musimy się liczyć z błędami
ORA-01422: exact fetch returns more than requested number of rows
Podczas operacji pozornie nie związanymi z ta tabela np
SQL> Drop table test
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
Ciekawostką jest to że tabela dual jest dostępna również przed otwarciem bazy ale zwraca inne wyniki
SQL> select * from dual;
ADDR INDX INST_ID D
-------- ---------- ---------- -
0A6231A7 0 1 X
Brak komentarzy:
Prześlij komentarz