Базовая процедура Oracle

Для разработки базовой процедуры приведена таблица с базовыми скалярными типами Oracle и соответствующими внутренними типами платформы:

Базовый скалярный тип Oracle

Псевдонимы для типа Oracle

Внутренний тип платформы

CHAR(n)

CHARACTER(n)

text

NCHAR(n)

NATIONAL CHARACTER(n)
NATIONAL CHAR(n)
NCHAR(n)

text

VARCHAR2(n)

VARCHAR(n)
CHARACTER VARYING(n)
CHAR VARYING(n)

text

NVARCHAR2(n)

NATIONAL CHARACTER VARYING(n)
NATIONAL CHAR VARYING(n)
NCHAR VARYING(n)

text

DATE

-

text

TIMESTAMP [(fractional_seconds)] WITH TIME ZONE

-

text

NUMBER[(p [, s])]

INTEGER
INT
SMALLINT
DECIMAL[(p, s)]
NUMERIC[(p,s)] 

double

FLOAT[(p)]

REAL
DOUBLE PRECISION 

double

BLOB

-

bytea

 

Подробное описание типов доступно в документации Oracle.

Примечание. 1. Преобразование Oracle-типов NUMBER и FLOAT в типы платформы может привести к существенной потере точности. Так ли это будет установлено в ходе тестирования пограничных значений.
2. В Oracle есть тип INTEGER, который является псевдонимом для NUMBER(38). Т.е. это целое число с точностью до 38 десятичных символов. Внутренний тип платформы bigint может хранить только 19 десятичных символов, поэтому Oracle-тип INTEGER необходимо конвертировать во внутренний тип double. Однако такое преобразование приведет к существенной потере точности.
3. В случае, если при работе с типами NCHAR и NVARCHAR2 требуется использовать специфические языки Unicode (например, арабская вязь), то при проектировании БД следует выставлять параметр nls_lang: UTF-8. При этом если уже используется параметр nls_lang, отличный от UTF-8 (например, american_america.CL8MSWIN1251), то можно использовать UNISTR-функцию, позволяющую преобразовывать строку к unicode. В этом случае на вход необходимо отправлять коды символов специфического языка. Коды представлены в документации.

Базовый табличный тип

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

TYPE <наименование типа_1AS OBJECT (
    <имя столбца> <тип столбца>
);
TYPE <наименование типа_2
AS TABLE OF <наименование типа_1>;

Пример

Структура таблицы, получаемая на выходе процедур:

Создание таблицы фруктов:

create or replace type fruits_structFieldsRow as OBJECT (r_id number(19), r_name varchar2(100));
create 
or replace type fruits_structTable as table of fruits_structFieldsRow;

Процедура, принимающая входной скалярный параметр «id» типа NUMBER, извлекает строку из таблицы фруктов:

create or replace package   demo Is
    
Function fruits_get(id1 NUMBER) return fruits_structTable;
end demo;

См. также:

Настройка интеграции с табличными источниками данных | Базовая процедура SQL Server