Oracle / Python转换为字符串 - > HEX(对于RAW柱) - > VARCHAR2

时间:2009-04-21 13:12:07

标签: python oracle

我有一个带有RAW列的表,用于保存加密字符串。

我有PL / SQL代码,用于从纯文本加密到此字段。

我希望创建一个包含加密代码的触发器。

我希望'误用'RAW字段将纯文本传递给触发器。 (我无法修改架构,例如为纯文本字段添加另一列)

插入数据的客户端是Python(cx_Oracle)。

我的问题是如何最好地从python字符串转换为HEX,然后返回到触发器中的VARCHAR2,以便加密代码可以不加修改地使用(加密代码需要VARCHAR2)。

以下是一个例子:

create table BOB (name_enc raw(16));

在python中。这是我最初的编码尝试,我怀疑我需要更便携的国际字符集。

name_enc = 'some text'.encode('hex')

触发器

create or replace trigger enc_bob before insert on BOB
for each row
DECLARE
    v_name varchar2(50);

BEGIN

    v_name := :new.name_enc;   <----  WHAT DO I NEED HERE TO CONVERT FROM HEX to VARCHAR?

    --
    -- encryption code that expects v_name to contain string 

END;

更新

使用Base64的建议对我有用

的Python:

name_enc = base64.b64encode('some text')

PL / SQL:

v_name := utl_raw.cast_to_varchar2(UTL_ENCODE.BASE64_DECODE(:new.name_enc));

1 个答案:

答案 0 :(得分:2)

你必须编码为十六进制吗?

我认为有一个包(utl_encode)可供PL / SQL解码Base64,你可以使用它吗?