Для разработки базовой процедуры приведена таблица с базовыми скалярными типами Oracle и соответствующими внутренними типами платформы:
Базовый скалярный тип Oracle |
Псевдонимы для типа Oracle |
Внутренний тип платформы |
CHAR(n) |
CHARACTER(n) |
text |
NCHAR(n) |
NATIONAL CHARACTER(n) |
text |
VARCHAR2(n) |
VARCHAR(n) |
text |
NVARCHAR2(n) |
NATIONAL CHARACTER VARYING(n) |
text |
DATE |
- |
text |
TIMESTAMP [(fractional_seconds)] WITH TIME ZONE |
- |
text |
NUMBER[(p [, s])] |
INTEGER |
double |
FLOAT[(p)] |
REAL |
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 <наименование типа_1> AS OBJECT (
<имя столбца>
<тип столбца>
);
TYPE <наименование типа_2> AS TABLE OF <наименование
типа_1>;
Структура таблицы, получаемая на выходе процедур:
id (NUMBER(19)). Идентификатор;
name (NVARCHAR2(100)). Название фрукта.
Создание таблицы фруктов:
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