Встроенные функции SQL

Символьные функции, возвращающие символьные значения. Эти функции в качестве аргументов принимают символы и возвращают символьные значения. Большинство из них возвращают значения, имеющие тип VARCHAR2. Тип данных, возвращаемых символьными функциями, имеет те же ограничения, что и основной тип базы данных, т.е. значения типа VARCHAR2 ограничены 4000 символов, а значения типа CHAR — 2000 символов. При использовании в процедурных операторах эти значения можно присваивать переменным PL/SQL, имеющим тип либо VARCHAR2, либо CHAR.

 

Таблица 6 – Символьные функции, возвращающие символьные значения

 

Функция Описание
CONCAT(string1, string2) Возвращает строку string1 в соединении со строкой string2. Возвращаемое значение всегда имеет тип VARCHAR2 в наборе символов stringl.
INITCAP(string) Возвращает строку, в которой первый символ каждого слова является прописным, а остальные символы каждого слова строчные. Слова разделяются пробелами или не алфавитно-цифровыми символами.
LOWER(strmg) Возвращает строку, где все символы строчные. Символы, не являющиеся буквами, не изменяются.
LTRIM(string, string2) По умолчанию string2 соответствует одиночному пробелу. База данных будет просматривать string, начиная с самой левой позиции. Дойдя до первого символа, не встречающегося в string2, она вернет результат. LTRIM ведет себя аналогично RTRIM за исключением того, что удаляет символы слева, а не справа.
REPLACE(string, searcn_str [, replace_str]) Возвращает строку, где каждое вхождение символа searcn_str заменено символом replace_str.
RTRIM(string [,string2]) Возвращает строку string с удаленными правыми символами, присутствующими в строке string. По умолчанию string2 является одиночным пробелом. База данных будет просматривать string, начиная с самой правой позиции.
UPPER(string) Возвращает строку, где все символы переведены в верхний регистр. Символы, не являющиеся буквами, остаются без изменения в возвращаемом значении.
SUBSTR(sfring, a [,b]) Возвращает часть строки string; величины а и b измеряются в символах

Символьные функции, возвращающие числовые значения

Эти функции принимают символьные аргументы и возвращают числовые результаты. Аргументы могут быть либо CHAR, либо VARCHAR2. Хотя обычно в результате получается целое значение, возвращаемое значение является NUMBER без определения точности или масштаба. Эти функции описываются в следующей таблице.

 

Таблица 7 – Символьные функции, возвращающие числовые значения

 

Функция Описание
ASCII(string) Возвращает десятичное представление первого байта строки string из набора символов базы данных.
INSTR(string, string2 [,a][,b]) Возвращает позицию вхождения строки string2 в строку string; величины а и b измеряются в символах.
LENGTH(string) Возвращает длину строки, измеренную в символах

 

Числовые функции

Эти функции принимают аргументы типа NUMBER и возвращают значения типа NUMBER. Возвращаемые значения трансцедентальных и тригонометрических функций имеют точность 36 десятичных знаков. ACOS, ASIN, ATAN и ATAN2 вычисляются с точностью до 30 десятичных знаков. Числовые функции описываются в следующей таблице.

 

Таблица 8 – Числовые функции

 

Функция Описание
ABS(x) Возвращает абсолютное значение х.
COS(x) Возвращает косинус угла в х радиан.
ЕХР(х) Возвращает е в степени х (е = 2.71828183...).
FLOOR(x) Возвращает наибольшее целое число, меньшее или равное х.
LN(x) Возвращает натуральный логарифм х. Аргумент х должен быть больше 0.

 

Продолжение таблицы 8

1 2
LOG(x, у) Возвращает логарифм у по основанию х. Основание должно быть положительным числом, отличным от 0 и 1, а у может быть любым положительным числом.
MOD(x, у) Возвращает остаток от деления х на у. Если у равен 0, то возвращается х.
POWER(x, у) Возвращает х в степени у. Основание х и порядок у не должны быть обязательно положительными целыми числами, но если х—отрицательное число, то у должен быть целым числом.
ROUND (x [,y]) Возвращает х, округленный до у разрядов справа от десятичной точки. Значением по умолчанию для у является 0; при этом х округляется до ближайшего целого числа. Если у - отрицательное число, то округляются цифры слева от десятичной точки. Аргумент у должен быть целым числом.
SIN(x) Возвращает синус угла в х радиан.
SQRT(x) Возвращает квадратный корень х. Аргумент х не может быть отрицательным.
TAN(x) Возвращает тангенс угла в х радиан.
TRUNC(x [,y]) Возвращает х, усеченный (не округленный) до у десятичных разрядов. Значением по умолчанию для у является 0; при этом х усекается до целого числа. Если у отрицательный, усекаются цифры слева от десятичной точки.

Функции даты и времени

Аргументы функций даты и времени имеют тип DATE. За исключением функции MONTHS_BETWEEN, которая возвращает значение типа NUMBER, все функции возвращают значения типа DATE.

Таблица 9 –Функции даты и времени

 

