次のコードを使用して CLOB を挿入しようとしています。
cursor = connection.cursor()
cursor.setinputsizes(HERP = cx_Oracle.CLOB)
cursor.execute("INSERT INTO myTable (FOO, BAR) VALUES (:FOO, :BAR)", FOO=val1, BAR=val2)
cursor.execute("INSERT INTO myTable2 (HERP) VALUES (:HERP)", HERP=val3)
#len(HERP) 39097
スクリプトを WITHOUT なしで実行するcursor.setinputsizes(HERP = cx_Oracle.CLOB)
と、2 番目のクエリ WITHValueError: string data too large
で失敗し、スクリプトを実行するとcursor.setinputsizes(HERP = cx_Oracle.CLOB)
、最初のクエリで失敗しますDatabaseError: ORA-01036: illegal variable name/number
。挿入しようとしている CLOB にはコード スニペットが含まれています (つまり、セミコロン、コンマ、括弧がたくさんあります"string".decode("ascii")
) u'string'
。これらのいずれかに問題があるかどうかはわかりません。データベースのフィールドは現在 CLOB ですが、NCLOB で試してみましたが、動作は変わりませんでした。
また、フィールドをBLOBとして試してから、.encode("hex")
挿入した値で使用しましたが、これも同じ動作です。
HERP = cursor.var(cx_Oracle.CLOB)
代わりにcursor.setinputsizes(HERP = cx_Oracle.CLOB)
、同じ問題も試しました。
私はcx-oracle-usersリストで議論を進めてきましたが、まだうまくいきません。
この行を使用すれば機能するcursor.execute("INSERT INTO myTable2 (HERP) VALUES (:HERP)", HERP="".join(set(val3)).encode("hex"))
ので、データの内容に問題はないと思います (これは BLOB にあります)。
cx_Oracle
CLOB を Oracle データベースに挿入するにはどうすればよいですか?