SQL> DECLARE 2 v_key RAW(32); 3 BEGIN 4 v_key := UTL_RAW.cast_to_raw('251251'); 5 UPDATE TRANSACTION_DETAILS 6 SET Price = DBMS_CRYPTO.ENCRYPT( 7 src => UTL_RAW.cast_to_raw(TO_BINARY_FLOAT(Price)), 8 typ => DBMS_CRYPTO.DES_CBC_PKCS5, 9 key => v_key, 10 iv => NULL 11 ) 12 WHERE Price IS NOT NULL; 13 END; 14 / SET Price = DBMS_CRYPTO.ENCRYPT( * ERROR at line 6: ORA-06550: line 6, column 28: PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY ORA-06550: line 5, column 4: PL/SQL: SQL Statement ignored 怎么解决
时间: 2023-12-11 08:05:56 浏览: 67
oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac
这个错误是因为在 UPDATE 语句中,尝试将 BINARY 类型的值转换为 NUMBER 类型。可以使用 TO_NUMBER 函数将二进制值转换为数字,然后再进行加密。
下面是修改后的代码:
```
DECLARE
v_key RAW(32);
BEGIN
v_key := UTL_RAW.cast_to_raw('251251');
UPDATE TRANSACTION_DETAILS
SET Price = DBMS_CRYPTO.ENCRYPT(
src => UTL_RAW.cast_to_raw(TO_BINARY_FLOAT(TO_NUMBER(Price))),
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => v_key,
iv => NULL
)
WHERE Price IS NOT NULL;
END;
/
```
请注意,这个代码假定 Price 是一个可以转换为数字的值。如果 Price 不是数字类型的话,需要使用相应的 TO_xxx 函数进行转换。
阅读全文