ヘッダーをスキップ
Oracle® SQL Developer Microsoft Accessからの移行のための追加情報
リリース3.0
B66845-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

3 データ型、予約語およびその他のデータベース・オブジェクト

この章では、データ型、予約語、関数、問合せおよびピボット・テーブルを作成するTRANSFORM文について説明します。内容は次のとおりです。

3.1 Oracleのデータ型

表3-1に、SQL DeveloperがサポートするOracleのデータ型を示します。

表3-1 サポートされているOracleデータ型

データ型 説明

BLOB

バイナリ・ラージ・オブジェクト。最大サイズは4GBです。

CHAR

バイト単位の長さの固定長文字データ。最大サイズは2000バイトです。デフォルトおよび最小サイズは1バイトです。

CLOB

シングルバイト文字を含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでCHARデータベース・キャラクタ・セットを使用します。最大サイズは4GBです。

DATE

DATEデータ型には、日時情報が格納されます。日時情報はCHARおよびNUMBERの両方のデータ型で表すことができますが、DATEデータ型には特別な関連プロパティが含まれます。DATE型の各値に対して、世紀、年、月、日、時間、分、秒などの情報が格納されます。

FLOAT

38桁の10進精度(126桁のバイナリ精度)の浮動小数点数。

LONG

最大2GB(231-1バイト数)の可変長文字データ。

LONG RAW

最大2GBの可変長RAWバイナリ・データ。

NCHAR

文字単位またはバイト単位(各国語キャラクタ・セットの選択によって異なる)の長さの固定長文字データ。最大サイズは、それぞれの文字を格納するために必要なバイト数によって決定されます。上限は2000バイトです。デフォルトおよび最小サイズは、1文字または1バイト(キャラクタ・セットによって異なる)です。

NCLOB

マルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでNCHARデータベース・キャラクタ・セットを使用します。最大サイズは4GBです。各国語キャラクタ・セットのデータを格納します。

NUMBER

精度(p)とスケール(s)を持つ数字。精度(p)の範囲は1から38です。スケール(s)の範囲は-84から127です。

NVARCHAR2

最大長が文字単位またはバイト単位(各国語キャラクタ・セットの選択によって異なる)の可変長文字列。最大サイズは、それぞれの文字を格納するために必要なバイト数によって決定されます。上限は4000バイトです。NVARCHAR2には、サイズを指定する必要があります。

RAW

バイト単位の長さのRAWバイナリ・データ。最大サイズは2000バイトです。RAW値にサイズを指定する必要があります。

VARCHAR

現在、VARCHARデータ型はVARCHAR2データ型と同義です。VARCHARのかわりにVARCHAR2を使用することをお薦めします。


Oracleデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

3.2 Microsoft Access Jetのデータ型

表3-2に、Microsoft Access Jetデータ型を示します。

表3-2 Microsoft Access Jetのデータ型

データ型 説明 最小値 最大値

Text

可変長のテキスト

1

255

Memo

可変長の長いテキスト

1

64,000バイト

Number Byte

1バイト記憶域

0

255

Number Integer

2バイト記憶域

-32,768

32,767

Number Long Integer

4バイト記憶域

-2,147,483,648

2,147,483,647

Number Single

4バイト記憶域

-3.4 x 1038

3.4 x 1038

Number Double

8バイト記憶域

-1.8 x 10308

1.8 x 10308

Currency

8バイト記憶域(通貨)

-922337203685477.5808

922337203685477.5808

Counter Yes/No

4バイトの記憶域(AutoIncrementフィールド)1ビットの記憶域(ブール値)

0

2,147,483,647

Date/Time

8バイト記憶域



OLE Object

OLE(図形や他の複雑なデータ)

1

1.2GB


3.3 デフォルトのデータ型マッピング

表3-3に、Microsoft AccessからOracleへデータ型を変換するためにSQL Developerによって使用されるデフォルト設定を示します。SQL Developerを使用すると、代替の型を指定して特定のデータ型のデフォルト設定を変更できます。これを行うには、「Captured Objects」ナビゲータで対象となる取得モデルを右クリックし、「データ・マッピングの設定」を選択します。表3-3に、デフォルトのマッピングを示します。

デフォルトのデータ型マッピングを変更する方法の詳細は、SQL Developerのオンライン・ヘルプを参照してください。

表3-3 SQL Developerで使用されるデフォルトのデータ型マッピング

Microsoft Accessのデータ型 Oracleデータ型

Boolean

NUMBER(1, 0)

Byte

NUMBER(3, 0)

Currency

Number (15, 4)

Date

DATE

Double

FLOAT(126)

Integer

NUMBER(5, 0)

Long

NUMBER(11, 0)

LongBinary

BLOB

Memo

CLOB

Single

FLOAT(126)

Text

VARCHAR2


3.4 Oracleの予約語

