次のコードを使用して 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_OracleCLOB を Oracle データベースに挿入するにはどうすればよいですか?