Типы данных и переменные в СУБД


Типы данных

Все языки в компьютерном мире поддерживают типы данных. Типы данных определяют домен столбцов в таблице или переменных в коде. Они определяют, содержит ли столбец или переменная числа, алфавиты, логические значения и т. Д. Это очень важно, потому что оно контролирует неправильное использование столбца - если кто-то пытается вставить алфавиты в числовой столбец, это не позволяет. Если типы данных столбца не определены, мы можем хранить любые данные в любом столбце, что создает беспорядок. Любая таблица должна быть четко определена и хорошо структурирована. Типы данных помогают создать чистую базу данных.

Есть шесть типов встроенных типов данных

  1. Скалярные типы данных: - Используется для хранения скалярных значений, таких как числа, десятичные дроби и т. Д.
  2. Составные типы данных: - Это комбинация других типов данных, обычно скалярных типов данных.
  3. Типы справочных данных: - Используется для хранения информации о другом типе данных. В C.
  4. Типы данных LOB: - Используется для хранения больших объектов, таких как изображения, видео и т. Д.
  5. Неизвестные типы столбцов: - когда типы столбцов неизвестны, используется этот тип данных.
  6. Типы данных, определяемые пользователем: - эти типы данных определяются разработчиком при кодировании с использованием указанных выше базовых типов данных. Они определяют новые типы данных, чтобы упростить кодирование. Это тоже можно рассматривать как составной тип данных.

Скалярные типы данных

Эти типы данных используются для хранения числовых значений столбцов или числовых переменных. Предположим, у нас есть столбец AGE в таблице. В этом столбце могут быть только числа. Мы не можем вставить в него дату или алфавиты. Следовательно, мы объявляем этот столбец как НОМЕР. Это ограничивает пользователя при попытке вставить любые другие значения, кроме числа. Это один из механизмов поддержания ограничения домена столбца.

Существует четыре типа скалярных типов данных - символьные, числовые, даты / времени и логические.

Тип символьных данных: -Этот тип данных используется для хранения буквенно-цифровых значений, таких как алфавиты, а также чисел и специальных символов. В этом символьном типе данных есть разные подтипы в зависимости от объема памяти и длины сохраняемых данных.

При создании таблицы:

CREATE TABLE STUDENT (STD_NAME CHAR (15), ADDRESS VARCHAR2 (50));

В PL / SQL:
DECLARE
		v_name VARCHAR2 (30);
BEGIN ….
Тип данныхПодтип данныхОписаниеПамять
Тип символьных данныхCHARИспользуется для хранения фиксированной длины строки или значения.32767 байт
ПЕРСОНАЖЭто то же самое, что и CHAR, но оба используются поочередно. Чаще всего используется СИМВОЛ.32767 байт
VARCHAR2Это также похоже на CHAR, где хранятся строки. Этот тип данных будет определять фиксированную длину, но фактическая длина строки будет длиной значения, т.е. если VARCHAR2 (10) определен в столбце NAME и если NAME имеет одно значение «James», то длина этого значения столбца равна 5, а не 10. В случае CHAR оно всегда будет 10; пробел после имен будет заполнен NULLS.32767 байт
Подтипы VARCHAR2: следующий подтип определяет одинаковое значение длины.
Подтипы данныхОписание
STRINGони похожи на VARCHAR2, только разница в названии
VARCHAR
NCHARСохраняет данные национальных символов (Unicode) в пределах указанной длины.32767 байт
NVARCHAR2Это похоже на VARCHAR2, но используется для хранения значений Unicode.32767 байт
RAWЭтот тип данных используется для таких данных, как музыка, видео, графика и т. Д., Где преобразование типа данных между различными системами не требуется. Они представлены в битах и ​​байтах.32767 байт
ДЛИННЫЙИспользуется для хранения строк переменной длины с обратной совместимостью. В нем мы можем хранить очень большие данные. Но обычно рекомендуется использовать LOB, когда есть необходимость в LONG. Потому что LOB имеет меньше ограничений на хранение и преобразование и имеет больше функций, добавляемых при выходе новой версии. В операторах SELCT или UPDATE столбцы LONG предпочтительнее, чем таблицы.32760 байт
ДЛИННЫЙ RAWЭто комбинация типов данных LONG и RAW.32760 байт
ROWIDТип данных ROWID представляет собой фактический адрес хранения строки. И индексы таблицы как логический ROWID. Этот тип данных используется для хранения обратной совместимости.
УРОВИД [(размер)]Тип данных UROWID идентифицируется как универсальный ROWID, как и тип данных ROWID. Используйте тип данных UROWID для разработки новых приложений.4000 байт

 

