如何用Python将CROB插入到Oracle中时调用DMSMyCuff.HASH?

How can this be done in one operation instead of two?

!/usr/local/bin/python3

import cx_Oracle

con = cx_Oracle.connect('scott/tiger@localhost:1512/ORCLPDB1', encoding="UTF-8")
cursor = con.cursor()
cursor.execute("CREATE TABLE t (id NUMBER, script CLOB, script_hash RAW(32))")

my_text = '$'2*10

statement = "INSERT INTO t (id, script) VALUES (:my_id, :my_clob)"
cursor.execute(statement, (1, my_text))

statement = """

UPDATE t 
   SET script_hash = DBMS_CRYPTO.HASH(script, 2) 
 WHERE id = :my_id"""

cursor.execute(statement, {'my_id': 1})

con.commit()
con.close()

This doesn't work:

statement = """
INSERT INTO t (id, script, script_hash)
VALUES (:my_id, :my_clob, DBMS_CRYPTO.HASH(:my_clob, 2))"""
cursor.execute(statement, (2, my_text, my_text))

cx_Oracle.DatabaseError: ORA-01465: invalid hex number

(Oracle 12.2 using Python and cx_Oracle 6.3)

阅读 1.9k
1 个回答

试试:

statement = """
INSERT INTO t(id, script, script_hash)
VALUES (:my_id, :my_clob, DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW(:my_clob), 2))"""

参考[Making a sha1-hash of a row in Oracle
](https://stackoverflow.com/que...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题