LastName oracle$number
Примеры ошибочных идентификаторов:
mine&yours |
--не разрешен из-за знака & |
debit-amount |
--не разрешен из-за знака – |
on/off |
--не разрешен из-за знака / |
user id |
--не разрешен из-за пробела |
Кавычки и идентификаторы
Если необходимо в идентификаторах использовать специальные сим- волы или пробел, то нужно заключать их в кавычки.
Примеры идентификаторов, которые пишутся в кавычках:
"X+Y" "last name"
"on/off switch" "employee(s)"
"*** header info ***"
Объявление переменных и констант
DECLARE – используется для определения начала блока объявления переменных, констант и пользовательских типов данных, пишется один раз для всего блока. Типы переменных представлены в табл. 4.2.
CONSTANT – переменная с заданным значением, которое нельзя из- менить в теле программы.
Синтаксис для объявления константы:
имя_переменной1 CONSTANT тип_переменной:= значение_переменной1;
Синтаксис для объявления переменных:
имя_переменной1 тип_переменной; …; имя_переменнойN тип_переменной;
Если тип переменной предполагает указание длины, то используется следующий синтаксис для объявления переменных:
имя_переменной1 тип_переменной (длина); имя_переменнойN тип_переменной(длина);
Пример простейшей программы: declare
perem1 numeric(10,0); perem2 varchar(15);
const1 char(10):= 'Привет!';
35
begin perem1:=12*2;
end;
Использование значений по умолчанию (DEFAULT) DEFAULT используется для переменных, у которых есть типичное значе- ние. Этот оператор можно использовать для объявления параметров под- программ, параметров курсора, а также для значения полей пользователь- ского типа записи.
Пример:
SET SERVEROUTPUT ON DECLARE
hours_worked INTEGER DEFAULT 40; employee_count INTEGER := 0;
BEGIN DBMS_OUTPUT.PUT_LINE(hours_worked); DBMS_OUTPUT.PUT_LINE(employee_count);
END;
Присвоение значений переменным и вывод значений на экран
Присвоение значений переменным и константам осуществляется по- средством знака :=.
Вывод значения на экран реализуется с помощью системной процедуры
DBMS_OUTPUT.PUT_LINE(имя переменной) при включенной настрой- ке SET SERVEROUTPUT ON.
Все системные процедуры можно увидеть в справочной системе Oracle
в разделе «PL/SQL Packages and Types Reference» по адресу: http://www.oracle.com/pls/db102/to_toc?pathname=appdev.102%2Fb1425
8%2Ftoc.htm&remark=portal+%28Books%29
или в формате PDF: http://www.oracle.com/pls/db102/to_pdf?pathname=appdev.102%2Fb1425
8.pdf&remark=portal+%28Books%29
Пример:
SET SERVEROUTPUT ON declare
perem1 numeric(10,0); perem2 varchar(15);
const1 char(10):= 'Привет!'; begin
perem1:=12**2; DBMS_OUTPUT.PUT_LINE(perem1);
end;
36
Передача в строку апострофов
При необходимости в одну строку записать другую в апострофах ис- пользуют два напечатанных подряд апострофа. Например, комбинация 'а''а' будет принята системой как строка: а'а.
Пример:
SET SERVEROUTPUT ON BEGIN
DBMS_OUTPUT.PUT_LINE('DELETE FROM Authors ' || ' WHERE Name_author = ''' || 'Пушкин А.С.' || ''' ');
END;
Таблица 4.2
Типы переменных в PL/SQL
Тип данных |
Максималь- |
Описание |
|
ный размер |
|
1 |
2 |
3 |
BINARY_INT |
-2147483648 |
Длинное целое |
EGER, |
до |
|
PLS_INTEGE |
2147483647 |
|
R |
|
|
Подтипы |
|
Подтипы бинарного целого NATURAL and |
BINARY_INT |
|
POSITIVE позволяют запретить все числа, кроме по- |
EGER: |
|
зитивных. NATURALN and POSITIVEN запрещают |
NATURAL |
|
значения типа NULL. SIGNTYPE запрещает все чис- |
NATURALN |
|
ла, кроме -1, 0, and 1 |
POSITIVE |
|
|
POSITIVEN |
|
|
SIGNTYPE |
|
|
BOOLEAN |
TRUE, FALSE |
Логический тип |
|
или NULL |
|
VARCHAR2 |
32767 |
Символьная строка переменной длины, без указания |
|
|
размера ее длина равна 1 |
NUMBER |
Абсолютное |
Число, поддерживающее режимы фиксированной |
|
значение в |
точки и плавающей точки. Масштаб, указанный с |
|
диапазоне |
минусом, указывает на округление целой части. |
|
(1E-130, |
Масштаб со знаком плюс или без него обозначает ок- |
|
1.0E126) |
ругление до указанного количества знаков дробной |
|
|
части. NUMBER(точность, масштаб) |
37
|
|
Окончание табл. 4.2 |
|
|
|
1 |
2 |
3 |
Подтипы |
|
DEC, DECIMAL и NUMERIC – типы чисел с фикси- |
NUMBER: |
|
рованной точкой при максимальной точности до 38 |
DEC |
|
десятичных цифр. |
DECIMAL |
|
DOUBLE PRECISION и FLOAT – типы чисел с пла- |
DOUBLE |
|
вающей точкой при максимальной точности до 126 |
PRECISION |
|
двоичных цифр или округленно до 38 десятичных |
FLOAT |
|
цифр. |
INT |
|
REAL – тип числа с плавающей точкой при макси- |
INTEGER |
|
мальной точности до 63 двоичных цифр или округ- |
NUMERIC |
|
ленно до 18 десятичных цифр. |
REAL |
|
INTEGER, INT и SMALLINT – целочисленные типы |
SMALLINT |
|
с максимальной точностью до 38 десятичных цифр |
CHAR |
32767 байт |
Строка фиксированной длины |
CHARACTER |
|
|
LONG |
32760 байт |
LONG может хранить текст, массивы символов или |
|
|
небольшие по объему документы. Поля с типом |
|
|
LONG могут участвовать в операциях UPDATE, |
|
|
INSERT и в большинстве SELECT, кроме выражений |
|
|
вызываемых параметров функций SQL, а также в та- |
|
|
ких конструктах SQL, как WHERE, GROUP BY, |
|
|
и CONNECT BY |
LONG RAW |
|
В современных приложениях используйте CLOB или |
|
|
NCLOB вместо LONG, а также BLOB или BFILE |
|
|
вместо LONG RAW |
NCHAR |
32767 байта |
Статичная символьная строка в формате Unicode, |
|
|
максимальная длина которой будет равна 32767/2 в |
|
|
кодировке AL16UTF16 или 32767/3 в кодировке |
|
|
UTF8 |
NVARCHAR2 |
32767 байта |
Тип NVARCHAR2 может быть использован для хра- |
|
|
нения символьных строк переменной длины в форма- |
|
|
те Unicode. Максимальные размеры строки данного |
|
|
типа определяются как и у NCHAR |
BFILE |
до 4ГБ - 1 |
LOB (большой объект) с типами BFILE, BLOB, |
|
байт |
CLOB и NCLOB позволяет хранить блоки неструкту- |
|
|
рированных данных, таких как текст, изображения, |
BLOB |
от 8 до 128 |
видео клипы и звуки. |
CLOB |
терабайт |
Размер типа BFILE зависит от системы, но не может |
NCLOB |
|
превышать 4ГБ - 1 байт |
Date |
от 01.01.4712 |
Дата и время. Для присвоения даты используется |
|
до н.э. |
функция TO_DATE(‘символьная дата’, ‘формат да- |
|
до 01.01.4712 |
ты’) |
|
н.э. |
|
Пример использования подтипов длинного целого:
SET SERVEROUTPUT ON declare
38
i NATURAL; q NATURALN:=9; w POSITIVE:=2; e POSITIVEN:=8; r SIGNTYPE:=0;
begin i:=1;
DBMS_OUTPUT.PUT_LINE('i='||i||',q=' || q || ',w=' || w || ',e=' || e || ',r=' || r); end;
Пример присвоения значений переменной с типом NUMBER:
DECLARE
n NUMBER; |
|
BEGIN |
|
n := -9.999999E-130; |
-- правильно |
n := 9.999E125; |
-- правильно |
-- n := 10.0E125; |
-- неправильно, превышение разрядной сетки |
END; |
|
Преобразование типов переменных
В табл. 4.3 представлены основные функции по преобразованию типов переменных, кроме описанных существуют еще такие функции, как
TO_SINGLE_BYTE, TO_MULTI_BYTE, TO_BLOB, TO_CLOB, TO_NCLOB, с которыми можно ознакомиться дополнительно.
|
Таблица 4.3 |
Краткий обзор функций преобразования типов переменных |
|
|
|
Название |
Пояснения и пример использования |
функции |
|
1 |
2 |
CHARTOROWID |
Функция конвертирует символьную строку с данными, соот- |
|
ветствующими ROWID, в тип rowid |
HEXTORAW |
SET SERVEROUTPUT ON |
RAWTOHEX |
DECLARE |
RAWTONHEX |
n raw(10):='123da12'; |
|
BEGIN |
|
DBMS_OUTPUT.PUT_LINE( HEXTORAW(n) ); |
|
DBMS_OUTPUT.PUT_LINE( RAWTOHEX(n) ); |
|
END; |
|
|
ROWIDTOCHAR |
SET SERVEROUTPUT ON |
|
DECLARE |
|
n ROWID:='123da12sss'; |
|
BEGIN |
|
DBMS_OUTPUT.PUT_LINE( ROWIDTOCHAR(n) ); |
|
END; |
39