Числовые типы данных: - Хранит различные типы числовых данных - числа, десятичные дроби и т. Д. В зависимости от типа у нас есть разные подтипы числовых типов данных.

При создании таблицы:

CREATE TABLE STUDENT (
STD_ID NUMBER (8), ADDRESS VARCHAR2 (50));

В PL / SQL:
DECLARE
		v_total PLS_INTEGER;
BEGIN …
Тип данныхПодтип данныхОписаниеПамять
ЧИСЛОВЫЕ Типы ДАННЫХЧИСЛО (п, с)Тип данных NUMBER, используемый для хранения числовых данных. Диапазон хранения: диапазон точности (p): от 1 до 38 и диапазон (ы) шкалы: от -84 до 127
ЧИСЛО подтипов: этот подтип определяет диапазон хранения различных типов.
Подтипы данныхОписаниеМаксимальная точность
ЦЕЛОЕЭти типы данных используются для хранения фиксированных десятичных знаков. Вы можете использовать в соответствии с вашими требованиями.38 цифры
INT38 цифры
МАЛЕНЬКИЙ38 цифры
Декабрь38 цифры
ДЕСЯТИЧНЫЙ38 цифры
ЧИСЛОВЫЙ38 цифры
РЕАЛ63 двоичных разряда
ДВОЙНАЯ ТОЧНОСТЬ126 двоичных разряда
FLOAT126 двоичных разряда
BINARY_INTEGERТип данных BINARY_INTEGER хранит положительные и отрицательные значения. Они требуют меньше места для хранения по сравнению со значениями типа данных NUMBER. Диапазон хранения: от -2147483647 до 2147483647.
Подтипы данныхОписание 
NATURALСохраняются только положительные значения.
ПОЗИТИВНО
НАТУРАЛЬНЫЙЗначения NULL в этом типе данных не хранятся. Допускаются только ненулевые положительные значения.
ПОЗИТИВЕН
ТИП ЗНАКАSIGNTYPE допускает только значения -1, 0 и 1.
PLS_INTEGERТип данных PLS_INTEGER, используемый для хранения данных целых чисел со знаком. Они требуют меньше места для хранения по сравнению со значением типа данных NUMBER. Диапазон хранения: от -2147483647 до 2147483647. Тип данных PLS_INTEGER обеспечивает лучшую производительность для данных. PLS_INTEGER выполняет арифметические операции быстрее, чем тип данных NUMBER / BINARY_INTEGER.

Дата / время Типы данных: - Эти типы данных используются для хранения даты и времени в столбцах и переменных.

Тип данныхПодтип данных

Описание

Диапазон

Дата / время Тип данных

ДАТАТип данных DATE хранит действительный формат даты и времени с фиксированной длиной. Дата начала с 1 января 4712 года до нашей эры по 31 декабря 9999 года нашей эры.1 января 4712 г. до н.э. по 31 декабря 9999 г.
TIMESTAMPСохраняет действительную дату с годом, месяцем, днем ​​и временем с часами, минутами, секундами

Тип

TIMESTAMP Тип

1

Синтаксис: TIMESTAMP [(дробная_секунда_точность)]
Fractional_seconds_precision дополнительно указывает количество цифр в дробной части второй точности. Диапазон от 0 до 9. По умолчанию 6.
Пример: TIMESTAMP '2014-04-13 18: 10: 52.124'

2

Синтаксис: TIMESTAMP [(Fractional_seconds_precision)] WITH TIME ZONE
Пример: TIMESTAMP '2014-04-13 18: 10: 52.124 +05: 30'
WITH TIME ZONE укажите часовой пояс UTC. Следующие два значения представляют один и тот же момент в формате UTC.
TIMESTAMP '1999-04-15 8:00:00 -8: 00' (8.00:XNUMX по тихоокеанскому времени) или
TIMESTAMP '1999-04-15 11:00:00 -5: 00' (11:00 утра по восточному поясному времени) оба одинаковы.

