2. Как выбор из DUAL дает системное время?
В SQL есть ряд встроенных функций, которым не нужны скобки после их вызова. Одной из таких функций в Oracle является SYSDATE.
Помните, что если у вас есть таблица, оператор SELECT без условия ограничения (предложение WHERE) обычно возвращает одну строку данных для каждой строки в таблице. Итак, с учетом таблицы:
CREATE TABLE Ex1(Dummy CHAR(10) NOT NULL);
INSERT INTO Ex1 VALUES('Abacus');
INSERT INTO Ex1 VALUES('Sedentary');
INSERT INTO Ex1 VALUES('Caucasus');
Выполнение инструкции SELECT:
SELECT Dummy FROM Ex1;
вернет 3 строки. Теперь предположим, что я пишу утверждение как:
SELECT 'ABC', Dummy, SYSDATE FROM Ex1;
Это также вернет 3 строки:
- ABC, Abacus, 2010-03-03
- ABC, Сидячий, 2010-03-03
- Азбука, Кавказ, 2010-03-03
Если я опущу столбец Dummy:
SELECT 'ABC', SYSDATE FROM Ex1;
Я получаю:
- ABC, 2010-03-03
- ABC, 2010-03-03
- ABC, 2010-03-03
И если я опущу строковый литерал:
SELECT SYSDATE FROM Ex1;
Я получаю:
- 2010-03-03
- 2010-03-03
- 2010-03-03
И я удаляю две строки и перезапускаю запрос, получаю:
DELETE FROM Ex1 WHERE Dummy > 'B';
SELECT SYSDATE FROM Ex1;
Я получаю:
Поскольку в таблице Ex1 есть только одна строка данных.
Номинально я мог бы сделать:
UPDATE Ex1 SET Dummy = 'X';
RENAME TABLE Ex1 AS Dual;
Конечно, вы не можете этого сделать - я не уверен, поддерживает ли Oracle оператор RENAME TABLE, и он, вероятно, не позволит вам переименовать вашу таблицу, поэтому ее можно спутать со встроенной таблицей DUAL. Но концептуально таблица Ex1 с одной строкой в ней изоморфна DUAL.
1. Что такое псевдоколонка?
Если Oracle не имеет специального специального значения для этого термина, то псевдостолбец - это столбец, который представляется частью таблицы, но фактически не сохраняется в виде данных в таблице. Классическим примером является номер строки:
SELECT ROWNUM, * FROM SomeTable
Выходные данные имеют столбец ROWNUM (ROWID в Informix, с которым я больше всего знаком), но он не хранится напрямую в СУБД. Разные СУБД имеют разные псевдоколонки для разных целей.
Иногда трудно различить псевдостолбец и функцию.