ALTER TABLE ORDERS MODIFY TotalCost NUMBER(35,2); DECLARE i_key RAW(32); BEGIN i_key :=UTL_RAW.cast_to_raw('618272'); UPDATE ORDERS SET TotalCost = DBMS_CRYPTO.ENCRYPT( src=>UTL_RAW.CAST_TO_RAW(TO_CHAR(TotalCost)), typ=>DBMS_CRYPTO.AES_CBC_PKCS5, key=>i_key, iv=>NULL ) WHERE TotalCost IS NOT NULL; END; / 之后,怎么查询加密后的数据
时间: 2023-12-03 21:45:47 浏览: 85
alter table 2.zip_ALTER_Table_csharp_sql
查询加密后的数据需要进行解密操作,可以使用以下 SQL 语句:
```
DECLARE
i_key RAW(32);
v_totalcost_raw RAW(2000);
v_totalcost NUMBER(35,2);
BEGIN
i_key := UTL_RAW.cast_to_raw('618272');
SELECT TotalCost INTO v_totalcost_raw FROM ORDERS WHERE ...;
v_totalcost := TO_NUMBER(UTL_RAW.cast_to_varchar2(DBMS_CRYPTO.DECRYPT(
src => v_totalcost_raw,
typ => DBMS_CRYPTO.AES_CBC_PKCS5,
key => i_key,
iv => NULL)));
...
END;
/
```
在上面的代码中,我们首先声明了一个 `v_totalcost_raw` 变量用于存储加密后的数据。然后使用 SELECT 语句将加密后的数据查询出来,并将其赋值给 `v_totalcost_raw` 变量。接着使用 `DBMS_CRYPTO.DECRYPT` 函数进行解密操作,将解密后的结果转换为 NUMBER 类型,并将其赋值给 `v_totalcost` 变量。最后可以对解密后的数据进行进一步操作。
阅读全文