SQL> -- 创建加密密钥 SQL> DECLARE 2 key_raw VARCHAR2(32) := 'mysecretkey1234567890123456789'; 3 key_blob BLOB; 4 BEGIN 5 key_blob := utl_raw.cast_to_raw(key_raw); 6 DBMS_CRYPTO.ENCRYPT_AES256(DBMS_CRYPTO.CBC_PKCS5, key_blob, NULL, key_blob); 7 INSERT INTO MY_KEYS (ID, KEY_BLOB) VALUES (1, key_blob); 8 END; 9 10 -- 加密 Price 字段 11 UPDATE PRODUCT 12 SET Price = DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW(Price, 'AL32UTF8'), 13 DBMS_CRYPTO.AES256_CBC, 14 MY_KEYS.KEY_BLOB, 15 UTL_RAW.CAST_TO_RAW('1234567890123456')); 16 17 -- 解密 Price 字段 18 SELECT DBMS_CRYPTO.DECRYPT(Price, 19 DBMS_CRYPTO.AES256_CBC, 20 MY_KEYS.KEY_BLOB, 21 UTL_RAW.CAST_TO_RAW('1234567890123456')) 22 FROM PRODUCT; 23 24 -- 加密 PhoneNumber 字段 25 UPDATE CUSTOMER 26 SET PhoneNumber = DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW(PhoneNumber, 'AL32UTF8'), 27 DBMS_CRYPTO.AES256_CBC, 28 MY_KEYS.KEY_BLOB, 29 UTL_RAW.CAST_TO_RAW('1234567890123456')); 30 31 -- 解密 PhoneNumber 字段 32 SELECT DBMS_CRYPTO.DECRYPT(PhoneNumber, 33 DBMS_CRYPTO.AES256_CBC, 34 MY_KEYS.KEY_BLOB, 35 UTL_RAW.CAST_TO_RAW('1234567890123456')) 36 FROM CUSTOMER; 37 / UPDATE PRODUCT * ERROR at line 11: ORA-06550: line 11, column 1: PLS-00103: Encountered the symbol "UPDATE"
时间: 2024-01-10 17:04:44 浏览: 123
Oracle_PL/SQL编程
这个错误可能是因为你在执行上面的 SQL 语句时没有先创建 MY_KEYS 表,导致 DBMS_CRYPTO.ENCRYPT_AES256 函数无法正常执行。你需要先创建 MY_KEYS 表并且确保它存在,然后再执行上面的加密和解密操作。以下是创建 MY_KEYS 表的示例代码:
```
CREATE TABLE MY_KEYS (
ID NUMBER PRIMARY KEY,
KEY_BLOB BLOB
);
```
另外,如果你在执行 SQL 语句时使用了客户端工具,例如 SQL*Plus 或 SQL Developer,那么你需要先使用 CONNECT 命令连接到数据库,并且使用正确的用户名和密码。如果你使用的是 SQL*Plus,可以执行以下命令:
```
CONNECT username/password@database
```
其中,username 是你的数据库用户名,password 是你的数据库密码,database 是你的数据库连接字符串。如果你没有设置密码,可以省略 /password 部分。
阅读全文