2 Sybaseゲートウェイの機能と制限事項
ゲートウェイをインストールして構成したら、ゲートウェイを使用してSybaseデータにアクセスしたり、SybaseコマンドをアプリケーションからSybaseデータベースに渡したり、分散問合せを実行したり、データをコピーしたりすることができます。
トピック:
2.1 リモート挿入Rowsource
リモート挿入rowsource機能を使用すると、ローカルOracleデータをOracleデータベースおよびOracle Databaseゲートウェイで処理する必要があるリモート挿入が可能になります。 この機能を使用するには、OracleデータベースとOracle Databaseゲートウェイをバージョン12.2以降にする必要があります。
Oracle Databaseデザインでは、データベース・リンク・サイトで分散文を実行する必要があります。 しかし、特定の状況では、これらの問合せを実行するために必要なデータがあります。このデータは、元のOracle Databaseからフェッチする必要があります。 同種の接続では、リモートOracleデータベースは、そのようなデータのソースOracleデータベースをコールバックします。 しかし、異種の接続では、これは実行可能ではありません。これは、外部データストアが、問合せを発行したOracleインスタンスによってのみ提供できるコールバック関数またはデータを問合せする必要があることを意味するためです。 一般的に、これらの種類の文は、Oracle Databaseゲートウェイでサポートできるものではありません。
次のカテゴリのSQL文では、コールバックが発生します:
-
Oracleデータベース内の表を参照するサブ選択付きDML。
-
DELETE
、INSERT
、UPDATE
または"SELECT... FOR UPDATE...
"元のOracleデータベースで実行する必要があるSQL関数または文を含むSQL文。これらのSQL関数には、
USER
、USERENV
、およびSYSDATE
が含まれます。元のOracleデータベースからのデータの選択を伴います。 -
Oracleデータベース内の表を含むSQL文、およびリモート表の
LONG
またはLOB
列。
リモート挿入rowsource機能を使用して動作するリモートINSERT
の例を次に示します:
INSERT INTO gateway_table@gateway_link select * from local_table;
2.2 パススルー機能の使用
ゲートウェイは、DBMS_HS_PASSTHROUGH
パッケージを使用して、Sybaseコマンドまたは文をアプリケーションからSybaseデータベースに渡すことができます。
PL/SQLブロックでDBMS_HS_PASSTHROUGH
パッケージを使用して、次のようにSybaseデータベースに渡す文を指定します:
DECLARE
num_rows INTEGER;
BEGIN
num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@SYBS('command');
END;
/
commandには、次のいずれも使用できません。
-
BEGIN TRANSACTION
-
COMMIT
-
ROLLBACK
-
SAVE
-
SHUTDOWN
-
Sybaseツール・コマンド
DBMS_HS_PASSTHROUGH
パッケージでは、バインド値を渡すこと、およびSELECT
文を実行することがサポートされています。
ノート:
TRUNCATE
はパススルー文では使用できません。
関連項目:
DBMS_HS_PASSTHROUGH
パッケージの詳細については、「Oracle Database異機種間接続ユーザーズ・ガイド」の「Oracle Database PL/SQLパッケージと型リファレンス」および第3章、「Oracle Databaseゲートウェイの機能」を参照してください。
2.3 ストアド・プロシージャおよびストアド・ファンクションの実行
プロシージャ機能を使用すると、ゲートウェイはSybaseデータベースで定義されたストアド・プロシージャを実行できます。 ゲートウェイを再リンクするか、またはゲートウェイにプロシージャを定義する必要はありませんが、プロシージャのアクセス特権は、ゲートウェイによるアクセスを許可する必要があります。
Standard PL/SQL文は、ストアド・プロシージャの実行に使用されます。
ゲートウェイは、相互に排他的な3つのモードでストアド・プロシージャをサポートします:
-
ノーマル・モード:
IN
/OUT
引数のみにアクセスできます -
戻り値モード: すべてのストアド・プロシージャの戻り値を持つ
-
結果セット・モード: アウト値は最後の結果セットとして使用可能です
2.3.1 戻り値とストアド・プロシージャ
デフォルトでは、すべてのストアド・プロシージャおよび関数は、ユーザーに戻り値を返しません。 戻り値を有効にするには、初期化パラメータ・ファイルでHS_FDS_PROC_IS_FUNC
パラメータを設定します。
関連項目:
初期化パラメータ・ファイルとHS_FDS_PROC_IS_FUNC
パラメータの編集に関する情報は、「初期化パラメータ」を参照してください。
ノート:
HS_FDS_PROC_IS_FUNC
ゲートウェイ初期化パラメータを設定する場合は、既存のすべてのストアド・プロシージャのプロシージャexecute文の構文を変更する必要があります。
次の例では、従業員名JOHN SMYTHE
がSybaseのストアド・プロシージャREVISE_SALARY
に渡されます。 ストアド・プロシージャは、Sybaseデータベースから給与額を取得して、JOHN SMYTHE
の新しい年俸を計算します。 RESULT
で戻された改定給与は、Oracleデータベースの表のEMP
を更新するために使用されます:
DECLARE INPUT VARCHAR2(15); RESULT NUMBER(8,2); BEGIN INPUT := 'JOHN SMYTHE'; RESULT := REVISE_SALARY@SYBS(INPUT); UPDATE EMP SET SAL = RESULT WHERE ENAME =: INPUT; END; /
この手順では、Oracle以外のデータ型をPL/SQLデータ型に自動的に変換します。
2.3.2 結果セットとストアド・プロシージャ
Oracle Database Gateway for Sybaseは、結果セットを返すストアド・プロシージャをサポートしています。
デフォルトでは、すべてのストアド・プロシージャおよびファンクションからユーザーに結果セットが戻されることはありません。 結果セットを使用可能にするには、初期化パラメータ・ファイルでHS_FDS_RESULTSET_SUPPORT
パラメータを設定します。
関連項目:
初期化パラメータ・ファイルとHS_FDS_RESULTSET_SUPPORT
パラメータの編集に関する情報は、「初期化パラメータ」を参照してください。 Oracle以外のデータベースの結果セットに対するOracleサポートの詳細は、「Oracle Database異機種間接続ユーザーズ・ガイド」を参照してください。
ノート:
HS_FDS_RESULTSET_SUPPORT
ゲートウェイ初期化パラメータを設定する場合は、既存のすべてのストアド・プロシージャのプロシージャexecute文の構文を変更するか、エラーが発生する必要があります。
Oracle Database Gateway for Sybaseを使用して結果セットを含むストアド・プロシージャにアクセスすると、異機種間サービスの順次モードになります。
Oracle Database Gateway for Sybaseは、プロシージャの説明中に異機種間サービスに以下の情報を戻します:
-
リモート・ストアド・プロシージャのすべての入力引数
-
出力引数はなし
-
タイプがref cursorの1つの引数(ストアド・プロシージャから返される最初の結果セットに対応)
クライアント・プログラムは、仮想パッケージ関数dbms_hs_result_set.get_next_result_set
を使用して、後続の結果セットの参照カーソルを取得する必要があります。 最後に返された結果セットは、プロシージャからの出力引数です。
結果セットへのアクセスの制限は次のとおりです:
-
リモート・ストアド・プロシージャによって返される結果セットは、ワイヤー上に置かれた順序で取得する必要があります
-
ストアド・プロシージャの実行時に、以前に実行されたストアド・プロシージャによって返されたすべての結果セットは、データが完全に終了したかどうかに関係なく閉じられます
次の例では、Sybaseストアド・プロシージャが実行され、Sybaseからemp
およびdept
表の内容をフェッチします:
create procedure REFCURPROC (@arg1 varchar(255), @arg2 varchar(255) output) as select @arg2 = @arg1 select * from EMP select * from DEPT go
このストアド・プロシージャは、入力パラメータarg1を出力パラメータarg2に割り当て、参照カーソルrc1で問合せSELECT * FROM EMP
を開き、参照カーソルrc2
で問合せSELECT * FROM DEPT
を開きます。
ノート:
ストアド・プロシージャを作成する前に、チェーン・モードを設定する必要があります。 Sybaseで次のコマンドを発行: set chained on
2.3.2.1 順次モードで結果セットからフェッチするOCIプログラム
次の例は、結果セットから順次モードでフェッチするOCIプログラムを示しています:
OCIEnv *ENVH; OCISvcCtx *SVCH; OCIStmt *STMH; OCIError *ERRH; OCIBind *BNDH[3]; OraText arg1[20]; OraText arg2[255]; OCIResult *rset; OCIStmt *rstmt; ub2 rcode[3]; ub2 rlens[3]; sb2 inds[3]; OraText *stmt = (OraText *) "begin refcurproc@SYBS(:1,:2,:3); end;"; OraText *n_rs_stm = (OraText *) "begin :ret := DBMS_HS_RESULT_SET.GET_NEXT_RESULT_SET@SYBS; end;"; /* Prepare procedure call statement */ /* Handle Initialization code skipped */ OCIStmtPrepare(STMH, ERRH, stmt, strlen(stmt), OCI_NTV_SYNTAX, OCI_DEFAULT); /* Bind procedure arguments */ inds[0] = 0; strcpy((char *) arg1, "Hello World"); rlens[0] = strlen(arg1); OCIBindByPos(STMH, &BNDH[0], ERRH, 1, (dvoid *) arg1, 20, SQLT_CHR, (dvoid *) &(inds[0]), &(rlens[0]), &(rcode[0]), 0, (ub4 *) 0, OCI_DEFAULT); inds[1] = -1; OCIBindByPos(STMH, &BNDH[1], ERRH, 1, (dvoid *) arg2, 20, SQLT_CHR, (dvoid *) &(inds[1]), &(rlens[1]), &(rcode[1]), 0, (ub4 *) 0, OCI_DEFAULT); inds[2] = 0; rlens[2] = 0; OCIDescriptorAlloc(ENVH, (dvoid **) &rset, OCI_DTYPE_RSET, 0, (dvoid **) 0); OCIBindByPos(STMH, &BNDH[2], ERRH, 2, (dvoid *) rset, 0, SQLT_RSET, (dvoid *) &(inds[2]), &(rlens[2]), &(rcode[2]), 0, (ub4 *) 0, OCI_DEFAULT); /* Execute procedure */ OCIStmtExecute(SVCH, STMH, ERRH, 1, 0, (CONST OCISnapshot *) 0, (OCISnapshot *) 0, OCI_DEFAULT); /* Convert result set to statement handle */ OCIResultSetToStmt(rset, ERRH); rstmt = (OCIStmt *) rset; /* After this the user can fetch from rstmt */ /* Issue get_next_result_set call to get handle to next_result set */ /* Prepare Get next result set procedure call */ OCIStmtPrepare(STMH, ERRH, n_rs_stm, strlen(n_rs_stm), OCI_NTV_SYNTAX, OCI_DEFAULT); /* Bind return value */ OCIBindByPos(STMH, &BNDH[1], ERRH, 1, (dvoid *) rset, 0, SQLT_RSET, (dvoid *) &(inds[1]), &(rlens[1]), &(rcode[1]), 0, (ub4 *) 0, OCI_DEFAULT); /* Execute statement to get next result set*/ OCIStmtExecute(SVCH, STMH, ERRH, 1, 0, (CONST OCISnapshot *) 0, (OCISnapshot *) 0, OCI_DEFAULT); /* Convert next result set to statement handle */ OCIResultSetToStmt(rset, ERRH); rstmt = (OCIStmt *) rset; /* Now rstmt will point to the second result set returned by the remote stored procedure */ /* Repeat execution of get_next_result_set to get the output arguments */
2.3.2.2 順次モードで結果セットからフェッチするPL/SQLプログラム
表loc_emp
は、Sybaseのemp表とまったく同じローカル表であるとします。 同じ仮定がloc_dept
に適用されます。outargs
は、Sybaseのストアド・プロシージャのout引数に対応する列を持つ表です。
create or replace package rcpackage is type RCTYPE is ref cursor; end rcpackage; /
declare rc1 rcpackage.rctype; rec1 loc_emp%rowtype; rc2 rcpackage.rctype; rec2 loc_dept%rowtype; rc3 rcpackage.rctype; rec3 outargs%rowtype; out_arg varchar2(255); begin -- Execute procedure out_arg := null; refcurproc@SYBS('Hello World', out_arg, rc1); -- Fetch 20 rows from the remote emp table and insert them into loc_emp for i in 1 .. 20 loop fetch rc1 into rec1; insert into loc_emp (rec1.empno, rec1.ename, rec1.job, rec1.mgr, rec1.hiredate, rec1.sal, rec1.comm, rec1.deptno); end loop; -- Close ref cursor close rc1; -- Get the next result set returned by the stored procedure rc2 := dbms_hs_result_set.get_next_result_set@SYBS; -- Fetch 5 rows from the remote dept table and insert them into loc_dept for i in 1 .. 5 loop fetch rc2 into rec2; insert into loc_dept values (rec2.deptno, rec2.dname, rec2.loc); end loop; --Close ref cursor close rc2; -- Get the output arguments from the remote stored procedure -- Since we are in sequential mode, they will be returned in the -- form of a result set rc3 := dbms_hs_result_set.get_next_result_set@SYBS; -- Fetch them and insert them into the outarguments table fetch rc3 into rec3; insert into outargs (rec3.outarg, rec3.retval); -- Close ref cursor close rc3; end; /
2.4 CHARセマンティクス
この機能により、ゲートウェイはオプションでCHAR
セマンティクス・モードで実行できます。 Sybase CHAR
カラムを常にCHAR(n BYTE)
として記述するのではなく、CHAR(n CHAR)
およびVARCHAR(n CHAR)
として記述します。 この概念は、OracleデータベースのCHAR
セマンティクスに似ています。 このオプションをアクティブにするには、HS_NLS_LENGTH_SEMANTICS=CHAR
ゲートウェイ・パラメータを指定する必要があります。 詳細は「初期化パラメータ」を参照してください。
2.5 マルチバイト文字セット比率抑制
この機能は、オプションで、マルチバイト文字セットを含むSybaseデータベースからOracleデータベースへの比率拡張を抑制します。 デフォルトでは、Oracleゲートウェイは、データが切り捨てられたり、バッファ・サイズが不十分な状態にならないように、最悪の比率を想定しています。 ただし、Sybaseデータベースに関する特定の知識があり、展開が発生しないようにするには、HS_KEEP_REMOTE_COLUMN_SIZE
パラメータを指定して展開を抑制します。 詳細は「初期化パラメータ」を参照してください。
2.6 IPv6のサポート
Oracleデータベースとゲートウェイ間の完全なIPv6サポートに加えて、IPv6もこのゲートウェイとSybaseデータベース間でサポートされています。 詳細は、「初期化パラメータ」のHS_FDS_CONNECT_INFO
パラメータを参照してください。
2.7 ゲートウェイ・セッションIDLEタイムアウト
必要に応じて、ゲートウェイ・パラメータHS_IDLE_TIMEOUT
を使用して、長いアイドル・ゲートウェイ・セッションを自動的に終了することもできます。 具体的には、ゲートウェイ・セッションが指定された制限時間を超えてアイドル状態になると、保留中の更新がロールバックされてゲートウェイ・セッションが終了します。
2.8 Sybaseのデータベース互換性の問題
2.8.3 命名規則
ネーミング・ルールの問題には、次のものがあります:
2.8.3.1 オブジェクトのネーミングに関するルール
OracleとSybaseは異なるデータベース・オブジェクト命名規則を使用します。 たとえば、各オブジェクト名に許可される最大文字数は異なっていてもかまいません。 また、一重引用符と二重引用符、大/小文字の区別、および英数字の使用はすべて異なっていてもかまいません。
関連項目:
「Oracle Databaseリファレンス」とSybaseのマニュアルを参照してください。
2.8.3.2 大文字と小文字の区別
識別子を二重引用符で囲まない限り、Oracleデータベースのデフォルトは大文字になります。 たとえば、emp
というSybase表を参照するには、次のように二重引用符で名前を入力します:
SQL> SELECT * FROM "emp"@SYBS;
ただし、OracleアプリケーションからSCOTT
が所有するemp
というSybase表を参照するには、次のように入力します:
SQL> SELECT * FROM "Scott"."emp"@SYBS;
emp
というSybase表がSCOTT
(大文字の表所有者名)に所有されている場合は、次のように二重引用符で囲まずに所有者名を入力できます:
SQL> SELECT * FROM SCOTT."emp"@SYBS;
または
SQL> SELECT * FROM scott."emp"@SYBS;
すべてのSybaseオブジェクト名を二重引用符で囲み、Sybaseデータ・ディクショナリに表示されるオブジェクト名には大文字の大文字小文字を使用することをお薦めします。 この規則は、サポートされているOracleデータ・ディクショナリ表または「データ辞書」にリストされているビューを参照する場合には必要ありません。
これらの規則に従って既存のアプリケーションを変更できない場合は、Oracleでビューを作成し、Sybase名を正しい大文字とするようにします。 たとえば、既存のOracleアプリケーションのSybase表emp
を大文字の名前のみで参照するには、次のビューを定義します:
SQL> CREATE VIEW EMP (EMPNO, ENAME, SAL, HIREDATE) AS SELECT "empno", "ename", "sal", "hiredate" FROM "emp"@SYBS;
このビューでは、アプリケーションは次のような文を発行できます:
SQL> SELECT EMPNO, ENAME FROM EMP;
ビューの使用は、Sybaseデータ・ディクショナリで生成されたデータ・ディクショナリ情報を複製する回避策です。 Sybaseデータベースで対応する表のデータ定義が変更されるたびに、Oracleビュー定義を更新する必要があります。
2.8.4 データ型
データ型の問題には、次のものがあります:
2.8.4.1 バイナリ・リテラル表記法
Oracle SQLは、単一引用符で囲まれた16進数を使用して、データ型RAW
として定義された列に比較または挿入されるリテラル値を表します。
この表記法は、SybaseのVARBINARY
およびBINARY
データ型(0xの後に16進数を1つの引用符で囲む)と互換性のある構文に変換されません。
たとえば、次の文はサポートされていません。
SQL> INSERT INTO BINARY_TAB@SYBS VALUES ('0xff')
BINARY_TAB
には、データ型VARBINARY
またはBINARY
の列が含まれています。 VARBINARY
およびBINARY
データ型を挿入または更新する場合は、バインド変数を使用します。
2.8.4.2 データ型変換
Sybaseでは暗黙的な日付変換をサポートしていません。 そのような変換は明示的である必要があります。
たとえば、ゲートウェイは次のSELECT
文にエラーを発行します:
SELECT DATE_COL FROM TEST@SYBS WHERE DATE_COL = "1-JAN-2001";
暗黙的な変換に関する問題を回避するには、次のように明示的な変換を追加します:
SELECT DATE_COL FROM TEST@SYBS WHERE DATE_COL = TO_DATE("1-JAN-2001")
関連項目:
データ型に関する制限事項の詳細は、「データ型変換」を参照してください。
2.8.5 問合せ
2.8.5.1 行選択
Sybaseは、選択したすべての行の問合せ条件を評価してから、いずれかの行を戻します。 評価プロセスで1行以上の行に対してエラーが発生した場合、残りの行が条件を満たしていても行は返されません。
Oracleでは、問合せ条件行が評価され、評価が成功した場合は行が返されます。 行の評価が失敗するまで、行が戻されます。
2.8.5.2 空の文字列
Oracleでは、SQL文の空の文字列がnull値として処理されます。 Sybaseは空の文字列を空の文字列として処理します。
空の文字列を比較すると、ゲートウェイは文字通り空の文字列を変換せずにSybaseデータベースに渡します。 空の文字列がNULL値を表すことを意図していた場合、Sybaseはそのように文を処理しません。それは空の文字列を使用します。
次の例のように、空の文字列構文ではなく、SQL文でNULL
または IS NULL
を使用することで、この問題を回避できます:
SELECT * from "emp"@SYBS where "ename" IS NULL;
空の文字列の選択
VARCHAR
列の場合、ゲートウェイは空の文字列をOracleデータベースにNULL
の値として返します。
CHAR
列の場合、ゲートウェイは各文字を空白( '')として列のフル・サイズを戻します。
2.8.6 ロック中
Sybaseデータベースのロック・モデルは、Oracleモデルと大きく異なります。 ゲートウェイは基本的なSybaseの動作に依存するため、ゲートウェイを介してSybaseにアクセスするOracleアプリケーションは、次のような可能性があります:
-
読取りアクセスは書込みアクセスをブロックする可能性があります
-
書込みアクセスは読取りアクセスをブロックする可能性があります
-
文レベルの読取り一貫性は保証されません。
関連項目:
Sybaseのロック・モデルについては、Sybaseのマニュアルを参照してください。
2.8.7 Sybase識別子の長さ制限
デフォルトでは、ゲートウェイは常に識別子を引用します。 ただし、特定のSybaseリリースでは、表名や列名などの識別子に30文字の制限があり、この制限をチェックするときには引用符は名前の一部とみなされます。 したがって、引用符を使用する場合は、28文字しか指定できません。 これらのSybaseリリースの最大長制限をサポートするには、ゲートウェイ初期化パラメータ・ファイルでHS_FDS_QUOTE_IDENTIFIER=FALSE
を指定する必要があります。 この初期化パラメータを設定すると、ゲートウェイは識別子を引用符なしで送信します。 ただし、ドット(。)またはスペースを含む識別子の使用を排除するという副作用があり、識別子は使用されるSybaseデータベースの大文字小文字の区別に従います。
2.9 既知の制限事項
この項または「既知の問題点」で示されていない非互換性の問題が発生した場合は、Oracleサポート・サービスに連絡してください。 次の項では、既知の制限について説明し、可能な場合にそれらを処理するための提案を示します:
次の制限も適用されます:
-
SUBSTR
関数の第2パラメータとして負の数を使用すると、不正な結果が返されます。 これは、OracleのSUBSTR
関数とSybaseの同等の関数との間に互換性がないためです。ノート:
制限について不明点や懸念がある場合は、Oracle Support Servicesにお問い合せください。
2.9.1 トランザクション整合性
次の場合、ゲートウェイはトランザクションの整合性を保証できません:
-
ゲートウェイによって処理される文によって、ターゲット・データベースで暗黙的にコミットされる場合
-
ターゲット・データベースが自動コミット・モードで動作するように構成されている場合
ノート:
Oracleは、次のことを強く推奨します:
-
特定の文を実行するとターゲット・データベースで暗黙的にコミットされることがわかっている場合は、その文が独自のトランザクションで実行されるようにしてください。
-
自動コミット・モードで動作するようにターゲット・データベースを構成しないでください。
-
2.9.3 PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
PL/SQLカーソル・ループで発行されたCOMMIT
またはROLLBACK
は、開いているすべてのカーソルを閉じます。これにより、次のエラーが発生する可能性があります:
ORA-1002: fetch out of sequence
このエラーを回避するには、COMMIT
またはROLLBACK
文をカーソル・ループの外に移動します。
2.9.4 ストアド・プロシージャ
コミットまたはロールバックを組み込んだストアド・プロシージャによって発行された変更は、Oracleトランザクション・マネージャまたはOracle COMMIT
またはROLLBACK
コマンドで制御することはできません。
Oracle Database Gateway for Sybaseを使用して結果セットを含むストアド・プロシージャにアクセスする場合は、異機種間サービスの順次モードで作業する必要があります。
Oracle Database Gateway for Sybaseを使用して複数の結果セットを持つストアド・プロシージャにアクセスする場合は、続行する前にすべての結果セットを読み込む必要があります。
ストアド・プロシージャの出力パラメータは、NULL
値に初期化する必要があります。
Oracle Database Gateway for Sybaseは、パススルー問合せ内で出力パラメータまたは出力パラメータを含むストアド・プロシージャをサポートしていません。
2.9.5 パススルー機能
ゲートウェイパス・スルー機能を使用してSybaseによって実行されるDDL文は、複数文トランザクションの場合に失敗する可能性があります。 トランザクションでDDL文を使用できるようにするには、Sybaseオプション"ddl in tran"を設定します。
パススルー機能を使用して文を実行する場合は、DDL文を独自のトランザクションに配置することをお薦めします。 明示的なCOMMIT
は、DDL文の後に発行する必要があります。
ゲートウェイを通過するSQL文がSybaseデータベースで暗黙的なコミットになった場合、Oracleトランザクション・マネージャはコミットを認識せず、Oracle ROLLBACK
コマンドを使用してトランザクションをロールバックすることはできません。
2.9.7 SQL構文
SQL構文の制限事項は次のとおりです:
関連項目:
SQL構文に関する制限事項の詳細は、「サポート対象のSQL構文および関数」を参照してください。
2.9.7.4 INSERT文の副問合せ
INSERT
文の副問合せでは、同じ表に対して複数の別名を使用できません。 たとえば、次の文はサポートされていません。
SQL> INSERT INTO "emp_target"@SYBS SELECT a."empno" FROM "emp_source"@SYBS a, "emp_source"@SYBS b WHERE b."empno"=9999
2.9.8 小文字の表名を使用するSQL*PlusのCOPYコマンド
小文字の表名を二重引用符で囲む必要があります。
次に例を示します。
copy from tkhouser/tkhouser@inst1 insert loc_tkhodept using select * from "tkhodept"@holink2;
2.10 既知の問題点
この項では、既知の問題点について説明し、可能な場合は問題を修正するための提案を示します。 問題についての疑問は、Oracleサポート・サービスに問い合せてください。 現在の問題のリストは、オンライン上で入手できます。 リストへのアクセスの詳細は、ローカルのOracleオフィスに問い合せてください。
既知の問題は次のとおりです:
2.10.1 暗号化形式のログイン
Oracleデータベースでは、初期化パラメータDBLINK_ENCRYPT_LOGIN
はサポートされなくなりました。 バージョン7.3までは、このパラメータのデフォルトのTRUE値は、ログイン・ユーザーIDのパスワードがネットワーク上に(クリア・テキストで)送信されることを防ぎました。 それより後のバージョンでは、パスワードが自動的に暗号化されます。
2.10.2 日付計算
次のSQL式は、ゲートウェイでは正しく機能しません。
date + numbernumber + datedate - numberdate1 - date2
前述の式を含む文は、翻訳されずにSybaseデータベースに送信されます。 Sybaseはこれらの日付演算関数をサポートしていないため、文はエラーを返します。
2.10.3 Sybase IMAGEおよびTEXTデータ型
IMAGE
およびTEXT
データ型を使用する場合、次の制限が適用されます:
-
サポートされないSQL関数は、Sybaseデータ型
IMAGE
またはTEXT
として定義された列にアクセスするSQL文では使用できません。 -
データが80文字を超える場合、SQL*Plusを使用して、Sybaseデータ型
IMAGE
またはTEXT
として定義された列からデータを選択することはできません。 Pro * CまたはOracle Call Interfaceを使用して、Sybaseデータベース内のそのようなデータにアクセスすることをお薦めします。 -
IMAGE
およびTEXT
データは、パススルー問合せで読み取ることはできません。
ゲートウェイは、DBMS_SQL
パッケージのPL/SQL関数COLUMN_VALUE_LONG
をサポートしていません。
関連項目:
SQL構文に関する制限事項の詳細は、「サポート対象のSQL構文および関数」を参照してください。
2.10.5 スキーマ名とPL/SQL
PL/SQLブロック内のSQL文にSybaseデータベース・オブジェクトのスキーマ名をプレフィクスとして指定しないと、次のエラー・メッセージが表示されます:
ORA-6550 PLS-201 Identifier table_name must be declared.
オブジェクトのスキーマ名を含めるようにSQL文を変更します。