Migrated issue, originally created by Anonymous
(original reporter: bmacauley) When attempting to insert a CLOB into an Oracle 11g database I get the following error...
sqlalchemy.exc.DatabaseError: (DatabaseError) ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column
'UPDATE "EQDB_QUOTEBOM2" SET quote_bom_cpq_xml=:quote_bom_cpq_xml WHERE "EQDB_QUOTEBOM2".id = :EQDB_QUOTEBOM2_id' {'EQDB_QUOTEBOM2_id': '19600052-e2d2-41ba-950b-0fbde8d07567', 'quote_bom_cpq_xml': 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KPHF1b3RlX2JvbV9jcHE+CiAgPG1lc3NhZ2VfaGVhZGVyPgogICAgPHNlbmRlcj5FUURCPC9zZW5kZXI+CiAgICA8cmVjZWl2ZXI+Q1BRPC9yZWNlaXZlcj4KICAgIDxtZXNzYWdlX2FjdGlvbj5jcmVhdGU8L21lc3NhZ2VfYWN0aW9uPgogICAgPG1lc3NhZ2VfaWQ+Yjc3MDU3MTMtYmI0MS00...
14k base64 CLOB
...jdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CiAgICAgIDwvbGluZV9pdGVtPgogICAgICA8bGluZV9pdGVtPgogICAgICAgIDxvcmRlcmNvZGU+OTUwLTAwMDQ3LTAxPC9vcmRlcmNvZGU+CiAgICAgICAgPHByb2R1Y3Q+Q1MyMDAwPC9wcm9kdWN0PgogICAgICAgIDxlbGVtZW50PjwvZWxlbWVudD4KICAgICAgICA8Z3JvdXBpbmc+PC9ncm91cGluZz4KICAgICAgICA8c3BlY19udW1iZXI+PC9zcGVjX251bWJlcj4KICAgICAgICA8Z2JhZGRxdHk+MTY8L2diYWRkcXR5PgogICAgICAgIDxjdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CiAgICAgIDwvbGluZV9pdGVtPgogICAgPC9saW5lX2l0ZW1zPgogIDwvZGV0YWlsPgo8L3F1b3RlX2JvbV9jcHE+Cg=='}
Environment:
Oracle 11g
Windows 7
Activestate Python 2.7.1
cx_oracle 5.1.1
sqlalchemy 0.7.5
When inserting LOB's in Oracle the CLOB bind parameter must be ordered last. The SqlAlchemy generated sql suggests that the bind parameter ordering is correct. On further investigation, using a trace file on the oracle driver, I can see that the bind parameters are actually sent in the wrong order
For some reason, this error does not appear in an earlier insert statement with another CLOB...
INSERT INTO "EQDB_QUOTEBOM2" (id, message_id, opportunity_id, quote_id, sender, username, date_received, date_uploaded, is_uploaded, quote_bom_name, quote_bom_xml, quote_bom_cpq_name, quote_bom_cpq_xml) VALUES (:id, :message_id, :opportunity_id, :quote_id, :sender, :username, :date_received, :date_uploaded, :is_uploaded, :quote_bom_name, :quote_bom_xml, :quote_bom_cpq_name, :quote_bom_cpq_xml)
2012-04-17 10:33:21,233 INFO sqlalchemy.engine.base.Engine {'username': '', 'quote_id': '', 'sender': '', 'quote_bom_name': 'quote_bom_test.xml', 'quote_bom_cpq_name': '', 'quote_bom_cpq_xml': '', 'message_id': '', 'quote_bom_xml': 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHF1b3RlX2JvbT4KCTxtZXNzYWdlX2hlYWRlcj4KCQk8c2VuZGVyPnF1b3RlYm9teGxzPC9zZW5kZXI+CgkJPHJlY2VpdmVyPkVRREI8L3JlY2VpdmVyPgoJCTxtZXNzYWdlX2FjdGlvbj5jcmVhdGU8L21lc3NhZ2VfYWN0aW9uPgoJCTxtZXNzYWdlX2lkPjkyQkMyRjNGOTdGQzQ1RDM5MDkwRjY1RUUxQTJENDQ4PC9tZXNzYWdlX2lkPgoJCTx0aW1lc3RhbXA+MjcwMzEyMTMzNjA5PC90aW1lc3RhbXA+Cgk8L21lc3NhZ2VfaGVhZGVyPgoJPGhlYWRlcj4KCQk8b3BwaWQ+T1AtMDAzMzY4OTwvb3BwaWQ...
14k CLOB
...29yZGVyY29kZT4KCQkJCTxncm91cGluZz48L2dyb3VwaW5nPgoJCQkJPHNwZWNfbnVtYmVyPjwvc3BlY19udW1iZXI+CgkJCQk8Z2JhZGRxdHk+NzwvZ2JhZGRxdHk+CgkJCQk8Y3VzdGFkZHF0eT4wPC9jdXN0YWRkcXR5PgoJCQk8L2xpbmVfaXRlbT4KCQkJPGxpbmVfaXRlbT4KCQkJCTxvcmRlcmNvZGU+OTUwLTAwMDQ3LTAxPC9vcmRlcmNvZGU+CgkJCQk8Z3JvdXBpbmc+PC9ncm91cGluZz4KCQkJCTxzcGVjX251bWJlcj48L3NwZWNfbnVtYmVyPgoJCQkJPGdiYWRkcXR5PjE2PC9nYmFkZHF0eT4KCQkJCTxjdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CgkJCTwvbGluZV9pdGVtPgoJCTwvbGluZV9pdGVtcz4KCTwvZGV0YWlsPgo8L3F1b3RlX2JvbT4K', 'is_uploaded': 0, 'date_received': datetime.datetime(2012, 4, 17, 9, 33, 18, 209000), 'id': '2a5b6e7c-f8b7-4e86-83d1-c282f0199e67', 'date_uploaded': None, 'opportunity_id': ''}
And the error does not appear if I use a lower level cx_oracle approach...
cursor.execute("""UPDATE EQDB_QUOTEBOM2
SET quote_bom_cpq_xml=:quote_bom_cpq_xml
WHERE EQDB_QUOTEBOM2.id=:EQDB_QUOTEBOM2_id""",
{'EQDB_QUOTEBOM2_id': str(oid), 'quote_bom_cpq_xml': base64_xml})
eqdb_conn.commit()
This error seems to occur when using the Hibernate ORM as well...
ORA-24816 and Hibernate
http://www.odi.ch/weblog/posting.php?posting=496
Is there a method of correctly ordering the bind parameters for LOB's when using SqlAlchemy?
Thanks,
Brian M
Attachments: cli_2420.zip | quote_bom_uploader_ng.log | database.py | quote_bom_uploader_ng.py
Migrated issue, originally created by Anonymous
(original reporter: bmacauley) When attempting to insert a CLOB into an Oracle 11g database I get the following error...
sqlalchemy.exc.DatabaseError: (DatabaseError) ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column
'UPDATE "EQDB_QUOTEBOM2" SET quote_bom_cpq_xml=:quote_bom_cpq_xml WHERE "EQDB_QUOTEBOM2".id = :EQDB_QUOTEBOM2_id' {'EQDB_QUOTEBOM2_id': '19600052-e2d2-41ba-950b-0fbde8d07567', 'quote_bom_cpq_xml': 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KPHF1b3RlX2JvbV9jcHE+CiAgPG1lc3NhZ2VfaGVhZGVyPgogICAgPHNlbmRlcj5FUURCPC9zZW5kZXI+CiAgICA8cmVjZWl2ZXI+Q1BRPC9yZWNlaXZlcj4KICAgIDxtZXNzYWdlX2FjdGlvbj5jcmVhdGU8L21lc3NhZ2VfYWN0aW9uPgogICAgPG1lc3NhZ2VfaWQ+Yjc3MDU3MTMtYmI0MS00...
14k base64 CLOB
...jdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CiAgICAgIDwvbGluZV9pdGVtPgogICAgICA8bGluZV9pdGVtPgogICAgICAgIDxvcmRlcmNvZGU+OTUwLTAwMDQ3LTAxPC9vcmRlcmNvZGU+CiAgICAgICAgPHByb2R1Y3Q+Q1MyMDAwPC9wcm9kdWN0PgogICAgICAgIDxlbGVtZW50PjwvZWxlbWVudD4KICAgICAgICA8Z3JvdXBpbmc+PC9ncm91cGluZz4KICAgICAgICA8c3BlY19udW1iZXI+PC9zcGVjX251bWJlcj4KICAgICAgICA8Z2JhZGRxdHk+MTY8L2diYWRkcXR5PgogICAgICAgIDxjdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CiAgICAgIDwvbGluZV9pdGVtPgogICAgPC9saW5lX2l0ZW1zPgogIDwvZGV0YWlsPgo8L3F1b3RlX2JvbV9jcHE+Cg=='}
Environment:
Oracle 11g
Windows 7
Activestate Python 2.7.1
cx_oracle 5.1.1
sqlalchemy 0.7.5
When inserting LOB's in Oracle the CLOB bind parameter must be ordered last. The SqlAlchemy generated sql suggests that the bind parameter ordering is correct. On further investigation, using a trace file on the oracle driver, I can see that the bind parameters are actually sent in the wrong order
For some reason, this error does not appear in an earlier insert statement with another CLOB...
INSERT INTO "EQDB_QUOTEBOM2" (id, message_id, opportunity_id, quote_id, sender, username, date_received, date_uploaded, is_uploaded, quote_bom_name, quote_bom_xml, quote_bom_cpq_name, quote_bom_cpq_xml) VALUES (:id, :message_id, :opportunity_id, :quote_id, :sender, :username, :date_received, :date_uploaded, :is_uploaded, :quote_bom_name, :quote_bom_xml, :quote_bom_cpq_name, :quote_bom_cpq_xml)
2012-04-17 10:33:21,233 INFO sqlalchemy.engine.base.Engine {'username': '', 'quote_id': '', 'sender': '', 'quote_bom_name': 'quote_bom_test.xml', 'quote_bom_cpq_name': '', 'quote_bom_cpq_xml': '', 'message_id': '', 'quote_bom_xml': 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHF1b3RlX2JvbT4KCTxtZXNzYWdlX2hlYWRlcj4KCQk8c2VuZGVyPnF1b3RlYm9teGxzPC9zZW5kZXI+CgkJPHJlY2VpdmVyPkVRREI8L3JlY2VpdmVyPgoJCTxtZXNzYWdlX2FjdGlvbj5jcmVhdGU8L21lc3NhZ2VfYWN0aW9uPgoJCTxtZXNzYWdlX2lkPjkyQkMyRjNGOTdGQzQ1RDM5MDkwRjY1RUUxQTJENDQ4PC9tZXNzYWdlX2lkPgoJCTx0aW1lc3RhbXA+MjcwMzEyMTMzNjA5PC90aW1lc3RhbXA+Cgk8L21lc3NhZ2VfaGVhZGVyPgoJPGhlYWRlcj4KCQk8b3BwaWQ+T1AtMDAzMzY4OTwvb3BwaWQ...
14k CLOB
...29yZGVyY29kZT4KCQkJCTxncm91cGluZz48L2dyb3VwaW5nPgoJCQkJPHNwZWNfbnVtYmVyPjwvc3BlY19udW1iZXI+CgkJCQk8Z2JhZGRxdHk+NzwvZ2JhZGRxdHk+CgkJCQk8Y3VzdGFkZHF0eT4wPC9jdXN0YWRkcXR5PgoJCQk8L2xpbmVfaXRlbT4KCQkJPGxpbmVfaXRlbT4KCQkJCTxvcmRlcmNvZGU+OTUwLTAwMDQ3LTAxPC9vcmRlcmNvZGU+CgkJCQk8Z3JvdXBpbmc+PC9ncm91cGluZz4KCQkJCTxzcGVjX251bWJlcj48L3NwZWNfbnVtYmVyPgoJCQkJPGdiYWRkcXR5PjE2PC9nYmFkZHF0eT4KCQkJCTxjdXN0YWRkcXR5PjA8L2N1c3RhZGRxdHk+CgkJCTwvbGluZV9pdGVtPgoJCTwvbGluZV9pdGVtcz4KCTwvZGV0YWlsPgo8L3F1b3RlX2JvbT4K', 'is_uploaded': 0, 'date_received': datetime.datetime(2012, 4, 17, 9, 33, 18, 209000), 'id': '2a5b6e7c-f8b7-4e86-83d1-c282f0199e67', 'date_uploaded': None, 'opportunity_id': ''}
And the error does not appear if I use a lower level cx_oracle approach...
cursor.execute("""UPDATE EQDB_QUOTEBOM2
SET quote_bom_cpq_xml=:quote_bom_cpq_xml
WHERE EQDB_QUOTEBOM2.id=:EQDB_QUOTEBOM2_id""",
{'EQDB_QUOTEBOM2_id': str(oid), 'quote_bom_cpq_xml': base64_xml})
eqdb_conn.commit()
This error seems to occur when using the Hibernate ORM as well...
ORA-24816 and Hibernate
http://www.odi.ch/weblog/posting.php?posting=496
Is there a method of correctly ordering the bind parameters for LOB's when using SqlAlchemy?
Thanks,
Brian M
Attachments: cli_2420.zip | quote_bom_uploader_ng.log | database.py | quote_bom_uploader_ng.py