oracle数据库创建游标,Oracle中加密解密的数据库函数,创建(包含游标)和使用存储过程...

1、加密函数  gen_encr:

create or replace function gen_encr(v_input varchar2) return raw

is

v_result raw(256);

c_key char(32) := '1q2wa3es4rz5tx6ycD*UF8tif9ogjen2';

begin

v_result := DBMS_CRYPTO.ENCRYPT(

UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'),

DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5,

UTL_I18N.STRING_TO_RAW(c_key, 'AL32UTF8'));

return v_result;

end;

2、解密函数 gen_decr:

create or replace function gen_decr(v_input raw) return varchar2

is

v_result raw(256);

c_key char(32) := '1q2wa3es4rz5tx6ycD*UF8tif9ogjen2';

begin

v_result := DBMS_CRYPTO.DECRYPT(

v_input,

DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5,

UTL_I18N.STRING_TO_RAW(c_key, 'AL32UTF8'));

return UTL_I18N.RAW_TO_CHAR(v_result, 'AL32UTF8');

end;

3、创建一个不带输入输出参数的且里面包含加密函数的存储过程 lpdev_encr:

CREATE OR REPLACE PROCEDURE lpdev_encr

AS

CURSOR group_buying

IS

SELECT gen_encr(name),

gen_encr(mobile),

gen_encr(email),

gen_encr(address),

id

FROM GROUP_BUYING_REG;

-- 截止到上面是定义了一个名叫group_buying的游标

pname GROUP_BUYING_REG.name%type ;

pmobile GROUP_BUYING_REG.mobile%type ;

pemail GROUP_BUYING_REG.email%type ;

paddress GROUP_BUYING_REG.address%type ;

pid GROUP_BUYING_REG.id%type ;

-- 上面这些定义了待会用来存储游标赋值的变量

BEGIN

OPEN group_buying;

LOOP

-- 开启游标把grouo_buing中的值赋给上面定义好的变量

FETCH group_buying

INTO pname,

pmobile,

pemail,

paddress,

pid;

UPDATE GROUP_BUYING_REG

-- set语句里面写的是变化的内容,把加密后的字段内容重新赋值给原来的字段

SET name =pname,

mobile =pmobile,

email =pemail,

address =paddress

WHERE id =pid;

EXIT

WHEN group_buying%notfound;

END LOOP;

CLOSE group_buying;

END;

4、创建一个不带输入输出参数的且里面包含解密函数的存储过程 lpdev_decr:

CREATE OR REPLACE PROCEDURE lpdev_decr

AS

CURSOR group_buying

IS

SELECT gen_decr(name),

gen_decr(mobile),

gen_decr(email),

gen_decr(address),

id

FROM GROUP_BUYING_REG;

-- 截止到上面是定义了一个名叫group_buying的游标

pname GROUP_BUYING_REG.name%type ;

pmobile GROUP_BUYING_REG.mobile%type ;

pemail GROUP_BUYING_REG.email%type ;

paddress GROUP_BUYING_REG.address%type ;

pid GROUP_BUYING_REG.id%type ;

-- 上面这些定义了待会用来存储游标赋值的变量

BEGIN

OPEN group_buying;

LOOP

-- 开启游标把grouo_buing中的值赋给上面定义好的变量

FETCH group_buying

INTO pname,

pmobile,

pemail,

paddress,

pid;

UPDATE GROUP_BUYING_REG

-- set语句里面写的是变化的内容,把解加密后的字段内容重新赋值给原来的字段

SET name =pname,

mobile =pmobile,

email =pemail,

address =paddress

WHERE id =pid;

EXIT

WHEN group_buying%notfound;

END LOOP;

CLOSE group_buying;

END;

5、调用不带输入输出参数的存储过程

EXECUTE lpdev_encr;

EXECUTE lpdev_decr;

6、一个带有输入输出参数的存储过程

PROCEDURE CHECK_STATUS(

P_RANDOM_ID IN VARCHAR2,

P_MOBILE_NO IN VARCHAR2,

RETURN_CODE OUT NUMBER )

IS

s_status VARCHAR2(20);

BEGIN

SELECT STATUS

INTO s_status

FROM MYTV_SUPER_OFFER

WHERE RANDOM_ID = P_RANDOM_ID

............

END CHECK_STATUS;

7、调用输入输出参数的存储过程

--先打开输入缓存

SET SERVEROUTPUT ON

DECLARE

id VARCHAR2(20);

phone VARCHAR2(20);

result NUMBER;

BEGIN

id :=18334189586908172016;

phone:=93373132;

MYTV_SUPER_PKG.CHECK_STATUS(id,phone,result);

DBMS_OUTPUT.PUT_LINE(result);

END;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值