3

Синтаксис: TIMESTAMP [(Fractional_seconds_precision)] С МЕСТНЫМ ЧАСОМ
Пример: COL_NAME TIMESTAMP (3) WITH LOCAL TIME ZONE;
WITH LOCAL TIME ZONE указывает, когда вы вставляете значения в столбец базы данных, значение сохраняется с часовым поясом базы данных.
Смещение часового пояса не сохраняется в столбце. Когда вы получаете значение из базы данных Oracle, возвращает его в соответствии с вашим часовым поясом UTC.

Логические типы данных: - Он используется для хранения логических значений - ИСТИНА или ЛОЖЬ. Он также может хранить NULL и считается беззнаковой логической переменной. Мы не можем сравнивать логические столбцы двух таблиц.

SELECT * FROM EMP
 WHERE IS_EMPLOYED = (SELECT IS_EMPLOYEED 
				FROM EMP WHERE EMP_NAME = ‘John’); -- this query is not valid

Составные типы данных или типы данных, определяемые пользователем

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

Запись - это один из составных типов данных. В нем может быть любое количество типов данных. Это можно представить как массив с разными типами данных или как саму таблицу. В большинстве случаев для создания записей используются скалярные типы данных.

Чтобы объявить переменную как составной тип данных, мы должны определить составной тип данных в соответствии с нашей необходимостью. Затем этот тип данных можно присвоить другим переменным, чтобы иметь такие записи. Во-первых, давайте посмотрим на общий синтаксис для него, а затем на примере.

TYPE record_type_name IS RECORD 
(Column1 DATATYPE, Column2 DATATYPE… ColumnN DATATYPE);

TYPE rc_emp IS RECORD 
(emp_id NUMBER, emp_name VARCHAR2 (15), date_of_birth DATE); -- An employee record rc_emp with datatypes number, varchar2 and Date is created.

Здесь rc_emp - это имя составного типа данных. Выше синтаксис для создания составного типа данных. После создания его можно присвоить переменной двумя способами.
  • vr_emp_record rc_emp; - Объявляет переменную vr_emp_record с тремя столбцами с разными типами данных. Эта переменная теперь может содержать массив или таблицу данных. Каждый столбец внутри этой переменной может называться vr_emp_record.emp_id, vr_emp_record.emp_name и vr_emp_record.date_of_birth.
  • Другой метод - создать отдельные переменные для каждого столбца в типе записи.

rc_emp_id vr_emp_record.emp_id%TYPE;
rc_emp_name vr_emp_record.emp_name%TYPE;
rc_date_of_birth vr_emp_record. date_of_birth %TYPE; -- vr_emp_record is a record type

Этот метод объявления полезен, когда нам нужно назначить типы данных существующих столбцов таблицы. В таком случае нет необходимости создавать типы записей, мы можем напрямую использовать таблицы для назначения типов данных, как показано ниже. Это поможет разработчику автоматически назначать тип данных столбцов таблицы, и ему не нужно проверять тип данных каждого столбца. Кроме того, если есть какие-либо изменения в типе данных или длине столбцов, это будет автоматически отражено в коде. В таких случаях менять код не нужно.
rc_emp_id EMPLOYEE.emp_id%TYPE;
rc_emp_name EMPLOYEE.emp_name%TYPE;
rc_date_of_birth EMPLOYEE. date_of_birth %TYPE; -- Where EMPLOYEE is a table.

Давайте рассмотрим пример, чтобы лучше понять это.
DECLARE
      TYPE rc_emp IS RECORD 
	(emp_id NUMBER, 
	emp_name VARCHAR2 (15), 
	date_of_birth DATE); -- Declaring a record type with user defined columns
	
	vr_emp_record rc_emp; -- Declaring a variable of datatype rc_emp
BEGIN
	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || vr_emp_record.emp_id);
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || vr_emp_record.emp_name);
	DBMS_OUTPUT.PUT_LINE (‘Employee Date Of Birth:’ || vr_emp_record.date_of_birth);
END;

DECLARE
	rc_emp EMPLOYEE%ROWTYPE; -- Declaring a table record type 
	rv_emp_name EMPLOYEE.emp_name%TYPE; --declaring a variable with table column type
