玩转oracle笔记Word文件下载.docx

上传人:b****6 文档编号:16193197 上传时间:2022-11-21 格式:DOCX 页数:9 大小:19.71KB
下载 相关 举报
玩转oracle笔记Word文件下载.docx_第1页
第1页 / 共9页
玩转oracle笔记Word文件下载.docx_第2页
第2页 / 共9页
玩转oracle笔记Word文件下载.docx_第3页
第3页 / 共9页
玩转oracle笔记Word文件下载.docx_第4页
第4页 / 共9页
玩转oracle笔记Word文件下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

玩转oracle笔记Word文件下载.docx

《玩转oracle笔记Word文件下载.docx》由会员分享,可在线阅读,更多相关《玩转oracle笔记Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。

玩转oracle笔记Word文件下载.docx

alteruserteaaccountunlock;

定期更新密码(强制):

createprofilemyprofilelimitpassword_life_time

10password_grace_time2;

alteruserteaprofilemyprofile;

口令历史:

禁止使用以前使用过的密码.

createprofilepassword_historylimitpassword_life_time

10password_grace_time2password_reuse_time10;

删除profile:

dropprofilepassword_history[cascade];

表名和列名的命名规则:

必须以字母开头

长度不能超过30字符

不能使用Oracle保留字.

只能使用如下字符a-z,0-9,$,#等.

数据类型

字符型:

char,varchar2,clob

char的查询速度极快.

varchar最长为4000

数字型:

number

number(5,2):

一共五位,有两位小数

number(5):

五位整数

日期类型:

date,timestamp

图片类型:

blob,二进制数据,可以存放图片/声音4G.

altertablestudentadd(classidnumber

(2));

altertablestudentmodify(xmvarchar2(3));

altertablestudentmodify(xmchar(30));

altertablestudentdropcolumnsal;

renamestudenttostu;

droptablestudent;

修改日期格式:

altersessionsetnls_date_format='

yy-mm-dd'

;

删除数据

deletefromstudent;

deletefromstudentwherexx=xx

truncatetablestudent;

savepointa;

rollback;

/rollbacktoa;

=====================

查询

查看表结构:

descdept;

select*fromxx;

对速度影响很大.

所以在查询时最好写出列名.

settimingon;

begin

foriin1..100000loop

insertintousers(userid,username,password)

select*fromusers;

endloop;

end;

如何处理NULl值:

nvl(xx,xx)

使用LIKE操作符

%表示任意多个字符

_代表任意单个字符.

--------------

对数据分组的总结

1,分组函数只能出现在选择列表,having,orderby子句中.

2,顺序:

groupby,having,orderby.

多表查询

避免笛卡尔积

规定:

多表查询的条件至少不能少于表的个数-1

子查询

单行子查询,多行子查询.

数据库在执行sql是从左到右,所以将条件强的写到最右边.

selectenamefromempwherejobin(

selectdistinctjobfromemp

wheredeptno=10);

selectename,salfromempwheresal>

all(selectsalfromempwheredeptno=30);

的执行效率不如

下面的高:

selectename,salfromempwheresal>

(selectmax(sal)fromempwheredeptno=30);

在多行子查询中使用all,any

*子查询中返回多列

selectename,sal,jobfromemp

where(deptno,job)=

