pls-00306: wrong number or typ
时间: 2023-04-26 10:01:44 浏览: 66
e of parameters
这个错误提示意味着参数数量或类型错误。在使用PL/SQL过程或函数时,输入的参数数量或类型与定义的不匹配,导致出现错误。需要检查输入参数的数量和类型是否与定义的一致,以解决这个问题。
相关问题
ERROR at line 18: ORA-06550: line 18, column 3: PLS-00103: Encountered the symbol "L_SRC_DATA"啥意思
这个错误提示意味着第 18 行出现了语法错误,具体地说是第 18 行第 3 列出现了问题,PL/SQL 解释器在解释代码时遇到了 "L_SRC_DATA" 标识符。这个标识符在此处是未定义的,也就是说,在当前的上下文环境中,PL/SQL 解释器无法识别它。
根据你提供的代码,我猜测这个错误是因为你在第三个代码块中的 DECLARE 语句中,将变量名写错了。你将变量名写成了 `;_src_data`,而不是 `l_src_data`,导致 PL/SQL 解释器无法识别它。请将 `;_src_data` 修改为 `l_src_data`,即可解决这个问题。以下是修正后的代码:
```
grant execute on dbms_crypto to system;
-- 第一个代码块
declare
input_string VARCHAR2 (200) := 'Secret Message';
output_string VARCHAR2(2000);
encrypted_raw RAW(2000);
decrypted_raw RAW(2000);
num_key_bytes NUMBER := 256/8;
key_bytes_raw RAW(32);
encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
begin
DBMS_OUTPUT.PUT_LINE(input_string);
key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes);
encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw);
decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw);
output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
DBMS_OUTPUT.PUT_LINE(output_string);
end
SQL> DECLARE 2 l_key RAW(32) := UTL_RAW.cast_to_raw('251251'); 3 BEGIN 4 DBMS_OUTPUT.put_line('Key: ' || UTL_RAW.cast_to_varchar2(l_key)); 5 UPDATE PRODUCT SET Price = 6 DBMS_CRYPTO.encrypt( 7 src => UTL_RAW.cast_to_raw(TO_CHAR(Price)), 8 typ => DBMS_CRYPTO.TYPE_AES256, 9 key => l_key 10 ); 11 END; 12 / typ => DBMS_CRYPTO.TYPE_AES256, * ERROR at line 8: ORA-06550: line 8, column 24: PLS-00302: component 'TYPE_AES256' must be declared ORA-06550: line 8, column 12: PL/SQL: ORA-00904: "DBMS_CRYPTO"."TYPE_AES256": invalid identifier ORA-06550: line 5, column 3: PL/SQL: SQL Statement ignored 怎么解决
这个错误可能是因为您的数据库版本不支持 `DBMS_CRYPTO.TYPE_AES256`。请确保您的数据库版本支持此加密算法。
如果您的数据库版本支持此加密算法,则可能是因为您没有正确授权或安装了必要的包。您可以尝试在 SQL*Plus 中运行以下命令来检查您是否安装了 `DBMS_CRYPTO` 包:
```
SELECT * FROM USER_OBJECTS WHERE OBJECT_NAME = 'DBMS_CRYPTO';
```
如果返回的行数为 0,则可能是因为您没有正确授权。您可以尝试在 SQL*Plus 中运行以下命令来授权 `DBMS_CRYPTO` 包:
```
GRANT EXECUTE ON DBMS_CRYPTO TO <your_user>;
```
如果您仍然无法解决问题,请联系您的数据库管理员或 Oracle 支持团队以获取更多帮助。