BEGIN
	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || rc_emp.emp_id); 
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || rc_emp.emp_name);
	DBMS_OUTPUT.PUT_LINE (‘Employee Date Of Birth:’ || rc_emp.date_of_birth);
END;

Здесь оба блока кодов одинаковы и дают одинаковый результат (представьте, что таблица EMPLOYEE имеет только три столбца, как мы определили сначала). Первый блок кода использует определяемые пользователем типы данных столбца в переменной записи, тогда как второй блок кода использует таблицу и ее столбец для определения типов данных переменных.

Преимущество ROWTYPE

Недостаток ROWTYPE

Нет необходимости явно определять типы данных столбца. Они будут автоматически извлечены из таблиц.Когда запись создается с использованием ROWTYPE, все столбцы назначаются переменной записи. Память будет использоваться для создания типов данных всех столбцов. Разработчику может потребоваться всего несколько столбцов для кодирования, но другие столбцы также без необходимости создаются в записи.
Когда таблица изменяется для некоторых типов данных столбца или длины столбца, это будет автоматически отражено в коде. Нет необходимости изменять код при изменении таблицы.

Вот как мы создаем тип данных. Но в нем не будет значений столбцов таблицы. Мы должны явно присвоить им значения. В приведенных выше блоках кода мы не присвоили никаких значений, и он ничего не будет отображать. Этот пример был просто демонстрацией того, как объявлять переменные записи и получать к ним доступ. Мы можем назначать и получать значения типа записи следующим образом:

Синтаксис

Применение

record_name.col_name: = значение;Чтобы напрямую присвоить значение определенному столбцу записи или напрямую присвоить значение определенному столбцу записи, который объявлен с помощью% ROWTYPE.
ВЫБЕРИТЕ col1, col2 INTO имя_записи.имя_столбца1, имя_записи.имя_колонки2 FROM имя_таблицы [предложение WHERE];Чтобы присвоить значения каждого столбца столбцам записи
SELECT * INTO имя_записи FROM имя_таблицы [предложение WHERE];Чтобы присвоить записи значения каждого столбца или всей таблицы
Variable_name: = record_name.col_name;Чтобы получить значение из столбца записи и присвоить его переменной.

 

DECLARE
	rc_emp EMPLOYEE%ROWTYPE; -- Declaring a table record type 
	rv_emp_name EMPLOYEE.emp_name%TYPE; --declaring a variable with table column type
BEGIN
	rc_emp.emp_id: = 100; -- Assigning the values
	rc_emp.emp_name: = ‘John’;

	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || rc_emp.emp_id);
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || rc_emp.emp_name);
END;

Подобно Records, у нас есть еще один составной тип данных, называемый Коллекции. Он похож на массивы и будет иметь те же типы данных. Есть три типа коллекций.

Ассоциативный массив или индекс по таблице: - Это двухмерный массив с парой (ключ, значение). Ключ - это идентификатор позиции каждого значения. Ключ здесь может быть целым или символьным / строковым. У нас может быть любое количество пар (ключ, значение). Нет ограничений на количество данных в этом массиве, следовательно, неограниченно. Это наиболее часто используемый тип коллекций.

TYPE index_table IS TABLE OF value_datatype [NOT NULL] INDEX BY key_datatype;
v_ index_table index_table;

Приведенный выше синтаксис создает коллекцию с именем index_table со значениями value_datatype и key с key_datatype. После создания коллекции создается переменная коллекции v_index_table.
DECLARE
TYPE salary_col IS TABLE OF NUMBER INDEX BY VARCHAR2 (20);
   v_salary_list salary_col;

v_name VARCHAR2 (25);
BEGIN
   -- Assigning the data to tables
   salary_list (‘Sophia’):= 45000;
   salary_list (‘John’):= 75000;
v_name:= salary_list. FIRST; -- Retrieving the first data
DBMS_OUTPUT.PUT_LINE (‘Salary of ‘|| v_name || ‘is ‘|| salary_list (v_name)); --it will display output as ‘Salary of Sophia is 45000. It will not display John’s detail. In order to get his details, we have to reassign v_name:= salary_list. Next and then display
END;

