ORACLE数据库开发基础第十章其它(4)

2019-01-12 15:09

--------- --------- ------------------------------ ---------------- 1 1 ZHAOYUANJIE 2 1 ZHAOYUANJIE 3 1 ZHAOYUANJIE 4 1 ZHAOYUANJIE 5 1 ZHAOYUANJIE 6 1 ZHAOYUANJIE 7 833 8 833

11 370 SYS ZHAOYUANJIE 13 370 SCOTT ZHAOYUANJIE 10 rows selected.

SQL> alter system kill session '&sid,&ser'; Enter value for sid: 13 Enter value for ser: 370

old 1: alter system kill session '&sid,&ser' new 1: alter system kill session '13,370' System altered. real: 100 216

10.2.4 用TRANSLATE 对数据加密和解密

TRANSLATE 函数是一个变换函数,用它可以实现对存入表中数据进行加密和解密处理。函 数语法如下:

REPLACE (‘string’ [,’string_in’,’string_out’])

String:希望被替换的字符串或变量。 String_in: 被替换字符串。 String_out: 要替换字符串。 例1: PL/SQL

Var1:= REPLACE (‘Oracle’, ‘Or’, ‘Mir’,); SQL

SELECT REPLACE (‘Oracle’, ‘Or’, ‘Mir’) “Example “ FROM DUAL; Example ------- Miracle

下面给出较复杂的例子,例1 是一个加密的存储过程,例2 是用该过程进行加密的过程;例 3 是密的过程,例4 是使用解密的过程: 例 1:加密过程可以写成如下:

CREATE OR REPLACE FUNCTION ENCRYPT(INPASS IN VARCHAR2) RETURN VARCHAR2 AS STRING_IN VARCHAR(78); STRING_OUT VARCHAR2(39); OFFSET NUMBER(2); OUTPASS VARCHAR2(30); BEGIN

OFFSET := TO_NUMBER(TO_CHAR(SYSDATE,’SS’))MOD 39; STRING_IN := ‘YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_’; STRING_OUT :=’_$#ABCDEFGHIJKMNOPQRSTUVWXYZ0123456789’;

OUTPASS := SUBSTR(STRING_IN,OFFSET,1); STRING_IN := STRING_IN||STRING_IN; STRING_IN := SUBSTR(STRING_IN,OFFSET,39);

OUTPASS := OUTPASS||TRANSATE(UPPER(INPASS),STRING_IN,STRING_OUT); RETURN OUTPASS; END;

例 2:编写下面过程以调用ENCRYPT 来加密: DECLARE 217

X VARCHAR2(40); BEGIN

X := ENCRYPT(‘HELLO’);

DBMS_OUTPUT.PUT_LINE(‘Encrypted:’|| X ); END;

SQL>set serveroutput on SQL>/

Encrypted:#2PVV9

例 3:编写一个针对例1 的加密函数程序:

CREATE OR REPLACE FUNCTION DECRYPT(OUTPASS IN VARCHAR2) RETURN VARCHAR2 AS STRING-IN VARCHAR2(780; STRING_OUT VARCHAR2(39); OFFSET NUMBER(2); INPASS VARCHAR2(30);

BEGIN

STRING_IN :=‘YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_’; STRING_OUT :=’_$#ABCDEFGHIJKMNOPQRSTUVWXYZ0123456789’; OFFSET := INSTR(STRING_IN,SUBSTR(OUTPASS,1,1)); STRING_IN := STRING_IN||STRING_IN; STRING-IN := SUBSTR(STRING_IN,OFFSET,39);

INPASS := TRANSLATE(UPPER(SUBSTR(OUTPASS,2)),STRING_OUT,STRING_IN); RETURN INPASS; END;

例 4:编写一个调用解密的简单过程: DECLARE X VARCHAR2(30); BEGIN

X := DECRYPT(‘#2PVV9’); DBMS_OUTPUT.PUT_LINE(X); END;

10.2.5 如何用查询来修改数据

有时需要用另外表的数据或本表的数据来修改某些记录。这样的应用在实际中经常使用。 以下例子具有代表性: 例 1:更新一个字段的情况:

UPDATE DEPT SET DEPT_NAME=(SELECT DEPART_NAME FROM DEPART 218

WHERE DEPART.DEPTNO = DEPT.DEPTNO ); 例 2:更新多个字段的情况:

UPDATE CHP8A

SET (DEPT_NAME,MGR_ID)=(SELECT DEPART_NAME,MANAGER_ID FROM CHP8B WHERE CHP8B.DEPART_NUMBER=CHP8A.DEPT_NO AND ROWNUM=1)

WHERE EXIST(SELECT ‘X’ FROM CHP8B where CHP8B.depart_number=CHP8a.dept_no); 10.2.6 如何产生创建用户的脚本

有时,我们需要在新的环境创建用户,这些用户来自一个已经存在的应用环境中。比如希望重 新创建用户的命令如何来产生。下面的例子从数据字典中查询数据自动完成创建用户、创建 角色、授权角色给用户操作。

accept uname prompt '输入希望的用户名: ' spool c:\\gen_user

SELECT username, 'CREATE USER '||username||' '|| DECODE(password, 'EXTERNAL', 'IDENTIFIED EXTERNALLY', 'IDENTIFIED BY '''||password||''' ') lne, 'DEFAULT TABLESPACE '||default_tablespacelne,

'TEMPORARY TABLESPACE '||temporary_tablespace||';' lne FROM DBA_USERS

WHERE USERNAME LIKE UPPER('%&&uname%') OR UPPER('&&uname') IS NULL ORDER BY USERNAME;

SELECT username, 'ALTER USER '||username||' QUOTA '||

DECODE(MAX_BYTES, -1, 'UNLIMITED', TO_CHAR(ROUND(MAX_BYTES/1024))||'K') ||' ON TABLESPACE '||tablespace_name||';' lne


ORACLE数据库开发基础第十章其它(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高预应力文件

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: