СТАТЬЯ
27.03.01

предыдущая часть | содержание | следующая часть

Изменение вашей метки DBMS

В режиме DBMS MAC, вы можете изменить свою метку DBMS посредством параметра SET LABEL команды ALTER SESSION. Для дополнительной информации об использовании этой команды обратитесь к вашему документу Trusted ORACLE7 Server Administrator's Guide.

Команда ALTER SESSION SET LABEL действительна также в режиме OS MAC; однако, поскольку вы не можете установить никакого другого значения метки DBMS, помимо метки базы данных, к которой вы подключены, здесь эта команда не имеет смысла.

Типы данных ANSI, DB2 и SQL/DS

Помимо типов данных ORACLE, столбцы таблиц в базе данных ORACLE могут быть определены с типами данных ANSI, DB2 и SQL/DS. Однако ORACLE внутренне преобразует такие типы данных в типы данных ORACLE.

Табл.3-3

Преобразования типов данных ANSI в типы данных ORACLE
Тип данных ANSI SQL
Тип данных ORACLE
CHARACTER(n), CHAR(n) CHAR(n)
NUMERIC(p,s), DECIMAL(p,s), DEC(p,s) NUMBER(p,s)
INTEGER, INT, SMALLINT NUMBER(38)
FLOAT(p) FLOAT(p)
REAL FLOAT(63)
DOUBLE PRECISION FLOAT(126)
CHARACTER VARYING(n), CHAR VARYING(n) VARCHAR2(n)

Табл.3-4

Преобразования типов данных SQL/DS и DB2 в типы данных ORACLE
Тип данных DB2 или SQL/DS Тип данных ORACLE
CHARACTER(n) CHAR(n)
VARCHAR(n) VARCHAR2(n)
LONG VARCHAR LONG
DECIMAL(p,s) NUMBER(p,s)
INTEGER, SMALLINT NUMBER(38)
FLOAT(p) FLOAT(P)
DATE DATE

Типы данных TIME, TIMESTAMP, GRAPHIC, VARGRAPHIC и LONG VARGRAPHIC продуктов IBM SQL/DS и DB2 не имеют соответствий среди типов данных ORACLE, и не могут использоваться. Типы данных TIME и TIMESTAMP являются субкомпонентами типа данных ORACLE DATE.

Типы данных ANSI NUMERIC, DECIMAL и DEC могут специфицировать только числа с фиксированной точкой. Для этих типов данных умалчиваемый масштаб (s) равен 0.

Преобразования данных

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

Неявные преобразования типов данных осуществляются согласно правилам, объясняемым в следующих двух секциях.

Замечание: В последующем обсуждении словом CHAR обозначается весь класс символьных типов данных.

Если вы используете Trusted ORACLE, обратитесь за дополнительной информацией, касающейся преобразований данных и типов данных MLSLABEL и RAW MLSLABEL.

Правило 1: Присваивания

При присваиваниях ORACLE может автоматически преобразовывать: * CHAR в NUMBER

Присваивание выполняется успешно, если ORACLE может преобразовать присваиваемое значение в тип данных цели присваивания. Ниже объясняются четыре типа присваиваний.

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

var1 CHAR(5);  
CREATE TABLE table1 (col1 NUMBER);  

* переменная := выражение

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

VAR1 := 0  

* INSERT INTO таблица VALUES (выражение1, выражение2, ...)

Типы данных выражений должны совпадать с типами данных соответствующих столбцов таблицы или быть преобразуемыми в них. Например, ORACLE автоматически преобразует данные, представленные в следующем предложении INSERT для таблицы TABLE1 (см. определение выше):

INSERT INTO table1 VALUES ('19');  

* UPDATE таблица SET столбец = выражение

Тип данных выражения должен совпадать с типом данных столбца или быть преобразуемым в него. Например, ORACLE автоматически преобразует значение, представленное в следующем операторе UPDATE для таблицы TABLE1:

UPDATE table1 SET col1 = '30';  

* SELECT столбец INTO переменная FROM таблица

Тип данных столбца должен совпадать с типом данных переменной или быть преобразуемым в него. Например, ORACLE автоматически преобразует данные, выбираемые из таблицы, перед их присваиванием переменной, в следующем предложении:

SELECT col1 INTO var1 FROM table1 WHERE col1 = 30;  

Правило 2: Вычисление выражений

При вычислении выражений ORACLE может автоматически выполнять те же преобразования, что и при присваиваниях. Выражение преобразуется в зависимости от своего контекста. Например, операнды арифметических операторов преобразуются в NUMBER, а операнды строковых функций преобразуются в VARCHAR2.

Ниже приведены некоторые общие типы выражений:

* Простые выражения, например:

      comm + '500'  

* Булевские выражения, например:

      bonus > sal / '10'  

* Вызовы функций и процедур, например:

      MOD (counter, '2')  
* Условия в фразе WHERE, например:
       WHERE hiredate = TO_DATE('1993-01-01','yyyy-mm-dd') 
       WHERE rowid = '0DC5.C.1' 

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

В присваиваниях вида

переменная := выражение

ORACLE сначала вычисляет выражение, применяя преобразования, покрываемые правилом 2; выражение может быть простым или сколь угодно сложным. Если все проходит успешно, выражение дает в результате единственное значение с некоторым типом данных.

Затем ORACLE пытается присвоить это значение цели присваивания, используя правило 1.

Преобразования CHAR в NUMBER могут быть успешными лишь тогда, когда символьная строка содержит правильное число. Преобразования CHAR в DATE могут быть успешными лишь тогда, когда символьная строка имеет умалчиваемый формат даты для сессии, который определяется параметром NLS_DATE_FORMAT.

предыдущая часть | содержание | следующая часть

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Oracle
Отправить ссылку на страницу по e-mail


Interface Ltd.

Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 27.03.01