データ型の変換

いくつかの種類のデータ型変換について説明します。

「TimesTenにおける相違点: データ型に関する考慮事項」のデータ型変換に関する情報も参照してください。

PL/SQLのデータ型間の変換

TimesTenでは、PL/SQLのデータ型間での暗黙的および明示的な変換がサポートされています。

型がVARCHAR2の変数v_sal_hikeの例について検討します。給与の合計を計算する場合、PL/SQLでは最初にv_sal_hike NUMBERに変換されてから、操作が実行されます。結果の型はNUMBERになります。正しい結果を取得するために、PL/SQLでは暗黙的変換が使用されます。

Command> DECLARE
           v_salary NUMBER (6) := 6000;
           v_sal_hike VARCHAR2(5) := '1000';
           v_total_salary v_salary%TYPE;
         BEGIN
         v_total_salary := v_salary + v_sal_hike;
         DBMS_OUTPUT.PUT_LINE (v_total_salary);
         end;
         /
7000

PL/SQL procedure successfully completed.

アプリケーションのデータ型とPL/SQLまたはSQLのデータ型との間の変換

TimesTenでは、アプリケーション・プログラムのデータ型とPL/SQLのデータ型の変換、およびアプリケーション・プログラムのデータ型とTimesTen SQLのデータ型の変換がサポートされています。

この項の内容は次のとおりです。

アプリケーションのデータ型の変換マッピング

ODBC APIを使用するアプリケーションでのデータ型は、PL/SQLプログラムのデータ型にマップできます。

ODBCからPL/SQLへの型マッピングの詳細は、『Oracle TimesTen In-Memory Database C開発者ガイド』パラメータの型の割当ておよび型の変換を参照してください。

表3-4 ODBCでのSQLからPL/SQLへの型マッピングの例

ODBCの型 PL/SQLの型

SQL_BINARY

RAW(バインド済精度を使用)

SQL_CHAR

CHAR(バインド済精度を使用)

SQL_DATE

DATE

SQL_DECIMAL

NUMBER

SQL_DOUBLE

NUMBER

SQL_FLOAT

BINARY_DOUBLE

SQL_INTEGER

PLS_INTEGER

SQL_REFCURSOR

REF CURSOR

SQL_TIMESTAMP

TIMESTAMP(バインド済スケールを使用)

SQL_VARCHAR

VARCHAR2(バインド済精度を使用)

アプリケーションのデータ型の変換例

CプログラムでODBC APIを使用しており、VARCHAR2型のC変数をNUMBER型のPL/SQL変数にバインドする場合を検討します。TimesTenでは、暗黙的な変換が行われます。

Command> VARIABLE c_var VARCHAR2 (30) := '961';
Command> DECLARE v_var NUMBER;
         BEGIN
           v_var := :c_var;
           DBMS_OUTPUT.PUT_LINE (v_var);
         END;
         /
961
 
PL/SQL procedure successfully completed.

次の例では、型TT_BIGINTの列を持つ表を作成し、PL/SQLを使用してTimesTen SQL INSERT文を起動します。型SQL_VARCHARのバインド変数がINSERT文で使用されます。アプリケーションでINSERT文を直接起動する場合と同様の変換が行われます。

Command> CREATE TABLE conversion_test2 (Col1 TT_BIGINT);
Command>  VARIABLE v_var VARCHAR2 (100) := '1000';
Command>  BEGIN
           INSERT INTO conversion_test2 VALUES (:v_var);
          END;
          /
 
PL/SQL procedure successfully completed.

Command> SELECT * FROM conversion_test2;
< 1000 >
1 row found.

ノート:

SQLでは、SQLがPL/SQLプログラムによって起動されたか、アプリケーションによって直接起動されたかに関係なく、同じ変換が行われます。