管理信息化ORACLEOracle自学自学笔记_第1页
管理信息化ORACLEOracle自学自学笔记_第2页
管理信息化ORACLEOracle自学自学笔记_第3页
管理信息化ORACLEOracle自学自学笔记_第4页
管理信息化ORACLEOracle自学自学笔记_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学笔记OracleInstallationProducts、集成管理工具、配置和移植工具(管理员用得比较多)当启动sqlplus时会提示输入用户名和口令,所谓的sqlplus是Oracle的一个客户端。当然也可以安装特定的客户端软件实现。说实在的Oracle的这个客户端太难看了,并且要记好多好多的命令,所以专门有一类公司声卡的话,你启动一次它就叫一次。对我们来说sqlplus以超级管理员身份链接数据库的方法是再命令行下敲入命令:sqlplussys/口令assysdba。的用到一个学一个,没必要从头到尾的去学它。么叫第四代语言,因为我们知道第三代语言也得有ifelsefor等这些流程控制语句,也就是事务控制语句[transactioncontrolstatement]。语句肯定会考这条select语句不是别的。你跟别人交流的时候,别说我写过几条d而因详细的说到底是什么语句,比如insert语句、upda数据拿出来,展现出来。听起来似乎挺简单的,但你要从表里拿数据得首先知道有几张表,每张表里有些什么内容。第一步要做的就是熟悉一下实验用的数据,这些数据Oracle都给自带了,直接用就行了。以上简要的介绍了三张表,如果想更详细的了解里面的数据,教大家第一个select语句:各张表之间的关系,以及表内部各字段之间的关系,越熟悉越好。如果要算纯数据,可以采用dual这张表,它就一条记录,一个字段。你如果用其他表计算最后的结果都是空值。就可以正确显示了。关键字distinct是指选择不重复的记录,如果修饰多个字段时表示选择该多个字段的组合来。处理。模糊查询是这样的,比如找出名字里含有al的,有点像正则表达式。使用关键字like,可串。这几个函数都是对字符串进行操作的,传递进去的参数就是字段名。如selectchr(86)fromdual;将86代表的字符显示出来,与之对应的是将一个字符转为对应的ASCII码,叫ascii,如:selectascii(‘A’)fromdual;就是将A的码值显示出来。函数最好记住它。to_char是将字段内容显示为字符,可以对显如selectto_char(sal,'$99,999,999.9999')fromemp;就是以后面给定字符形式显示出来,进行格式控制。格式的。实际上对日期的格式控制是利用Java来实现的,到时会有一个关于日期处理的专题。组函数一个都不能忘,很重要。selectcount(distinctdeptno)fromemp;找出各个单独的部门一共有多少个,distinct可以修饰字段。当要将各个组中的记录分别取出然后再计算比如平均值等要采用groupby+字段。比如:不唯一匹配导致。select语句一定要非常熟悉,如果这都要查书的话对企业就没法交代了,哈哈!子查询因为再一个select语句里套了另外一个select语句。理解子查询的关键是把它当成一张表,可以对它做表连接最后就可以求出想要的结果来。单独的select语句相当简单,(=t.max_salandt.deptno=);这个语句的作用是求出每个的经理人。为同一张表起不同的别名然后当成两张表来用。链接的时候有一个简便的写法using(deptno)代替on(=)但不推荐使用,因它的限制条件很多,可能报出来的错误很难找并且看起来也不是很清楚。的拿出来Join前加上right即可;如果两边多余的都想拿出来Join前加上full叫全外连接。接<,这样表中的最大值就会连接不上,然后再从emp表中找出未连接上的最大值,如下:selectsalfromempwheresalnotin(select);。使得程序简洁了,但要注意最多只能两层嵌套,第一层可能有多个输出(分组时第二层一定只能有一个输出,接下来就不能再嵌套了,一个输入不能作为组函数的参数。join()));键入命令grantcreatetable,createviewtoscott;然后以scott登录就可以了。创建视图时,名。;用再取去比较了,但实际中不好说因为有可能Oracle在执行的时候做了优化,自动将数字现在已经讲完了select语句,接下来讲dml语句,常见的有三条,他们和select语句合称接下来简单介绍一下Oracle的逻辑结构。安装的时候创建了一个全局数据库,同时为这个\test进入该目录后执行del*.*删除所有,然后键入命令exp后提示输入用户名和口令,就个小区域填满了再统一拿到硬盘上来)一路回车就行,等着它导完就可以了;3.创建新用户相应权限grantcreateses里完成。insertinto+表名+values(各字段值在对这些数据进行操作时最好有一个备份,方法很简单rollback回退操作,createtable表名asselect*from+欲备份表名;insert语句还有一种插入方法,insertintodept2(deptno,loc)values(50,'beijing');只是插入部分字段的值,其他字段的值为null,还有一种方法是insertintodept2select*fromdept;将select子句选出的记录挨个插入前提是选出的记录与该表的记录格式相同。selectename,sal,rfrom););1.找出没选过“黎明”老师课程的所有学生姓名;‘liming’;nt(*)>=2);语句提交结束事务;当正常退出exit时提交结束事务,不正常退出时(如断电)自动回滚结束事务。库里。创建一张表存放学生数据如:createtablestu();sex取数字来表示更节省空间,入学时日期加个s避免和关键字冲突,可以为某些字段指定默认值当插入记录时没有对该字段赋新值就以该默认值,其他没有默认值为null。复,比如学生学号。E-mail做主键不好因为它可以为null,同时索引的时候数字比字符串constraintstu_id_pkprimarykey(id),主键也可以是多个字段组合。外键约束建立在一张表的两个字段上或者是两张表的两个字段上,是比较麻烦的一种约束。classnumber(2)referencesclass(id),参考class这张表的id字段,当然也可以加在表级上:constraintforeignkey(class)referencesclass(id),。注意在写外键约束的时候,stu束条件。还可以修改字段的数据类型,如果里面已经有数据修改的后果应不影响原来存的记录值。在Oracle里面看当前用户下有哪些表,哪些约束,哪些视图等等这些信息被单独地装在一张表里面,称作数据字典表。user_tables里面装的是当前用户共有多少张表,里面字段可总是背着个小本本的原因,你要背是不可能的。索引就相当于字典里的索引一样,它在Oracle里相当于一种新的数据库对象,建立索引的方法createindexidx_stu_emilonstu(email);也可以在字段组合上建立索引,以后在查询组合时效率就高,删除索引同删除表方法类似。忘了自己有哪些索引可以采用一点不要轻易建立索引,除非觉得访问量特别大时。少等等。我可以建立一个视图里面只包含我想要给他看的内容。序列是Oracle数据库独有的东西,它产生一个唯一、不间断的序列,作用是一般做主键。createtablearticle(titlevarchar2(1024),);如果要加入一篇文章,采用这种做法selectmax(id)fromarticle;然后知道了id往里插,但若有另外一个客户端在做数据插入同时也在执行完上面一条语句插入了一条记录就会导致数据不一致的现象。为此我们可以创建一个sequence,每次插的时候访问它的一个属性silverbullet所以有时要具体问题具体分析,该打破三范式的时候还是要敢于打破。除了冗余性外还有一些边缘性的要求,不是很重要,讲到的时候再说。第一范式的第一个要求-要有主键;第二个要求-列不可分,不能说姓名我还要分成姓和名。多对多关系的表应分割成三张表,如前一个面试题。个了解知道有这么回事。dbmsline('hi,pl_sql!');/相当于而put_line相当于println。/dbmsline('Error!');/异常捕获到。字,这样不易冲突如select、from等;第一个字符必须是字母;变量名最多包含30个种:binary_integer整数主要是计数而不是用来表示字段类型(用来for循环,数组下标,候一定要给一个初值,否则是null。v_countbinary_integer:=0;v_validboolean:=false;dbmsline('v_tempvalue:'||v_date);/行限制。行的时候用/**/。dbmsline(‘Test’);的方式如:();v_:='aaaa';v_:='bj';dbmsline(v_||''||v_);/v_:='aaaa';v_:='bj';dbmsline(v_||''||v_);/PL_SQL语句里的select语句只能返回一条记录,且select语句里面必须样做:executeimmediate'createtableT(nnnvarchar2(20)default''aaa'')';由于外面已经有单引号了所以里面的一个单引号得用两个代表一个。default是给一个默认值。PL_SQL里条件语句是形如if(条件)then…elsif(条件)then…else…endif;注意最后一个ibinary_integer:=0;dbmsline(i);i:=i+1;jbinary_integer:=1;dbmsline(j);j:=j+1;dbmsline(k);这类似于Java里的for循环,reverse表示逆序循环,1..10指定循环范围。大家看一下,本来错误处理也不是我们的重点。dbmsline('选定行数过多!');dbmsline('error');则我们写的都是跨数据库平台的程序。下面学习一下作为dba记录错误常用的一种方法:首先创建一张表叫errorlog记录错误信creattableerrorlog();rollback;insertintoerrorlogvalues(seq_errorlog_,v_errcode,v_errmsg,sysdate);mit;cursorcisclosec;印两次,而实际上最后是没找到的,结果明cursorcis不易出错,平时常用。这是带参数的游标使用方法。cursorcisif(v_<200)thenelsif(v_=5000)thenendif;可更新的游标,用得不多。is存储过程没有返回值,它就得借助于传出参数,isif(v_a>v_b)thenv_ret:=v_a;elsev_ret:=v_b;endif;调用时采取这种方式:p(v_a,v_b,v_ret,v_temp);dbmsline(v_ret);/注意即便是你这过程有错误同样会被创建,为了展现出错的地方可以敲入命令:createorreplacefunctionsal_taxisif(v_sal<2000)thenreturn0.1;elsif(v_sal<2750)thenreturn0.15;elsereturn0.2;endif;调用方法如:selectlower(ename),sal_tax(sal)fromemp;actionvarchar2(10),);createorreplacetriggertrigifinsertingtheninsertintoemp2_logvalues(USER,‘insert’,sysdate);elsifupdatingthenelsifdeletingtheninsertintoemp2_logvalues(USER,’delete’,sysdate);endif;新:createorreplacetriggertrigcreatetablearticle(isleafnumber(1),--0代表非叶子节点,1代表叶子节点);createorreplaceprocedurep(v_pid%type,v_levelbinary_integer)iscursorcisselect*fromarticlewherepid=v_pid;v_preStrvarchar2(1024):='';foriin1..v_levelloopv_preStr:=v_preStr||'****';forv_articleincloopif(v_=0)thenp(v_,);endif;2.学生表如下:删除除了自动编号不同,其他都相同的学生冗余信息号,姓名,课程编号,课程名称,分数)四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.答:selecta.*************************************************************************************selectyear,select*from(selectname,yearb1,lead(year)over()over(************************************************************************************说明:复制表(只复制结构,源表名:a新表名:b)SQL:insertintob(a,b,c)selectd,e,ffromb;tablewhere=a.title)bSQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONSQL:select*from日程安排wheredatediff('minute',f开始时间,getdate())>5说明:--说明:--说明:从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)SELECTa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')AStelyear,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'02',a.factration))ASFRI,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'06',a.factratioSUM(decode(TO_CHAR(a.telfeedate,'mm'),'07',a.factration))ASJUL,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'09',a.faFROM(SELECTa.userper,a.tel,a.standfee,b.telfeedate,b.factrationGROUPBYa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy说明:四表联查问题:SQL:select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....*******************************************************************************updatebsetb.value=(selecta.valuefromawherea.key=b***************************************************************************原表:5servlet80为了便于阅读,查询此表后的结果显式如下(及格分数为60):3xml40fail4jsp30fail---------------------------------------------------没有装ORACLE,没试过(sign(score-60),-1,'fail','pass')asmarkfromcourse------------------------------5servlet80SQL>selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asma3xml40fail4jsp30fail*******************************************************************************原表:使用pl/sql代码实现,但要求你组合后的长度不能超出oraclevarchar2长度的限制。createorreplacetypestrings_tableistableofvarchar2(20);/createorreplacefunctionmerge(pvinstrings_table)returnvarchar2islsvarchar2(4000);foriin1..loopls:=ls||pv(i);returnls;/insertintotvalues(1,'Joan');insertintotvalues(1,'Jack');insertintotvalues(1,'Tom');insertintotvalues(2,'Rose');insertintotvalues(2,'Jenny');selectt0.id,merge(cast(multiset(selectnamefromtwheret.id=t0.id)asstrings_table)from(selectdistinctidfromt)t0;droptypestrings_table;droptablet;3selectd.deptno,d.dname,rtrim(e.ename||','||5orderbye.ename)||','||7orderbye.ename)||','||9orderbye.ename)||','||11orderbye.ename)||','||also先createfunctionget_a2;isCol_a2:='';Col_a2=Col_a2||cur.a2;returnCol_a2;selectdistincta1,get_a2(a1)fromunite_a*******************************************************************************去年应聘一个职位未果,其间被考了一个看似简单的题,但我没有找到好的大案.题为:有两个表,t1,t2,Tablet1:Tablet2:-----------------------.......且用的方法不要增加数据库负担,如用临时表等.inserttable2values(convert(varchar(50),@i),'2001-10-1',100)inserttable2values(convert(varchar(50),@i),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论