Функция Описание
ADD_MONTHS(d, x) Возвращает дату d плюс х месяцев. Аргумент х может быть любым целым числом.
CURRENT_DATE Возвращает текущую дату во временной зоне сеанса как значение типа DATE. Эта функция аналогична SYSDATE за исключением того, что SYSDATE не зависит от временной зоны текущего сеанса.
LAST_DAY(d) Возвращает последний день месяца, содержащего d. Эту функцию можно применять для определения количества дней, оставшихся в текущем месяце.
MONTHS_BETWEEN(date1, date2) Возвращает число месяцев между датой datel и датой date2. Если дни в datel и date2 совпадают или если обе даты являются последними днями своих месяцев, то результат представляет собой целое число.
NEXT_DAY(d, string) Возвращает в string дату первого дня, наступающего после даты d. Строка string указывает день недели на языке текущего сеанса.
ROUND(d[, format]) Округляет дату d до единицы измерения, указанной в format.
SYSDATE Возвращает текущие дату и время в формате типа DATE.
TRUNC(d[, format]) Возвращает дату d, усеченную до единицы измерения, указанной с помощью format.

 

Курсоры

Для обработки SQL-оператора Oracle выделяет область памяти, называемую контекстной областью (context area). Она содержит информацию, необходимую для завершения обработки, включая: число строк, обрабатываемых оператором, указатель на представление этого оператора после проведения синтаксического анализа и активный набор, т.е. набор строк, возвращаемых запросом.

Курсор (cursor) — это указатель на контекстную область. С его помощью программа PL/SQL может управлять контекстной областью и ее состоянием во время обработки оператора. Ниже приводится блок PL/SQL, в котором выполняется цикл выборки курсора. Здесь запрос возвращает несколько строк данных.

Для выполнения примера созданим таблицу и вставим в нее строки.

 

CREATЕ TABLE students ( Id NUMBER, first_name VARCHAR2(50), last_name VARCHAR2(50), major VARCHAR2(10));   INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (1, ‘Николай’, ‘Сидоров’, ‘Информатика’); INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (2, ‘Петр’, ‘Иванов’, ‘Ин. язык’); INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (3, ‘Михаил’, ‘Петров’, ‘Информатика’);   CREATЕ SEQUENCE student_sequence;   COMMIT;

 

DECLARE     /* Выходные переменные для хранения результатов запроса */     v_StudentID students.id%TYPE;     v_FirstName students.first_name%TYPE;     v_LastName students.last_name%TYPE;     /* Переменная привязки, используемая в запросе */     v_Major students.major%TYPE:= 'Информатика';     /* Объявление курсора */     CURSOR c_Students IS SELECT id, first_name, last_name FROM students WHERE major = v_Major; BEGIN     /* Идентифицируем строки активного набора и подготовимся к дальнейшей     обработке данных */     OPEN c_Students;     LOOP     /* Извлечем каждую строку активного набора в переменные PL/SQL */     FETCH c_Students INTO v_StudentID, v_FirstName, v_LastName;     /* Если строки, которые нужно извлечь, закончились, выходим из цикла */     EXIT WHEN c_Students%NOTFOUND;     END LOOP;     /* Освободим ресурсы, используемые запросом */     CLOSE c_Students; END;

 

В этом примере используется явный (explicit) курсор. Имя курсора явно присваивается оператору SELECT при помощи оператора CURSOR...IS.

Для обработки явного курсора в PL/SQL необходимо выполнить четыре действия:

1. Объявить курсор.

2. Открыть курсор для запроса.

3. Выбрать результаты в переменные PL/SQL.

4. Закрыть курсор.

Объявление курсора является единственным действием, которое выполняется в разделе объявлений блока. Другие три действия производятся в выполняемом разделе или в разделе исключительных ситуаций.

При объявлении курсора ему назначается имя и ставится в соответствие некоторый оператор SELECT. Синтаксис объявления курсора:

 

CURSOR имя_курсора IS оператор_SELECT

 

где имя_курсора – это имя курсора, a оператор_SELECT – запрос, который будет обрабатываться. Так как имя курсора является идентификатором PL/SQL, оно должно быть объявлено до того, как на него будет произведена ссылка.

При объявлении курсора можно указывать переменные PL/SQL, которые рассматриваются в качестве переменных привязки. Для курсоров справедливы обычные правила по определению области действия, поэтому эти переменные должны быть видимы в точке объявления курсора.

Курсор открывается следующим образом:

 

OPEN имя_курсора;

 

где имя_курсора идентифицирует предварительно объявленный курсор.

 

Предложение INTO запроса является частью оператора FETCH. Оператор FETCH имеет две формы:

 

FETCH имя_курсора INTO список_переменных;

FETCH имя._курсора INTO запись_PL/SQL;

 

где имя_курсора обозначает предварительно объявленный и открытый курсор, список_переменных представляет собой список предварительно объявленных переменных PL/SQL, разделенных запятыми, a запись_PL/SQL – это предварительно объявленная запись PL/SQL. В любом случае переменная (переменные) в конструкции INTO должна иметь тип, совместимый со списком выбора запроса.

После каждого считывания FETCH указатель активного набора увеличивается и переходит к следующей строке. Таким образом, каждый оператор FETCH будет последовательно возвращать строки активного набора до тех пор, пока не будет передан весь набор.

Для определения момента считывания всего набора используется атрибут %NOTFOUND. При выполнении последнего считывания FETCH выходным переменным не будут присваиваться новые значения, т.е. они будут содержать прежние значения.

После того как весь активный набор выбран, курсор следует закрыть. Это сообщает PL/SQL, что программа закончила работу с курсором и отведенные для него ресурсы могут быть освобождены. В состав этих ресурсов, входит пространство для хранения активного набора, а также временное пространство, используемое для определения активного набора.

Синтаксис закрытия курсора:

CLOSE имя_курсора;

 

где имя_курсора обозначает ранее открытый курсор. После закрытия курсора считывать из него строки нельзя.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: