0

私の簡略化されたクエリは次のとおりです。

INSERT INTO table1
(acct_no, name, description)
SELECT a.acct_no,
 b.name,
 TO_LOB(c.description)
FROM tableA a, viewB b, tableC c
WHERE a.person_id = b.person_id(+)
AND a.person_id = c.person_id;

注: Oracle 10g を使用しています。table1.description は LOB 型、c.description は LONG 型、viewB はビュー、table1.name は b.name と同じデータ型です。

上記のクエリは次を返します。

SQL エラー: ORA-00932: 矛盾するデータ型: 予期された - LONG 00932 を取得しました。00000 - "矛盾したデータ型: 予期された %s が %s を取得しました"

エラーは、TO_LOB 関数を使用する行を指しています。

ただし、外部結合を削除すると、正常に機能します。つまり、次のように動作します。

INSERT INTO table1
(acct_no, name, description)
SELECT a.acct_no,
 b.name,
 TO_LOB(c.description)
FROM tableA a, viewB b, tableC c
WHERE a.person_id = b.person_id
AND a.person_id = c.person_id;

しかし、外部結合を使用する必要があり、viewB で外部結合を使用すると、別のテーブル (tableC) のフィールドでデータ型の不整合エラーが発生する理由がわかりません。

基本的に TO_LOB() 単体で(アウタージョインなし)動作し、アウタージョイン単体でも動作するのですが、両方をSQLに含めると意外なところでエラーになります。

何か案は ?

4

1 に答える 1

1

この問題は、次のリンクの下部で指摘されているように、Oracle のバグが原因である可能性があります

私の場合、ビューの使用を回避する回避策を採用し、代わりにテーブルを直接使用したところ、うまくいきました。

于 2012-06-21T10:20:18.833 に答える