次の表に、Oracleで予約されている語を示します。これらの予約語と競合するオブジェクト名には、SQL Developerによってアンダースコアが追加されます。

ABORT ACCEPT
ACCESS ADD
ALL ALTER
AND ANY
ARRAY ARRAYLEN
AS ASC
ASSERT ASSIGN
AT AUDIT
AUTHORIZATION AVG
BASE_TABLE BEGIN
BETWEEN BINARY_INTEGER
BODY BOOLEAN
BY CASE
CHAR CHAR_BASE
CHECK CLOSE
CLUSTER CLUSTERS
COLAUTH COLUMN
COMMENT COMMIT
COMPRESS CONNECT
CONSTANT CRASH
CREATE CURRENT
CURRVAL CURSOR
DATA_BASE DATABASE
DATE DBA
DEBUGOFF DEBUGON
DECIMAL DECLARE
DEFAULT DEFINITION
DELAY DELETE
DESC DIGITS
DISPOSE DISTINCT
DO DROP
ELSE ELSIF
END ENTRY
EXCEPTION EXCEPTION_INIT
EXCLUSIVE EXISTS
EXIT FALSE
FETCH FILE
FLOAT FOR
FORM FROM
FUNCTION GENERIC
GOTO GRANT
GROUP HAVING
IDENTIFIED IF
IMMEDIATE IN
INCREMENT INDEX
INDEXES INDICATOR
INITIAL INSERT
INTEGER INTERFACE
INTERSECT INTO
IS LEVEL
LIKE LIMITED
LOCK LONG
LOOP MAX
MAXEXTENTS MIN
MINUS MLSLABEL
MOD MODE
MODIFY NATURAL
NATURALN NETWORK
NEW NEXTVAL
NOAUDIT NOCOMPRESS
NOT NOWAIT
NULL NUMBER
NUMBER_BASE OF
OFFLINE ON
ONLINE OPEN
OPTION OR
ORDER OTHERS
OUT PACKAGE
PARTITION PCTFREE
PLS_INTEGER POSITIVE
POSITIVEN PRAGMA
PRIOR PRIVATE
PRIVILEGES PROCEDURE
PUBLIC RAISE
RANGE RAW
REAL RECORD
REF RELEASE
REMR RENAME
RESOURCE RETURN
REVERSE REVOKE
ROLLBACK ROW
ROWID ROWLABEL
ROWNUM ROWS
ROWTYPE RUN
SAVEPOINT SCHEMA
SELECT SEPERATE
SESSION SET
SHARE SIGNTYPE
SIZE SMALLINT
SPACE SQL
SQLCODE SQLERRM
START STATEMENT
STDDEV SUBTYPE
SUCCESSFUL SUM
SYNONYM SYSDATE
TABAUTH TABLE
TABLES TASK
TERMINATE THEN
TO TRIGGER
TRUE TYPE
UID UNION
UNIQUE UPDATE
USE USER
VALIDATE VALUES
VARCHAR VARCHAR2
VARIANCE VIEW
VIEWS WHEN
WHENEVER WHERE
WHILE WITH
WORK WRITE
XOR

3.5 Microsoft Accessの問合せ

Microsoft Accessの問合せは、Oracleのビューに変換されます。この項では、問合せを移行する際の考慮点およびMicrosoft Accessの機能をOracleモデルにマッピングする方法について説明します。

Microsoft Accessの問合せの移行には、次の考慮事項があります。

表3-4に、問合せの移行時に、Microsoft Access固有の機能がどのようにOracleモデルに変換されるかを示します。

表3-4 問合せの移行時におけるMicrosoft Access機能の変換

Microsoft Accessの機能 Oracleの機能への変換

DISTINCTROW

DISTINCT。警告: DISTINCTROWはすべてのレコード・データに基づいて重複レコードを削除しますが、DISTINCTは選択したデータにのみ基づいて重複行を削除します。DISTINCTROWと同様の動作を行うには、(必要な一意性のレベルを保証するために)さらに列を選択する必要がある場合があります。

