2016-06-24 3 views
0

私は一度もmysqlを使用しませんでしたが、私の最近の仕事の1つでは、MySQL DBに接続するDBリンクを使用してOracleにテーブルを作成する必要があります。MySQLのTEXTデータ型を持つテーブルがOracleにコピーされない

私がコピーするテーブルには、私は私がしようとした

Error report - SQL Error: ORA-00997: ugyldig bruk av datatypen LONG 
00997. 00000 - "illegal use of LONG datatype" 
*Cause:  
*Action: 

エラー、次の取得このコマンドに

create table test_table 
as 
select * from <MYSQL_TABLE>@DBLINK; 

を発射しようとするオラクルから

TEXTなどのデータ型を持つ列を持っていますテーブルの作成中にto_char()関数を使用する

create table test_table 
as 
select to_char(col_with_TEXT_datatype) from <MYSQL_TABLE>@DBLINK; 

それは、誰かがどのように私は、Oracleでこのテーブルを作成することができます教えてもらえます、次のエラーに

ORA-00932: inkonsekvente datatyper: forventet CHAR, fikk LONG 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 
*Cause:  
*Action: 

を与えます。

このアクティビティは1回限りのアクティビティではありません。このテーブルの作成は、手順による週単位のジョブスケジュールの一部になります。したがって、これはcreate table文だけを使って達成する必要があります。

ありがとうございます。

答えて

0

MySQL側では、Oracleが予測して処理するデータ型のみを含むビューを作成しようとします。次に、そのビューにコピー・クエリを指示してください!

利点は、データ型変換がMySQL側で行われることです。

など。あなたのテーブルは、このように作成されている場合:

CREATE TABLE `xy` (
    `id` int(11) DEFAULT NULL, 
    `t` varchar(100) DEFAULT NULL, 
    `d` long); 

このようなビューを作成:

create view xy_oracle_view as select id, t, cast(d as char(512)) from xy; 

をし、あなたの中にビューを参照する

create table test_table 
as 
select * from [email protected]; 

で文をコピーして見てください!キャストで使用するcharサイズが512より大きい場合は、とにかくvarcharではなくtext型の列が得られます。 (私のMySQL 5.7でテストされました)

+0

私は自分自身にアクセス権がないので、DBAにこれを行うように頼んだことがあります。 CAST(col AS CHAR(1024))を使用しています。しかし、それはまだTEXTとして現れています。何か不足していますか? –

+0

512文字を超えるサイズを使用すると、列の種類はvarcharではなくテキスト型になります。私はこれを私の答えで言及するのを忘れて、これを追加します。 – martinw