(selectdeptno,jobfromempwhereename='

SMITH'

selectename,sal,mysalfromempe,

(selectdeptno,avg(sal)mysalfromempgroupbydeptno)a

wheree.deptno=a.deptnoande.sal>

a.mysalorderbye.sal

子查询被看作一个视图来对待,也叫内嵌视图,因此必须给内嵌视图

起一个别名,不然是没法用的.并且起别名时,不能加as,为表起别名

不加as,列可以加as.

---------------------

分页查询

共有三种方式:

1,rownum分页

select*from(selecta1.*,rownumrnfrom(select*fromemp)a1

whererownum<

=10)wherern>

=6;

2,根据rowid来分

select*fromxxwhererowidin(

selectridfrom(selectrownumrn,ridfrom(

selectrowidrid,cidfromxxorderbyciddesc)

10000)wherern>

9980orderbyciddesc;

3,根据分析函数,效率最低

createtablemyemp(id,ename,sal)

asselectempno,ename,salfromemp

-------------------

Oracle合并查询

union并集,intersect交集,minus差集

updateempset(job,sal,comm)=(select

job,sal,commfromempwhereename='

whereename='

SCOTT'

=======================

Oracle事务

只读事务:

只允许执行查询的操作.只会取到特定点的数据信息.

settransactionreadonly;

设置之后,将不再看然新的事务产生的效果,比如说新插入的数据.

-----------

字符函数:

lower(char),upper(char),length(char),substr(char,m,n),

replace(char1,search_string,replace_string),instr(str,char);

selectlower(ename)fromemp;

selectupper(substr(ename,1,1))||lower(substr(ename,2,length(ename)))fromemp

selectsubstr(ename,1,3)fromemp;

selectreplace(ename,'

A'

'

我是老鼠'

)fromemp;

数学函数:

round(n,[m]),trunc(n,[m]),mod(m,n),floor(n),ceil(n);

日期函数

sysdate,add_months(hire_date,8);

select*fromempwheresysdate>

add_months(hiredate,8);

selectename,trunc(sysdate-hiredate)"

入职天数"

fromemp;

SELECTHIREDATE,ENAMEFROMEMPWHERELAST_DAY(HIREDATE)-2=HIREDATE

转换函数

TO_CHAR

SQL>

SELECTENAME,TO_CHAR(HIREDATE,'

YYYY/MM/DDhh24:

mi:

ss'

TO_CHAR(SAL,'

L99999.99'

)FROMEMP;

SELECTENAME,HIREDATEFROMEMPWHERETO_CHAR(HIREDATE,'

YYYY'

)=1988;

YYYY-MM'

)='

1988-12'

系统函数:

TERMINAL:

LANGUAGE:

DB_NAME:

NLS_DATE_FORMAT:

SESSION_USER:

SELECTSYS_CONTEXT('

USERENV'

LANGUAGE'

)FROMDUAL;

SESSION_USER'

PL/SQL编程

1,过程,函数,触发器是PL/SQL编写的.

2,它们存在Oracle中

3,pl/sql非常强大

4,可以在Java中调用.

学习必要性

1,提高应用程序运行性能.

传统操作数据库的方法是基于网络连接,接收SQL语句,编译再执行

2,模块化的设计思想(分页过程)

3,减少网络传输量

4,提高安全性.

缺点

移植性不好.

如何查看错误信息:

SHOWERROR;

如何调用该过程:

1,EXEC过程名(参数..)

2,CALL过程名(参数..)

createorreplaceprocedurepr01is

insertintomytestvalues('

xxxx'

);

----------------------------

pl/sql基础

分类:

过程(存储过程),函数,触发器,包

编写规范

常量:

c_xx

变量:

v_xx

游标:

xxx_cursor

例外:

e_error

1createorreplaceprocedurepr03(namevarchar2,new_sal

number)is

2begin

3updateempsetsal=new_salwhereename=name;

4*end;

========================

在Java中调用存储过程

//调用存储过程

cs=conn.prepareCall("

{callpr03(?

?

)}"

cs.setString(1,"

SMITH"

cs.setInt(2,100);

cs.execute();

PL/SQL控制结构

条件分支

if-thenendif

if--then--else-endif

CREATEORREPLACEPROCEDUREPR06(NONUMBER)IS

--定义部分

V_JOBEMP.JOB%TYPE;

BEGIN

SELECTJOBINTOV_JOBFROMEMPWHEREEMPNO=NO;

IFV_JOB='

PRESIDENT'

THEN

UPDATEEMPSETSAL=SAL+1000WHEREEMPNO=NO;

ELSIFV_JOB='

MANAGER'

UPDATEEMPSETSAL=SAL+500WHEREEMPNO=NO;

ELSE

UPDATEEMPSETSAL=SAL+200WHEREEMPNO=NO;

ENDIF;

END;

-------------------------

CREATEORREPLACEPROCEDUREPR6(NAMEVARCHAR2)IS

V_NUMNUMBER:

=1;

LOOP

INSERTINTOUSERS1VALUES(V_NUM,NAME);

EXITWHENV_NUM=10;

V_NUM:

=V_NUM+1;

ENDLOOP;

------------------------------

分页

CREATEORREPLACEPROCEDUREPR7

(BOOK_IDINNUMBER,BOOK_NAMEINVARCHAR2,PUBLISHINVARCHAR2)IS

INSERTINTOBOOKVALUES(BOOK_ID,BOOK_NAME,PUBLISH);

CREATEORREPLACEPROCEDUREPR8

(SPNOINNUMBER,SPNAMEOUTVARCHAR2)IS

SELECTENAMEINTOSPNAMEFROMEMPWHEREEMPNO=SPNO;

-------------

建包

CREATEORREPLACEPACKAGETESTPACKAGEAS

TYPETEST_CURSORISREFCURSOR;

ENDTESTPACKAGE;

建过程

CREATEORREPLACEPROCEDUREPR9

(SPNOINNUMBER,P_CURSOROUTTESTPACKAGE.TEST_CURSOR)IS

OPENP_CURSORFORSELECT*FROMEMPWHEREDEPTNO=SPNO;

JAVA代码

{callpr9(?

cs.setInt(1,10);

cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);

rs=(ResultSet)cs.getObject

(2);

while(rs.next()){

System.out.println(rs.getInt

(1)+"

"

+rs.getString

(2));

}

====================================

分页完整过程

--包

--CREATEORREPLACEPACKAGE

CREATEORREPLACEPROCEDUREPAGER

(TABLENAMEINVARCHAR2,

PAGESIZEINNUMBER,

PAGENOWINNUMBER,

MYROWSOUTNUMBER,--总记录数

MYPAGECOUNTOUTNUMBER,--总页数

P_CURSOROUTTESTPACKAGE.TEST_CURSOR--返回一个记录集

)IS

--定义部分

--定义SQL语句

V_SQLVARCHAR2(1000);

V_BEGINNUMBER:

=(PAGENOW-1)*PAGESIZE+1;

V_ENDNUMBER:

=PAGENOW*PAGESIZE;

V_SQL:

='

SELECT*FROM(SELECTT1.*,ROWNUMRNFROM(SELECT*FROM'

||TABLENAME||'

)T1WHEREROWNUM<

='

||V_END||'

)WHERERN>

||V_BEGIN;

OPENP_CURSORFORV_SQL;

SELECTCOUNT(*)FROM'

||TABLENAME;

EXECUTEIMMEDIATEV_SQLINTOMYROWS;

IFMOD(MYROWS,PAGESIZE)=0THEN

MYPAGECOUNT:

=MYROWS/PAGESIZE;

ELSE

ENDIF;

CLOSEP_CURSOR;

/

------------------

COREJAVACODE...

{callpager(?

EMP"

cs.setInt(2,5);

cs.setInt(3,1);

cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);

cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);

cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);

cs.execute();

introwNum=cs.getInt(4);

intpageCount=cs.getInt(5);

rs=(ResultSet)cs.getObject(6);

System.out.println("

总记录条数为:

"

+rowNum);

总页数为:

+pageCount);

System.out.println(rs.getString

(1)+"

====================

异常处理

DECLARE

V_ENAMEEMP.ENAME%TYPE;

SELECTENAMEINTOV_ENAMEFROMEMPWHEREEMPNO=&

GNO;

DBMS_OUTPUT.PUT_LINE('

名字:

'

||V_ENAME);

EXCEPTION

WHENOTHERSTHEN

DBMS_OUTPUT.PUT_LINE('

EXCEPTIONACCURED!

'

常见预定义例外

CASE_NOT_FOUND,CURSOR_ALREADY_OPEN,DUL_VAL_ON_INDEX,INVALID_CURSOR

INVALID_NUMBER,NO_DATA_FOUND,TO_MANY_ROWS,ZERO_DIVIDE,VALUE_ERROR.

其它预定义例外

LOGON_DENIED,NOT_LOGGED_ON,STORAGE_ERROR,TIMEOUT_ON_RESOURCE.

自定义例外

CREATEORREPLACEPROCUDUREEX_TEST(NONUMBER)IS

MYEXEXCEPTION;

UPDATEEMPSETSAL:

=SAL+1000WHEREEMPNO=NO;

IFSQL%NOTFOUNDTHEN

--%NOTFOUND表示没有UPDATE

--RAISEMYEX;

触发MYEX这个例外

RAISEMYEX;

EXCEPTIN

WHENMYEXTHEN

DBMS_OUTPUT.PUT_LINE("

没有更新任何用户"

ORACLE视图

视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称

的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据

来自由定义视图的查询所引用的表,并且在引用视图时动态生成.

视图与表的区别:

视图不要空间,表要

视图不能添加索引

提高安全性.

创建视图:

CREATE[ORREPLACE]VIEWXXASSELECTXXX[WITHREADONLY];

DROPVIEWXX;

20:

592009-9-19

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1