Материал: 2110

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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