Вложенные таблицы: - Это как одномерный массив, но в нем может быть любое количество записей. Размер этого типа динамически увеличивается по мере поступления записей. Записи добавляются одна за другой в последовательности, но когда мы удаляем из нее любую запись, пространство для удаленной записи не удаляется. Следовательно, при вставке данных таблицы этого типа будут плотными и постепенно станут разреженными. Вложенные таблицы могут использоваться в качестве столбца в таблице, а также могут использоваться в коде PL / SQL.

Синтаксис для этого следующий:

TYPE nt_name IS TABLE OF record_datatype [NOT NULL];
table_name nt_name;

где record_datatype может быть любым типом данных СУБД или любым типом столбца таблицы.

Например; ТИПnt_salary ТАБЛИЦА НОМЕРОВ;

ИЛИ ТИП nt_salary ТАБЛИЦА СОТРУДНИК. ЗАПЛАТА%ТИП;

Программа ниже показывает, как объявлять, создавать и получать доступ к вложенным таблицам.

DECLARE
TYPE nt_salary IS TABLE OF NUMBER;
TYPE nt_empname IS TABLE OF VARCHAR2 (20);

   nt_salary_list nt_salary;
 nt_emp_list nt_empname;
BEGIN
   -- Assigning the data to nested tables
 nt_emp_list: = nt_empname (‘Sophia’, ‘James’, ‘Bryan’);
nt_salary_list: = nt_salary (20000, 40000, 60000);

-- Retrieving the records of nested table
FOR i IN 1... nt_emp_list.count LOOP -- nt_emp_list.countwill give total number of records in the nested table
      DBMS_OUTPUT.PUT_LINE (‘Salary For ‘||nt_emp_list (i) || ‘: ‘||nt_salary_list (i)); 
END LOOP;
END;

Результатом будет:

Заработная плата Софьи: 20000

Заработная плата Джеймса: 40000

Заработная плата Брайана: 60000

Массив переменных (varray): - Это также похоже на вложенный массив и может рассматриваться как одномерный массив при условии, что он имеет фиксированное количество записей. В отличие от вложенных таблиц, мы должны заранее объявить количество записей в этом массиве и использовать их в программе. Кроме того, мы не можем удалить отдельные записи массива. Из-за этих функций разработчики с меньшей вероятностью будут использовать этот массив. В своих программах они предпочитают ассоциативный массив или вложенные таблицы.

Синтаксис Varray:

TYPE varray_name IS VARRAY (index) OF DATATYPE;

Например: - ТИП va_salary ВАРРЕЙ (4) НОМЕРА;

va_salary_list va_salary;

Программа ниже показывает, как объявлять, создавать и получать доступ к varray.

DECLARE
		TYPE va_salary IS VARRAY (4) OF NUMBER;
		TYPE va_empname IS VARRAY (4) OF VARCHAR2 (20);
		
   va_salary_list va_salary;
 va_emp_list va_empname;
BEGIN
   -- Assigning the data to varray
 va_emp_list: = va_empname (‘Sophia’, ‘James’, ‘Bryan’);
va_salary_list: = va_salary (20000, 40000, 60000);

-- Retrieving the records of varray
FOR i IN 1... va_emp_list.count LOOP -- va_emp_list.countwill give total number of records in the varray
      DBMS_OUTPUT.PUT_LINE (‘Salary For ‘||va_emp_list (i) || ‘: ‘||va_salary_list (i)); 
END LOOP;
END;

Результатом будет:

Заработная плата Софьи: 20000

Заработная плата Джеймса: 40000

Заработная плата Брайана: 60000

Ниже приводится сравнение трех типов коллекций.

Тип коллекцииКоличество записейТип ключаПлотный или разреженныйГде созданМожет быть атрибутом типа объекта
Ассоциативный массив (или индексная таблица)неограниченныйСтрока или целое числоИлиТолько в блоке PL / SQLНет
Вложенная таблицанеограниченныйЦелоеНачинается плотно, может стать редкимЛибо в блоке PL / SQL, либо на уровне схемыДа
Массив переменного размера (Варрей)ограниченныйЦелоеВсегда плотныйЛибо в блоке PL / SQL, либо на уровне схемыДа

Типы справочных данных

