の代わりに使用するために、この例から変更された次のソース コードがあります。NUMBERS
VARCHAR2
CREATE OR REPLACE PACKAGE gen_encr
AS
FUNCTION encrypt (p_PlainText NUMBER) RETURN RAW DETERMINISTIC;
FUNCTION decrypt (p_Encrypted RAW) RETURN NUMBER DETERMINISTIC;
END;
/
CREATE OR REPLACE PACKAGE BODY gen_encr
AS
EncryptionType PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
EncryptionKey RAW (32) := UTL_RAW.cast_to_raw('ThisTextIsMyEncryptionKeyForThisPackage');
FUNCTION encrypt (p_PlainText NUMBER) RETURN RAW DETERMINISTIC
IS
encrypted_raw RAW (1024);
BEGIN
encrypted_raw := DBMS_CRYPTO.ENCRYPT
( src => UTL_RAW.CAST_FROM_NUMBER (p_PlainText),
typ => EncryptionType,
key => EncryptionKey
);
RETURN encrypted_raw;
END encrypt;
FUNCTION decrypt (p_Encrypted RAW) RETURN NUMBER DETERMINISTIC
IS
decrypt_raw RAW (1024);
BEGIN
decrypt_raw := DBMS_CRYPTO.DECRYPT
( src => p_Encrypted,
typ => EncryptionType,
key => EncryptionKey
);
RETURN (UTL_RAW.CAST_TO_NUMBER (decrypt_raw));
END decrypt;
END;
/
ただし、ステートメントSELECT sys.gen_encr.encrypt(sal) FROM emp
を実行すると、次のエラーが発生します。
ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06512: at "SYS.GEN_ENCR", line 13
一部の Google 検索では、RAW データ型が 2000 バイトしか受け入れられないことがエラーの可能性があることが示唆されました。
ただし、この場合、エラーが発生する理由がわかりません。どんな助けでも大歓迎です。