日付への参照(#文字を使用)

単純な日付マスクに基づいた日付。これがデータに合わない場合は、Oracleモデルのユーティリティ・パッケージでVARCHAR2TODATE日付変換ファンクションを変更する必要があります。


Microsoft Accessの問合せにパラメータを使用せず、Microsoft Accessのリンクした表としてアクセスできるOracleのビューに変換する場合、次の手順に従います。

  1. Oracle ODBCドライバを使用してデータソース名(DSN)を作成します。

  2. Microsoft Accessでデータベースをオープンして、「Insert」→「Table」を選択します。

  3. ポップアップ・ウィンドウで、「Link Table」を選択します。

  4. 「Files of Type」ダイアログ・ボックスで、「ODBC Databases」を選択します。

  5. 手順1で作成したDSNを選択します。

  6. logon_name.viewnameを選択します。Microsoft Accessのアプリケーションが、実行時にユーザーにパスワードを求めるプロンプトを表示する必要がないように、「Save Password」を選択することも可能です。

  7. 一意の識別子を指定します。

3.5.1 パラメータを使用するMicrosoft Accessの問合せ

パラメータを使用するMicrosoft Accessの問合せは、同一セッションで設定したパラメータを持つ必要があるOracleのビューに変換されます。パラメータはセッションごとの変数に格納され、パラメータの取得と設定に、それぞれgetメソッドおよびsetメソッドを使用してアクセスされます。次の例では、input_nameパラメータを、移行した問合せqueryexampleSmithに設定します。

omwb_emulation.utilities.setvarchar2('QUERYEXAMPLE:input_name','Smith');

次の例では、current_dateパラメータを、移行した問合せqueryexampleの現在のシステム日付(OracleではSYSDATE)に設定します。

omwb_emulation.utilities.setdata('QUERYEXAMPLE:current_date',SYSDATE);

必要な書式でデータを表示するには、omwb_emulation.utilities.varchar2todateファンクションの書式文字列を変更する必要がある場合があります。

該当するgetメソッドは、移行した問合せにすでに含まれています。次に例を示します。

SELECT omwb_emulation.utilities.getvarchar2('QUERYEXAMPLE:input_name') FROM dual
SELECT omwb_emulation.utilities.getdate('QUERYEXAMPLE:current_date') FROM dual 

パラメータ文字列の最大値はデフォルトで256に設定されています。

次の例では、同一セッションのパラメータを設定します。Microsoft Accessの問合せは、次のとおりです。

Parameters [input name] text;
select telephone from example1 where name=[input name];

生成されたOracleのビューは、次のとおりです。

CREATE OR REPLACE FORCE VIEW queryexample  AS
SELECT  telephone
 FROM example1 WHERE name = 
  (SELECT omwb_emulation.utilities.getvarchar2('QUERYEXAMPLE:input_name') 
    FROM dual)

前述の例の場合、次の文でパラメータを設定する必要があります。

omwb_emulation.utilities.setvarchar2('QUERYEXAMPLE:input_name','Smith');

パラメータを設定すると、ビューの問合せができます。次に例を示します。

SELECT * FROM queryexample;

次の例では、オープンした接続でパラメータを設定します。これはADOコードおよびMSDASQL(Microsoft OLE driver for ODBC)とOracle ODBCを使用することを想定しています。詳細は、Microsoft Knowledge BaseのID 281998の項目を参照してください。

Declarations:
  Dim con As ADODB.Connection
  Dim setstring As ADODB.Command
  Dim param1 As ADODB.Parameter
  Dim param2 As ADODB.Parameter
 
Code to set parameter over connection con:
 
  Set setstring = New ADODB.Command
  With setstring
     .ActiveConnection = con
     .CommandText = "omwb_emulation.utilities.setvarchar2"
     .CommandType = adCmdStoredProc
  End With
 
  Set param1 = setstring.CreateParameter(, adVarChar, adParamInput, 100, "QUERYEXAMPLE:input_name")
  setstring.Parameters.Append param1
 
  Set param2 = setstring.CreateParameter(, adVarChar, adParamInput, 100, "Smith")
  setstring.Parameters.Append param2
 
  setstring.Execute
  Set setstring = Nothing

このコードの実行後に、この接続でこの項の前半の問合せ(SELECT * FROM queryexample;)を実行し、結果セットを使用できます。

3.6 ピボット・テーブルを作成するMicrosoft AccessのTRANSFORM文

ピボット・テーブルを作成する単純なMicrosoft AccessのTRANSFORM文のみが移行されます。たとえば、次のような書式のMicrosoft Accessの文があるとします。

TRANSFORM grp_function(value)
SELECT a,b,c
FROM xxxx
WHERE yyyy
GROUP BY zzzz
PIVOT pivot_exp in (val1,val2,val3)

この文は、Oracleモデルの次の書式の文に変換されます。

SELECT a,b,c,
grp_function(decode(pivot_exp,val1,value,null)),
grp_function(decode(pivot_exp,val2,value,null)),
grp_function(decode(pivot_exp,val3,value,null))
FROM xxxx
WHERE yyyy
GROUP BY zzzz

変換された文では、decode行はcase decode(pivot_exp,val1,value,null) is if pivot_exp is equal to val1 return value else return nullと同様です。

GROUP BYは、Oracle DatabaseではORDER BYを使用する必要がある場合があります。

Oracleでは列を定義する必要があるため、動的問合せの作成に必要なデータによって列の数が異なる場合、SQL Developerは必要な列を判断できません。列の型と数が事前にわからない場合は、REFカーソルを使用する必要があることがあります。