4/3 PL/SQL: SQL Statement ignored 4/42 PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY SQL> CREATE OR REPLACE PROCEDURE ENCRYPT_PRICE AS 2 C_KEY VARCHAR2(32) := 'MY_SECRET_KEY_FOR_AES256'; 3 BEGIN 4 UPDATE PRODUCT SET PRICE = DBMS_CRYPTO.ENCRYPT( 5 UTL_I18N.STRING_TO_RAW(CAST(PRICE AS RAW), 'AL32UTF8'), 6 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, 7 UTL_I18N.STRING_TO_RAW(C_KEY, 'AL32UTF8'), 8 NULL 9 ) WHERE PRICE IS NOT NULL; 10 END; 11 / Warning: Procedure created with compilation errors. SQL> show errors; Errors for PROCEDURE ENCRYPT_PRICE: LINE/COL ERROR -------- ----------------------------------------------------------------- 4/3 PL/SQL: SQL Statement ignored 5/45 PL/SQL: ORA-00906: missing left parenthesis
时间: 2023-08-15 10:13:47 浏览: 62
根据错误信息,可以看出问题出在 `UPDATE` 语句中的 `DBMS_CRYPTO.ENCRYPT` 函数上,因为缺少左括号。这可能是因为 `DBMS_CRYPTO.ENCRYPT_AES256`、`DBMS_CRYPTO.CHAIN_CBC` 和 `DBMS_CRYPTO.PAD_PKCS5` 这三个常量之间应该使用竖线 `|` 进行位运算符的 OR 运算,而不是加号 `+`。
修改后的代码如下:
```
CREATE OR REPLACE PROCEDURE ENCRYPT_PRICE AS
C_KEY VARCHAR2(32) := 'MY_SECRET_KEY_FOR_AES256';
BEGIN
UPDATE PRODUCT SET PRICE = DBMS_CRYPTO.ENCRYPT(
UTL_I18N.STRING_TO_RAW(CAST(PRICE AS RAW), 'AL32UTF8'),
DBMS_CRYPTO.ENCRYPT_AES256 | DBMS_CRYPTO.CHAIN_CBC | DBMS_CRYPTO.PAD_PKCS5,
UTL_I18N.STRING_TO_RAW(C_KEY, 'AL32UTF8'),
NULL
) WHERE PRICE IS NOT NULL;
END;
/
相关问题
UPDATE TRANSACTION_DETAILS SET Price = DBMS_CRYPTO.ENCRYPT( * ERROR at line 4: ORA-06550: line 4, column 55: PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY ORA-06550: line 4, column 4: PL/SQL: SQL Statement ignored怎么解决
这个错误通常是因为在对二进制数据进行加密时,加密后的结果数据类型与表中原来的数据类型不一致所导致的。可以尝试将加密后的结果转换为原来数据类型的格式,例如:
```
UPDATE TRANSACTION_DETAILS SET Price = CAST(DBMS_CRYPTO.ENCRYPT(TO_NUMBER(Price), 2, utl_raw.cast_to_raw('secret_key')) AS BLOB);
```
这里的 `TO_NUMBER` 函数将原来的二进制数据转换为数字类型,然后再将加密后的结果转换为 `BLOB` 类型,与原来的数据类型一致。`secret_key` 是加密时使用的密钥,需要根据实际情况进行修改。
PL/SQL: SQL Statement ignored
这个错误提示通常是在使用PL/SQL语言时遇到的,表示PL/SQL解释器无法识别或处理SQL语句。这可能是因为语法有误、语句缺失、拼写错误等问题导致的。
要解决这个问题,可以考虑以下步骤:
1. 仔细检查SQL语句的语法和拼写,确保其正确无误。
2. 确保SQL语句所需的表、字段、视图等已经存在,并且有权限访问它们。
3. 检查PL/SQL代码中是否存在其他语法或逻辑错误,如缺少分号、未定义变量等。
4. 可以尝试将SQL语句单独提取出来,使用SQL客户端工具进行测试,以确定是否能够正确执行。
如果以上步骤无法解决问题,可以尝试在PL/SQL代码中加入调试语句或日志,以更深入地了解代码的执行过程和出现错误的原因。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)