Этот тип данных относится к существующим данным в программе. Он действует как указатель на переменную. Одним из примеров ссылочного типа данных является refcursor. Это переменные курсора, используемые для обращения к статическому курсору и доступа к нему. Мы можем передать эту переменную процедурам / функциям и получить значения из функции в качестве рефкурсора. Короче говоря, он действует как переменная, но ссылается на запрос, определенный во время выполнения.

Мы можем увидеть разницу между курсором и рефкурсором в программе ниже. Подробнее об этом мы узнаем в статье Advanced SQL.

DECLARE
           TYPE rc_cursor is ref cursor; 
	CURSOR c_course IS
		SELECT * FROM COURSE;
           l_cursor rc_cursor;
         n_ID NUMBER;
BEGIN
	IF n_ID = 10 THEN
	-- Dynamically opens the cursor for student ids less than 10
		Open l_cursor FOR ‘SELECT * FROM STUDENT WHERE STD_ID<= 10’;
	ELSE	
	-- Dynamically opens the cursor for student ids greater than 10
		OPEN l_cursor FOR ‘SELECT * FROM STUDENT WHERE STD_ID > 10’;
	 END IF;
	-- Opens static cursor c_course
	 OPEN c_course;
END;

Типы данных LOB

Эти типы типов данных используются для хранения очень большого количества данных в столбце / переменной. Он может хранить такие файлы, как музыка, графика и т. Д. У нас есть следующие типы типов данных LOB:

Тип данныхПодтип данныхОписаниеПамять

Тип данных LOB

BFILEИспользуется для хранения больших двоичных объектов в файле операционной системы. BFILE хранит полный путь к локатору файлов, который указывает на сохраненный двоичный объект на сервере. Тип данных BFILE доступен только для чтения, вы не можете их изменять.Размер: до 4 ГБ (232 - 1 байт)
Имя каталога: 30 символов
Имя файла: 255 символов
Большой двоичный объектЭто то же самое, что и BFILE, используется для хранения неструктурированного двоичного объекта в файле операционной системы. Полностью поддерживаемые транзакции типа BLOB могут быть восстановлены и реплицированы.Размер: от 8 ТБ до 128 ТБ
(4 ГБ - 1) * DB_BLOCK_SIZE
CLOBБольшие блоки символьных данных хранятся в базе данных с использованием этого типа данных. Храните однобайтовые и многобайтовые символьные данные. Типы CLOB - это полностью поддерживаемые транзакции, их можно восстановить и реплицировать.Размер: от 8 ТБ до 128 ТБ
(4 ГБ - 1) * DB_BLOCK_SIZE
NCLOBТип данных NCLOB для хранения больших блоков данных NCHAR в базе данных. Храните однобайтовые и многобайтовые символьные данные. Полностью поддерживаемые транзакции типа NCLOB могут быть восстановлены и реплицированы.Размер: от 8 ТБ до 128 ТБ
(4 ГБ - 1) * DB_BLOCK_SIZE

Неизвестные типы столбцов

Мы видели это в пользовательских типах данных для объявления переменных. Это называется неизвестными столбцами, потому что этот тип типов данных не является базовым типом данных и определяется пользователем или таблицами. Разработчик не предсказывает тип данных, просто видя имя или объявление. Он должен увидеть определение типа данных записи, чтобы понять его.

Тип данныхПодтип данных

Описание

Неизвестные типы данных столбца

%ТИПИспользуется для хранения одного столбца с неизвестным типом данных. Столбец идентифицируется типом данных% TYPE.
Например, EMP.ENO% TYPE
% ROWTYPEСохраняет тип данных всех столбцов в таблице. Все столбцы идентифицируются типом данных% ROWTYPE.
Например, EMP% ROWTYPE–> таблице будут назначены все типы данных столбца таблицы EMP.
% ROWIDROWID - это тип данных. ROWID бывает двух типов: расширенный или ограниченный. Расширенный возврат ROWID 0 и ограниченный возврат ROWID 1 в противном случае возвращают номер строки.
Некоторые функции определены в ROWID и определены в пакете DBMS_ROWID.

функция ROWID

Описание

