首页 尚学堂oracle笔记

尚学堂oracle笔记

举报
开通vip

尚学堂oracle笔记尚学堂Oracle视频笔记全是我自己做的笔记,供大家一起分享和探讨:第一课:客户端1.Dos命令行下:sqlplus用户名:scott密码:tiger,sqlplusscott/tiger2.开始-运行-sqlplus图形版的SQLPLUS3.http://localhost:5560/isqlplusToad:管理PlsqlDeveloper第二课:更改用户1.sqlplussys/bjsxtassysdba2.alteruserscottaccountunlock;(解锁)第三课:table_structure...

尚学堂oracle笔记
尚学堂Oracle视频笔记全是我自己做的笔记,供大家一起分享和探讨:第一课:客户端1.Dos命令行下:sqlplus用户名:scott密码:tiger,sqlplusscott/tiger2.开始-运行-sqlplus图形版的SQLPLUS3.http://localhost:5560/isqlplusToad:管理PlsqlDeveloper第二课:更改用户1.sqlplussys/bjsxtassysdba2.alteruserscottaccountunlock;(解锁)第三课:table_structures1.desc 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 名//描述表2.select*from表名//查看表数据第四课:select语句1.selectename,sal*12annual_salfromemp;//annual_sal为sal*12的名称selectenamesal*12"annualsal"fromemp;双引号可以保持原大小写,并且中间可以加空格,不加全变为大写2.descdual,select2*3fromdual,dual是系统自带的一张空表,计算数据时可以使用该表3.任何含有空值的算术表达式的计算结果是空值4.selectename||salfromemp;5.selectename||'abcdefg'fromemp;6.selectename||'abcd''efg'fromemp;当字符串中含有单引号时,可用两个单引号代表一个单引号7.setlinesize200;--用于设定每行显示的宽度8.setpagesize30;--设置显示的页数9.selectsysdatefromdual;//显示系统时间第五课:distinct1.selectdistinctdeptnofromemp;//把deptno值重复的不显示出来2.selectdistinctdeptno,jobfromemp;//把deptno,job都重复的都不显示出来;第六课:where1.select*fromempwhereempno=10;2.select*fromempwhereempno<>10;//<>是不等于3.select*fromempwhereename='hebe';//字符串要加单引号;比较的按字母顺序4.select*fromempwheresal(not)between800and1500;//包含800和15005.select*fromempwherecommis(not)null;//为空值的表项查询6.select*fromempwhereename(not)in('smith','philip','jay');//显示值为'smith','philip','jay'的项7.select*fromempwherehiredate>'20-2月1820';//20-2月1820后的时间8.select*fromempwhereenamelike'_A%';//"-"为一个字符,"?"为0个或1个,"%"为0个或多个,""9.select*fromempwhereenamelike'_\%a%';系统默认转义符是\,可以自己指定转义符select*fromempwhereenamelike'_$%a%'escape'$';第七课:orderby1.select*fromdept;2.select*fromdeptorderbydeptdesc;(默认为asc)//desc为降序排列,asc为升序3.selectename,sal,deptnofromempwheresal>2000orderbydeptnoasc,enamedesc;第八课:sql_function1.selectename,sal*12annual_salfromempwhereenamenotlike'_A%'andsal>1500orderbysaldesc;2.selectlower(ename)fromemp;//把ename转换为小写值3.selectenamefromempwherelower(ename)like'_a%';//把ename的值第二个字母为A或a输出4.selectsubstr(ename,2,3)fromemp;从第二字符截,一共截三个字符。5.selectchr(65)fromdual;结果为A6.selectascii('a')fromdual;结果为657.selectround(35.572)fromdual;结果为368.selectround(35.572,2)fromdual;结果为35.579.selectround(35.572,-1)fromdual;结果为4010.selectto_char(sal,'$99,999.9999')fromemp;to_char 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数主要用于对日期和数字格式化$16,000.000010.selectto_char(sal,'$0000,000.0000')fromemp;//结果$0016,000.000011.selectto_char(sal,'L99,999.9999')fromemp;人民币符号,L代表本地符号。12.selectbirthdatefromemp;显示为:BIRTHDATE---------------------22-3月-87改为:selectto_char(birthdate,'YYYY-MM-DDHH24:MI:SS')fromemp;//24制的没有24为12制的13.to_data函数selectename,birthdatefromempwherebirthdate>to_date('1987-3-2211:22:33','YYYY-MM-DDHH24:MI:SS');不能直接写birthdate>'1987-2-2211:22:33'会出现格式不匹配,因为表中格式为DD-MM月-YY,14.selectsalfromempwheresal>to_number('$12,444.99','$99,999.99');15.selectename,sal*12+nvl(comm,0)from这样防止comm为空时,sal*12相加也为空的情况第九课:Groupfunction组函数1.selectmax(sal)fromemp;2.selectmin(sal)fromemp;3.selectto_char(avg(sal),'$999,999,999.99')fromemp;4.selectround(sum(sal),2)fromemp;5.selectcount(*)fromempwheresal>1500;6.selectcount(comm)fromemp;7.selectcount(distinctdeptno)fromemp;第十课:Groupby语句1.selectavg(sal)fromempgroupbydeptno;2.selectdeptno,avg(sal)fromempgroupbydeptno;3.selectdeptno,job,max(sal)fromempgroupbydeptno,job;4.求薪水值最高的人的名称selectename,max(sal)fromemp;出错,因为max只能有一个值,但是等于max的值可能有好几个,不能匹配。selectename,max(sal)fromempbyename就可以可以写成selectenamefromempwheresal=(selectmax(sal)fromemp);Groupby语句应注意,出现在select中的字段,如果没有出现在组函数中,必须出现在Groupby语句中。第十一课:Having对分组结果筛选1.where是对单条 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 进行筛选,Having是对分组结果进行筛选selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)>2000;2.查询工资大于2000的雇员,按照部门编号进行分组,分组后平均薪水大于1500,按工资倒序排列selectdeptno,avg(sal)fromempwheresal>2000groupbydeptnohavingavg(sal)>1500orderbyavg(sal)desc; ///////select-where-groupby-having-orderby////////第十二课:子查询1.select语句中嵌套select语句,求哪些人工资在平均工资之上.selectename,salfromempwheresal>(selectavg(sal)fromemp);2.查找每个部门挣钱最多的那个人的名字.selectename,deptnofromempwheresalin(selectmax(sal)fromempgroupbydeptno)查询会多值.正确写法是:应把selectmax(sal),deptnofromempgroupbydeptno当成一个表,语句如下:selectename,salfromempjoin(selectmax(sal)max_sal,deptnofromempgroupbydeptno)ton(emp.sal=t.max_salandemp.deptno=t.deptno);第十三课:self_table_connectionselecte1.ename,e2.enamefromempe1,empe2wheree1.mgr=e2.empno;第十四课:SQL1999_table_connection1.selectename,dname,gradefromempe,deptd,sqlgradeswheree.deptno=d.deptnoande.salbetweens.losalands.hisalandjob<>'CLERK';这种写法没有把过滤条件和连接条件分开来,由于这个原因,sql1999标准推出来了.2.selectename,dnamefromemp,dept;(旧标准)selectename,dnamefromempcrossjoindept;(1999标准)3.selectename,dnamefromemp,deptwhereemp.deptno=dept.deptno;(旧)selectename,dnamefromempjoindepton(emp.deptno=dept.deptno)4.selectename,gradefromempejoinsalgradeson(s.salbetweens.losaland`s.hisal);5.selectename,dname,gradefromempejoindeptdon(e.deptno=d.deptno)joinsalgradeson(e.salbetweens.losalands.hisal)whereenamenotlike'_A%';6.selecte1.ename,e2.enamefromempe1joinempe2on(e1.mgr=e2.deptno);7.selecte1.ename,e2.enamefromempe1left(outer)joinempe2on(e1.mgr=e2.empno);8.selectename,dnamefromemperightouterjoindeptdon(e.deptno=d.deptno);9.selectename,dnamefromempefulljoindeptdon(e.deptno=d.deptno);第十六至二十三课:求部门平均薪水等级1.A.求部门平均薪水的等级selectdeptno,avg_sal,gradefrom(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)tjoinsalgradeson(t.avg_salbetweens.losalands.hisal)2.求部门平均的薪水等级selectdeptno,avg(grade)from(selectdeptno,ename,gradefromempejoinsalgradeson(emp.salbetweens.losalands.hisal))tgroupbydeptno;3.哪些人是经理selectename2from(selecte1.ename,e1.mgrmgr1,e2.enameename2fromempe1joinempe2on(e1.mgr=e2.empno))tjoinempon(t.mgr1=emp.empno)selectenamefromempwhereempnoin(selectdistinctmgrfromemp)4.不准用组函数,求薪水的最高值selectdistinctsalfromempwheresalnotin(selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal))5.求平均薪水最高的部门编号selectdeptno,avg_salfrom(selectdeptno,avg(sal)avg_salfromdeptgroupbydeptno)whereavg_sal=(selectmax(avg_sal)from(selectdeptno,avg(sal)avg_salfromdeptgroupbydeptno))selectdeptno,avg_salfrom(selectdeptno,avg(sal)avg_salfromdeptgroupbydeptno)whereavg_sal=(selectmax(avg(sal))fromdeptgroupbydeptno)6.求平均薪水最高的部门名称selectdnamefromdeptwheredeptno=(selectdeptnofrom(selectdeptno,avg(sal)avg_salfromdeptgroupbydeptno)whereavg_sal=(selectmax(avg_sal)from(selectdeptno,avg(sal)avg_salfromdeptgroupbydeptno)))7.求平均薪水等级最低的部门的部门名称错误写法:selectmin(avg_grade),deptnofrom(selectdeptno,avg(grade)avg_grade(selectename,deptno,gradefromempejoinsalgradeson(e.salbetweens.losalands.hisal))groupbydeptno)groupbydeptno正确写法:selectdname,t1.deptno,grade,avg_salfrom(selectdeptno,avg_sal,gradefrom(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)tjoinsalgradeson(t.avg_salbetweens.losalands.hisal))t1joindepton(t1.deptno=dept.deptno)wheret1.grade=(selectmin(grade)from(selectdeptno,avg_sal,gradefrom(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)tjoinsalgradeson(t.avg_salbetweens.losalands.hisal)))8.视图:view就是一张虚表,一个子查询connsys/change_on_installassysdba;grantcreatetable,createviewtoscott;connscott/tiger;创建视图createviewv$_dept_avg_sal_infoasselectdeptno,avg_sal,gradefrom(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)tjoinsalgradeson(t.avg_salbetweens.losalands.hisal)使用视图后可以简写selectdname,t1.deptno,grade,avg_sal_infofromv$_dept_avg_salt1joindepton(t1.deptno=dept.deptno)wheret1.grade=(selectmin(grade)fromv$_dept_avg_sal_info)9.求比普通员工最高薪水还要高的经理人的名称先求普通员工的最高薪水selectmax(sal)fromempwhereempnonotin(selectdistinctmgrfromempwheremgrisnotnull);selectenamefromempwhereempnoin(selectdistinctmgrfromempwheremgrisnotnull)andsal>(selectmax(sal)fromempwhereempnonotin(selectdistinctmgrfromempwheremgrisnotnull);)第二十四课备份与恢复--backupscott;exp;importthedate;DOS环境下:exp导出,imp导入--dropuseryugangcascade;//删除YUGANG用户--cd\--cdtemp=-delete*.*--exp--createuseryugangindentifiedbyyugangdefaulttablespaceusersquota10Monusers//创建用户--grantcreatesession,createtable,createviewtoyugang//分配权限--impthedata第一次输入的用户名密码为:yugang/yugang第二次输入的用户名密码为:导出数据的用户的用户名和密码 insertintodeptvalus(50,'fghfgh','gj');//插入数据--rollback//取消刚才的操作createtableemp2asselect*fromemp;//复制emp第二十五课:rownumrownum是在Oracle中在表的后面加的一个尾字段,并且只能使用诸如rownum<n或rownum<=n这样的形式,不能与>或>=相连接1.求薪水值最高的前5条记录.selectename,salfromemporderbysaldescwheresal<=5;2.求薪水值最高的第6~10条记录.selectename,salfrom(selectename,sal,rownumrfrom(selectename,salfromemporderbysaldesc))wherer>=6andr<=10;第二十六课:homework_dml_transactionSQL面试 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 有三张表S、C、SCS(SNO、SNAME)代表(学号、姓名)C(CNO、CNAME、CTEACHER)代表(课号、课名、老师)SC(SNO、CNO、SCGRADE)代表(学号、课号、成绩)1.求出没选过郭富城老师的所有学生姓名2.列出2门以上(含2门)不及格的学生姓名及平均成绩3.既学过1号课程又学过2号课程的所有学生姓名1.selectsnamefromsjoinscon(s.sno=sc.sno)joincon(c.cno=sc.cno)wherec.cteacher<>'郭富城';2.selectsnamefromswheresnoin(selectsnofromscwherescgrade<60groupbysnohavingcount(*)>=2)3.selectsnamefromswheresnoin(selectsnofromscwherecno=1andsnoin(selectdistinctsnofromscwherecno=2)) updateemp2setsal=sal*2,ename=ename||'-'wheredepton=10//修改数据 deletefromdept2wheredepton=10;事务transaction代表一组不可分割的操作,要么全部执行,要么全部不执行,transaction起始于一条DML语句,结束于commit;语句,或者是DCL、DDL语句,在事务未提交前可以通过rollback回滚事务,正常退出事务会自动提交,非正常退出事务会自动回滚。第二十七课:createtablecreatetablestudent(idnumber(6),namevarchar2(20),sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50));第二十八~三十课constraint//非空约束notnull,unique(当某字段有unique约束时,可以插入空值,空值之间不重复)、主键、外键、check约束createtablestudent(idnumber(6),namevarchar2(20)constraintstu_name_nnnotnull,(字段级约束)sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50)unique//unique唯一约束都为空可以)/行级约束(放在字段后面)与表级约束(加在表后面):createtablestudent(idnumber(6),namevarchar2(20)constraintstu_name_nnnotnull,sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50),constraintstu_email_name_uniunique(name,email)//name,email的组合唯一约束(表级约束))/主键约束createtablestudent(idnumber(6)primarykey,namevarchar2(20)constraintstu_name_nnnotnull,sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50),constraintstu_email_name_uniunique(name,email))/createtablestudent(idnumber(6),namevarchar2(20)constraintstu_name_nnnotnull,sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50),constraintstu_id_pkprimarykey(id),constraintstu_email_name_uniunique(name,email))/外键约束外键约束被参考的字段必须是主键。createtableclass(idnumber(4)primarykey,namevarchar2(20)notnull)/createtablestudent(idnumber(6),namevarchar2(20)constraintstu_name_nnnotnull,sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4)referencesclass(id),emailvarchar2(50),constraintstu_id_pkprimarykey(id),constraintstu_email_name_uniunique(name,email))/createtablestudent(idnumber(6),namevarchar2(20)constraintstu_name_nnnotnull,sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar2(50),constraintstu_id_pkprimarykey(id),constraintstu_class_fkforeignkey(class)referencesclass(id),constraintstu_email_name_uniunique(name,email))/第三十一课:altertabledroptable//修改表结构;altertablestudentadd(addrvarchar2(100));//添加结构altertablestudentdrop(addr);//删除结构altertablestudentmodify(addrvarchar2(50));//修改若addr字段中有的记录长度大于50,则修改不成功。altertablestudentdropconstraintstu_class_fk;//去掉约束条件altertablestudentaddconstraintstu_class_fkforeignkey(class)referencesclass(id);//添加约束条件droptableclass;第三十二课:Oracledictionariesdescuser_tables;selecttable_namefromuser_tables;selectview_namefromuser_views;selectconstraint_namefromuser_constraints;selectconstraint_name,table_namefromuser_constraints;descdictionary;第三十三课:indexes_and_views索引可以提高读数据的效率,但会降低修改、写数据的效率,索引还会占用一定的存储空间createindexidx_stu_emailonstudent(email);dropindexidx_stu_email;视图会带来一些维护的代价,比如表结构改了,那么视图也得跟着改变。视图还可以用来保护私有数据。selectindex_namefromuser_indexes;selectview_namefromuser_views;第三十四课:sequencesandreview序列可以自动增长,在sqlserver中有identity,mysql中有auto_incrementcreatetablearticle(idnumber,titlevarchar2(1024),contlong)/如何保证插入数据时id不重复?selectmax(id)fromarticle;这样做也不行,如果有多个线程同时访问数据,则可能会出现数据不一致的现象,比方说第一个用户查询出最大id值是100,第二个用户也查询出最大id是100,然后第二个用户新插入一条记录:id是101,然后第一个用户也插入了一条记录:id也是101可以用Oracle的sequencecreatesequenceseq_article_id;多个表之问可以共用一个序列,但是一般情况下为每个字段分别建立一个序列sequence有两个属性CurrVal、NextValselectseq.nextvaluefromdual;insertintoarticlevalues(seq.nextval,'y','yy');insertintoarticlevalues(seq.nextval,'x','xx');insertintoarticlevalues(seq.nextval,'z','zz');insertintoarticlevalues(seq.nextval,'q','qq');第三十五课:三范式第一范式:1.每个表都要有主键2.列不可分,比如:createtablestu(idnumber,namevarchar2(20),agenumber)/insertintostuvalues(1,'yu',21);createtablestu2(inflong)/insertintostu2values('1_yu_21');虽然表stu2可以字符串解析后可以达到和表stu一样的效果,但是显然第一种方法更好,查询数据更加方便,而表stu2违反了第一范式的列不可分原则。第二范式:当有两个以上字段作主键时,非主键字段不能部分依赖于主键字段,如有一个需求,一门老师教多名学生,一名学生可以选多个老师的课。然后 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 了一张表,有以下字段(老师编号、学生编号、老师姓名、学生姓名等),其中以老师编号和学生编号作联合主键,则些表就存在部分依赖,老师姓名部分依赖于老师编号,不满足第二范式,有数据冗余。要解决这个问题可以设计三张表。第三范式:不能存在传递依赖,如有一张表有以下字段:(学号、姓名、班级号、班级名称、班级位置),其中学号为主键,则班级号依赖于学号,每个学生都有相应的班级号,但是班级名称、班级位置是依赖于班级号,即它们通过班级号传递依赖于学号,不满足第三范式。第三十八课:PL_SQLsetserveroutputon;begindbms_output.put_line('HelloWorld!!');end;declarev_namevarchar2(20);beginv_name:='xiaoyu';dbms_output.put_line(v_name);end;declarev_numnumber:=0;beginv_num:=2/v_num;dbms_output.put_line(v_num);exceptionwhenothersthendbms_output.put_line('error');end;--变量声明的规则1.变量名不能使用保留字2.第一个字符必须是字母3.变量名最多包含30个字母4.不要与数据库或表名同名5.每一行只能声明一个变量/*这是多行注释*/--常用变量类型1.binary_integer:整数,主要用来计数而不是用来表示字段类型2.number数字类型3.char定长字符串4.date日期5.long长字符串,最长2GG6.boolean类型:可以取值true、false、null,默认为null,另外boolean类型值不可直接打印--变量声明declarev_tempnumber(1);v_countbinary_integer:=0;v_salnumber(7,2):=8888.88;v_datedate:=sysdate;v_piconstantnumber(3,2):=3.14;v_validboolean:=false;v_namevarchar2(20)notnull:='geniusxiaoyu';begindbms_output.put_line('v_tempvalue:'||v_temp);end;--变量声明:使用%type属性declarev_empnonumber(4);v_empno2emp.empno%type;v_empno3v_empno2%type;begindbms_output.put_line('testfortype');end;第四十一课--Table变量类型,相当于数组类型declaretypetype_table_emp_empnoistableofemp.empno%typeindexbybinary_integer;//声明类型v_empnostypa_table_emp_empno;beginv_empnos(0):=7777;v_empnos(1):=7778;v_empnos(-1):=6666;dbms_output.put_line(v_empnos(-1));end;--Record变量类型,相当于类declaretypetype_record_deptisrecord(deptnodept.deptno%type,dnamedept.dname%type,locdept.loc%type);v_temptype_record_dept;beginv_temp.deptno:=50;v_temp.dname:='yugang';v_temp.loc:='beijing';dbms_output.put_line(v_temp.deptno||''||v_temp.dname||''||v_temp.loc);end;--使用%rowtype声明record变量declarev_tempdept%rowtype;beginv_temp.deptno:=50;v_temp.dname:='yugang';v_temp.loc:='beijing';dbms_output.put_line(v_temp.deptno||''||v_temp.dname||''||v_temp.loc);end;--SQL语句的运用--select语句必须和into语句一块使用并且只能返回一条记录--sql%rowcountdeclarev_nameemp.ename%type;v_salemp.sal%type;beginselectename,salintov_name,v_salfromempwhereempno=7369;dbms_output.put_line(v_name||''||v_sal);end;declarev_tempemp%rowtype;beginselect*intov_tempfromempwhereempno=7369;dbms_output.put_line(v_temp.ename||''||v_temp.eno);end;declarev_deptnodept.deptno%type:=50;v_dnamedept.dname%type:='mm';v_locdept.loc%type:='bj';begininsertintodeptvalues(v_deptno,v_dname,v_loc);commit;end;declarev_deptnodept.deptno%type:=50;v_countnumber;begin--updateempsetsal:=sal/2wheredeptno=v_deptno;--selectdeptnointov_deptnofromempwheredeptno=7369;selectcount(*)intov_countfromemp;dbms_output.put_line(sql%rowcount||'条记录被影响!');commit;end;--DDL语句,在PLSQL中使用DDL语句要加上executeimmediate,两个单引号代表一个单引号beginexecuteimmediate'createtablett(namevarchar2(20)default''Army'')';end;declarev_salemp.sal%type;beginselectsalintov_salfromempwhereempno=7369;if(v_sal<1200)thendbms_output.put_line('low');elsif(v_sal<2000)thendbms_output.put_line('middle');elsedbms_output.put_line('high');endif;end;--循环declareibinary_integer:=1;beginloopdbms_output.put_line(i);i:=i+1;exitwhen(i>=11);endloop;end;declarejbinary_integer:=1;beginwhilej<11loopdbms_output.put_line(j);j:=j+1;endloop;end;beginforkin1..10loopdbms_output.put_line(k);endloop;forkinreverce1..10loopdbms_output.put_line(k);endloop;end;--错误处理(too_many_rows,others,no_data_found)declarev_tempnumber;beginselectempnointov_tempwheredeptno=10;exceptionwhentoo_many_rowsthendbms_output.put_line('太多记录了');whenothersthendbms_output.put_line('error');end;declarev_tempnumber;beginselectdeptnointov_tempfromempwhereempno=2222;exceptionwhenno_data_foundthendbms_output.put_line('没数据');end;createtableerrorlog(idnumberprimarykey,errcodenumber,errmsgvarchar2(1024),errdatedate);createsequenceseq_errorlog_idstartwith1incrementby1;declarev_deptnodept.deptno%type:=10;v_errcodenumber;v_errmsgvarchar2(1024);begindeletefromdeptwheredeptno=v_deptno;commit;exceptionwhenothersthenrollback;v_errcode:=SQLCODE;v_errmsg:=SQLERRM;insertintoerrlogvalues(seq_errorlog_id.nextVal,v_errcode,v_errmsg,sysdate);commit;end;第47~48课:cursor(重点)declarecursorcisselect*fromemp;v_empc%rowtype;beginopenc;fetchcintov_emp;dbms_output.put_line(v_emp.ename);closec;end;--简单循环declarecursorcisselect*fromemp;v_empc%rowtype;beginopenc;loopfetchcintov_emp;exitwhen(c%notfound);dbms_output.put_line(v_emp.ename);endloop;end;declarecursorcisselect*fromemp;v_empc%rowtype;beginopenc;loopfetchcintov_emp;--下面两行顺序改变后,将会把最后一条记录打印两遍dbms_output.put_line(v_emp.ename);exitwhen(c%notfound);endloop;end;--while循环declarecursorcisselect*fromemp;v_empemp%rowtype;beginopenc;fetchcintov_emp;while(c%found)loopdbms_output.put_line(v_emp.ename);fetchcintov_emp;endloop;closec;end;--for循环declarecursorcisselect*fromemp;beginopenc;forv_empincloopdbms_output.put_line(v_emp.ename);endloop;closec;end;--带参数的游标declarecursorc(v_deptnoemp.deptno%type,v_jobemp.job%type)isselectename,salfromempwheredeptno=v_deptnoandjob=v_job;--v_empemp%rowtype;beginforv_empinc(30,'JAY')loopdbms_output.put_line(v_emp.ename);endloop;end;--可更新的游标declarecursorcisselect*fromempforupdate;--v_tempc%rowtype;beginforv_tempincloopif(v_temp.sal<2000)thenupdateempsetsal=sal*2wherecurrentofc;elsif(v_temp.sal=5000)thendeletefromempwherecurrentofc;endif;endloop;commit;end;第49~50课:procedurecreateorreplaceprocedurepiscursorcisselect*fromempforupdate;beginforv_tempincloopif(v_temp.deptno=10)thenupdateempsetsal=sal+10wherecurrentofc;elsif(v_temp.deptno=20)thenupdateempsetsal=sal+20wherecurrentofc;elseupdateempsetsal=sal+50wherecurrentofc;endif;endloop;commit;end;--带参数的存储过程createorreplaceprocedurep(v_ainnumber,v_bnumber,v_retoutnumber,v_tempinoutnumber)isbeginif(v_a<v_b)thenv_ret:=v_b;elsev_ret:=v_a;endif;v_temp:=v_temp+1;end;declarev_anumber:=10;v_bnumber:=20;v_retnumber;v_tempnumber:=99;beginp(v_a,v_b,v_ret,v_temp);dbms_output.put_line(v_ret);dbms_output.put_line(v_temp);end;/*begin P;end存储过程在创建过程中如果出现错误,仍然会创建,并且不会提示错误在哪儿,可以使用showerror来查看错误出现在哪儿。*/----创建函数createorreplacefunctiontax_sal(v_salnumber)returnnumberisbeginif(v_sal<2000)thenreturn0.10;elsif(v_sal<3000)thenreturn0.20;elsereturn0.30;endif;end;--触发器createtableemp_log//创建一个表记录操作(unamevarchar2(20);actionvarchar2(10);atimedate);createorreplacetriggertrigafter/beforeinsertorupdateordeleteonemp2foreachrowbeginifinsertingtheninsertintoemp_logvalues(USER,'insert',sysdate);elsifupdatingtheninsertintoemp_logvalues(USER,'update',sysdate);elseinsertintoemp_logvalues(USER,'delete',sysdate);endif;end;updatedeptsetdeptno=99wheredeptno=10;--违反约束条件createorreplacetriggertrigafterupdateondeptforeachrowbeginupdateempsetdeptno=:NEW.deptnowheredeptno=:OLD.deptno;  end;    http://169.254.247.156:8080/apex  
本文档为【尚学堂oracle笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_808969
暂无简介~
格式:doc
大小:27KB
软件:Word
页数:0
分类:企业经营
上传时间:2018-07-18
浏览量:1