LINE/COL ERROR --------- ------------------------------------------------------------- 7/1 PLS-00103: 出现符号 "SET"
时间: 2023-10-05 18:07:20 浏览: 141
LINE/COL ERROR --------- ------------------------------------------------------------- 7/1 PLS-00103: 出现符号 "SET"。这个错误通常是由于在PL/SQL代码中使用了不正确或不被支持的语法,例如在错误的位置使用了"SET"关键字。要解决这个错误,您可以检查代码中的语法错误,并确保使用了正确的关键字和语法结构。
相关问题
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(TO_CHAR(PRICE), 'AL32UTF8'), 6 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, 7 UTL_I18N.STRING_TO_RAW(C_KEY, 'AL32UTF8'), 8 DBMS_CRYPTO.CHAIN_IV 9 ) WHERE PRICE IS NOT NULL; 10 END; 11 / Warning: Procedure created with compilation errors. SQL> SQL> SHOW ERRORS; Errors for PROCEDURE ENCRYPT_PRICE: LINE/COL ERROR -------- ----------------------------------------------------------------- 4/3 PL/SQL: SQL Statement ignored 8/5 PL/SQL: ORA-00904: "DBMS_CRYPTO"."CHAIN_IV": invalid identifier 8/17 PLS-00302: component 'CHAIN_IV' must be declared
根据错误信息,可以看出问题出在 `DBMS_CRYPTO.CHAIN_IV` 上,因为该标识符无效。实际上,DBMS_CRYPTO 包中没有 `CHAIN_IV` 这个组件,所以需要将其替换为 `NULL`。
修改后的代码如下:
```
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(TO_CHAR(PRICE), '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;
/
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(UTL_I18N.STRING_TO_RAW(TO_CHAR(PRICE), 'AL32UTF8'), 5 DBMS_CRYPTO.AES256_CBC, 6 UTL_I18N.STRING_TO_RAW(C_KEY, 'AL32UTF8'), 7 DBMS_CRYPTO.CHAIN_IV) WHERE PRICE IS NOT NULL; 8 END; 9 / Warning: Procedure created with compilation errors. SQL> SHOW ERRORS; Errors for PROCEDURE ENCRYPT_PRICE: LINE/COL -------------------------------------------------------------------------------- ERROR -------------------------------------------------------------------------------- 4/3 PL/SQL: SQL Statement ignored 4/30 PL/SQL: ORA-00904: "DBMS_CRYPTO"."ENCRYPT": invalid identifier
根据你提供的错误信息,问题在于 DBMS_CRYPTO.ENCRYPT 函数被识别为无效标识符。这可能是因为你的数据库版本不支持 DBMS_CRYPTO 包中的加密函数。请确保你的 Oracle 数据库版本支持 DBMS_CRYPTO 包中的加密函数。
如果你的数据库版本支持 DBMS_CRYPTO 包中的加密函数,那么可能是该包没有被正确授权或安装。你可以尝试使用以下命令来检查 DBMS_CRYPTO 包是否存在:
```
SELECT * FROM all_objects WHERE object_name LIKE 'DBMS_CRYPTO';
```
如果该包不存在,请尝试使用以下命令来安装该包:
```
@?/rdbms/admin/dbmscrypto.sql
```
如果安装成功后仍然存在问题,请确保你的数据库用户具有执行该包中函数的权限。
阅读全文