ROWID_VERIFYПроверяет, можно ли расширить ROWID.
ROWID_TYPE0 = ROWID, 1 = расширенный.
ROWID_BLOCK_NUMBERНомер блока, который содержит возврат записи 1.
ROWID_OBJECTНомер объекта в записи.
ROWID_RELATIVE_FNUMBERВозвращает относительный номер файла, содержащего запись.
ROWID_ROW_NUMBERНомер строки записи.
ROWID_TO_ABSOLUTE_FNUMBERВернуть абсолютный номер файла.
ROWID_TO_EXTENDEDПреобразует ROWID в расширенный формат.
ROWID_TO_RESTRICTEDПреобразует ROWID в ограниченный формат.

Переменные

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

Синтаксис объявления переменной:

Имя_переменной ТИП ДАННЫХ;

Мы даже можем присвоить переменной значение по умолчанию. Когда переменная объявлена ​​как NOT NULL, необходимо присвоить значение по умолчанию.

Variable_name DATATYPE: = value; 
Variable_name DATATYPE NOT NULL: = value; 

n_age NUMBER NOT NULL: = 18;
v_name VARCHAR2 (25);

В программе мы можем либо напрямую присвоить значение переменной, либо использовать его в запросе, чтобы получить в него значение столбцов.

Объем переменных

В программе PL / SQL у нас может быть несколько блоков, т.е. он имеет несколько блоков BEGIN - END один внутри другого.  Когда переменные объявляются в этих блоках, они действуют по отношению к своим блокам.

Переменная, объявленная внутри блока, доступна только этому блоку. Такие переменные называются локальные переменные. К ним не могут получить доступ никакие внешние блоки. Когда у нас есть внутренние блоки, мы можем получить доступ к переменным, объявленным его внешними блоками. Такие переменные называются глобальные переменные.

DECLARE
	n_age NUMBER; -- Global Variable
BEGIN
	SELECT AGE INTO n_age FROM PERSON WHERE SSN = 323234;
	DECLARE
	v_name VARCHAR2 (30); -- Local Variable, accessible only inside this block
	BEGIN
		SELECT PERS_NAME 
			INTO v_name 
		    FROM PERSON WHERE SSN = 323234;
		DBMS_OUTPUT.PUT_LINE (‘Name of the Person is ‘|| v_name);
	END;
DBMS_OUTPUT.PUT_LINE (‘Age of the Person is ‘|| v_name);
END;

Константы

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

Синтаксис для константы:

constant_name CONSTANT DATATYPE: = value; -- value has to be assigned without fail, since it is a constant
	pi CONSTANT NUMBER (2, 2): = 3.14;
	incr_percentage CONSTANT NUMBER: = 10;
	declared_holiday CONSTANT VARCHAR2 (7): = ‘SUNDAY’;

В программе эти константы используются как любые обычные переменные. Единственное отличие от переменной в том, что мы не можем изменить значение константы.

Заключение

ТИПЫ ДАННЫХ

 

 

 

ПОДАТИПЫ

ТИПЫ ДАННЫХ В SQL

ПОДДАТИПЫ В SQL

Скалярные типы данных

Характер

CHAR

 

ПЕРСОНАЖ

 

VARCHAR2

STRING

VARCHAR

NCHAR

 

NVARCHAR2

 

RAW

 

ДЛИННЫЙ

 

ДЛИННЫЙ RAW

 

ROWID

 

УРОВИД [(размер)]

 

Числовой

ЧИСЛО (п, с)

ЦЕЛОЕ

INT

МАЛЕНЬКИЙ

Декабрь

ДЕСЯТИЧНЫЙ

ЧИСЛОВЫЙ

РЕАЛ

ДВОЙНАЯ ТОЧНОСТЬ

FLOAT

BINARY_INTEGER

NATURAL

ПОЗИТИВНО

НАТУРАЛЬНЫЙ

ПОЗИТИВЕН

ТИП ЗНАКА

PLS_INTEGER

 

Логический

 

 

Дата / Время

ДАТА

 

TIMESTAMP

 

Составные типы данных / Типы данных, определяемые пользователем

ЗАПИСЬ

 

 

КОЛЛЕКЦИЯ

Ассоциативный массив / индекс по таблице

 

Вложенные таблицы

 

Переменный массив (Варрей)

 

Справочные типы данных

 

Ref Курсор

 

Типы данных LOB

 

BFILE

 

 

Большой двоичный объект

 

 

CLOB

 

 

NCLOB

 

Неизвестные типы столбцов

 

%ТИП

 

 

% ROWTYPE

 

 

% ROWID