为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle数据库开发必备利器之PL/SQL基础

难度初级
时长 3小时22分
学习人数
综合评分9.57
114人评价 查看评价
9.8 内容实用
9.4 简洁易懂
9.5 逻辑清晰
  • 1、光标的属性

    %found:光标中是否有数据,有则返回true,无返回false。

    %notfound:与上面相反。

    %isopen:判断光标是否打开,打开返回true,否则返回false。

    %rowcount:影响的行数,例如光标中有100条记录,现在这个指针到10行这里,那么它聚会返回10。它不是总行数。

    http://img1.sycdn.imooc.com//5df5e7ce00019f8b13200784.jpg

    2、光标数的限制:默认情况下,oracle数据库允许在同一会话下,只能打开300个光标(可以查看oracle初始化参数得到这个值)。它的意思是指open 光标之后,打开到一定数量就不可以在打开光标了。

    注意:查询数据库参数时,需要使用管理员,这里使用sysdba。show parameter这里是模糊查询,后面可以接查询的名,它会自动加%%,如图。

    http://img1.sycdn.imooc.com//5df5e9850001b20d06400310.jpg

    修改系统参数语法:alter system set 参数字段=值。如图,这里的scope代表范围,它有三个值。如果scope为memory,那么修改只是更改当前实例,不更改参数文件。如果为spfile,那么修改只是更改参数文件,不更改当前实例(如果是spfile,数据库需要重新启动)。both代表前两个同时更改。


    http://img1.sycdn.imooc.com//5df5eade0001953606270110.jpg

    查看全部
  • 使用PL/SQL完成员工涨工资。

    注意:演示过程中,执行完PL/SQL,查询却没有涨工资,这是因为PL/SQL执行它是一个事物,而查询是一个事物,PL/SQL执行完需要提交事物,否则查询就会发生没有改变。所以一定注意写完PL/SQL程序后,如果修改了数据库中的记录必须要提交事物。这里为了显示刚才增加的工资所以在上面添加rollback,回滚到修改之前的工资。

    http://img1.sycdn.imooc.com//5df5d66b00011c6508020405.jpg

    http://img1.sycdn.imooc.com//5df5d66300018b5f08460540.jpg

    ——总结——

    1、oracle数据库默认开启数据库事务。

    2、oracle,默认的事物隔离级别是read commited。

    查看全部
  • 光标:PL/SQL中使用光标代表一个集合(ResultSet)。

    光标语法:如图,注意:定义光标时,CURSOR是定义光标的关键字,变量的名字放在它后面。

    http://img1.sycdn.imooc.com//5df5a12f0001169510820352.jpg

    http://img1.sycdn.imooc.com//5df5a1c70001fe6f09150273.jpg

    使用光标语法:如图,它的意思相当于执行select语句,得到集合。如图,从光标中取值并放入变量pename中。如图,当使用完光标后,还需要关闭,它的意思释放光标占用系统的一些资源。

    http://img1.sycdn.imooc.com//5df5a2140001257907610337.jpg

    http://img1.sycdn.imooc.com//5df5a2820001734e08790320.jpg

    http://img1.sycdn.imooc.com//5df5a24400011eca08180283.jpg

    fetch的作用:如图,它有两点作用。1、当开启光标的时候,初始化光标后,集合会有一个指针指向集合的第一条记录地址,fetch的第一个作用就是将该指针指向的记录返回。2、将指针移动后一条记录的地址。所以可以通过循环这个光标来返回集合中所有的记录。

    http://img1.sycdn.imooc.com//5df5a31b0001c07911020604.jpg

    http://img1.sycdn.imooc.com//5df5a35000016ab810770583.jpg

    举例:通过光标打印所有员工姓名和工资,定义光标规范,尽量把fetch后的变量和光标定义在一块。这里需要注意into后面字段的顺序要和查询语句的返回字段顺序一一对应。

    判断光标中是否还有数据语法:这里需要了解光标的属性。

    光标的属性:总共有四个属性。1、%found它代表如果fetch取到值,它的值就为true,否则就为false。2、%notfound它代表与第一种相反的意思。

    http://img1.sycdn.imooc.com//5df5a72d0001c68605640539.jpg

    http://img1.sycdn.imooc.com//5df5a742000126b107440395.jpg

    http://img1.sycdn.imooc.com//5df5a75100011a8506350382.jpg


    查看全部
  • PL/SQL光标的引入:如图,在Java中如果想要循环select查询结果集合中的每一个数据,可以通过ResultSet,通过对象的next()方法,遍历集合中每一个数据。光标的作用就是这样子的。

    http://img1.sycdn.imooc.com//5df5a01f0001468d08550384.jpg

    查看全部
  • PL/SQL循环语句的使用

    第一种循环语句形式:当条件满足total<=25000时,执行LOOP和END LOOP之间的循环体,不满足时退出循环。

    http://img1.sycdn.imooc.com//5df58ec900016a3508650413.jpg

    举例:注意,PL/SQL中没有++这种自增运算符。

    http://img1.sycdn.imooc.com//5df58fd800011b6906140419.jpg

    http://img1.sycdn.imooc.com//5df58fe90001176c04880281.jpg

    第二种循环语句形式:如果满足when后面的条件,则跳出循环体。不满足则执行循环体。

    http://img1.sycdn.imooc.com//5df592790001438b09260497.jpg

    举例:如图。

    http://img1.sycdn.imooc.com//5df593700001962e06070500.jpg

    http://img1.sycdn.imooc.com//5df59377000131ed07650405.jpg

    第三种循环语句形式:I是循环变量,IN后面是循环变量的取值,像这里就是从1取到3,其中1..3代表1、2、3三个数字,注意..的使用必须是连续的数字。


     http://img1.sycdn.imooc.com//5df58f110001c06f07390373.jpg

    举例:如图。

    http://img1.sycdn.imooc.com//5df59544000167d104870378.jpg

    http://img1.sycdn.imooc.com//5df595590001516e08180351.jpg

    推荐使用第二种循环,因为这种方式使用光标比较方便。

    查看全部
  • PL/SQL中if语句的使用(语句序列DML语句)

    第一种IF语句形式,如图。

    http://img1.sycdn.imooc.com//5df5873a000197f106870380.jpg

    第二种IF语句形式,如图。

    http://img1.sycdn.imooc.com//5df5875d00015f9208310383.jpg

    第三种IF语句形式,如图。


    http://img1.sycdn.imooc.com//5df587920001fbed08690450.jpg

    举例:判断用户从键盘输入的数字。1、如何使用if语句。2、如何接受一个键盘的输入(键盘输入的都是字符串)。

    http://img1.sycdn.imooc.com//5df5892b0001103706710513.jpghttp://img1.sycdn.imooc.com//5df5894e0001452605850245.jpg

    查看全部
  • 引用型变量:其中my_name表示变量名,emp表示员工表,ename表示员工名字段,整句代表引用emp表的ename字段类型作为该变量的类型。

    引用型变量优势:它会随着参考类型改变而改变。

    http://img1.sycdn.imooc.com//5df490fe000145b207410271.jpg

    举例:注意在PL/SQL中,赋值有两种方式,一种是:=,另一种是使用into关键字,oracle中的dbms_output包的put_line参数中的连接符||。

    http://img1.sycdn.imooc.com//5df4933b00019f0c05490523.jpg

    记录型变量:取表中一行变量的类型作为变量的类型,可以理解记录型变量为数组,数组中的每一个元素就代表这一行的每一列,如果要引用其中某一列,可以通过——》变量名.字段名

    http://img1.sycdn.imooc.com//5df491130001d73708710498.jpg

    举例:

    http://img1.sycdn.imooc.com//5df4977a0001835306720565.jpg

    查看全部
  • PL/SQL的完整程序结构

    http://img1.sycdn.imooc.com//5df485240001cead10210537.jpg

    变量的定义语法:如图,需要注意的是变量名称放在类型前,赋值使用:=。

    http://img1.sycdn.imooc.com//5df486110001d9f209980582.jpg

    举例:这里可以使用sysdate来获取当前时间。

    http://img1.sycdn.imooc.com//5df486f30001728103700500.jpg

    查看全部
  • PL/SQL(Procedure Language/SQL):Oracle对sql语言的过程化扩展,指在SQL命令语言中增加了过程处理语句。例如:分支、循环等,使SQL语言具有过程处理能力,PL/SQL是面向过程的语言。

    http://img1.sycdn.imooc.com//5df4839b0001025d08670390.jpg

    如下这种方式,就需要使用PL/SQL来实现。

    http://img1.sycdn.imooc.com//5df483ef0001363810490302.jpg

    http://img1.sycdn.imooc.com//5df484450001df9008420397.jpg

    查看全部
    0 采集 收起 来源:PL/SQL简介

    2019-12-14

  • 学习PL/SQL作用

    1、对oracle的一个扩展。

    例如:涨工资,可以通过java使用jdbc来操作,这里可以通过调用PL/SQL来操作,它的效率是操作oracle数据库最高的,相比其他语言。

    2、它是学习存储过程、自定义函数、触发器的基础。

    举例:简单的PL/SQL例子,它以declare开头代表声明。接下来是说明,它是一个程序,所以它会有变量,光标,例外,这里指对他们的声明。程序以begin开始,end;结束,中间是程序体。(dbms_output是PL/SQL提供的程序包,这个程序包中提供了很多的方法,其中put_line()它是一个存储过程,它的作用是接受一个字符串打印在屏幕上)。最后需要/,代表退出编辑环境,并且执行PL/SQL程序。此时还需要一个操作,因为默认oracle的输出开关是关闭的,通过set serveroutput on打开输出开关。这里的/代表执行上一条SQL语句或者上一条PL/SQL程序。

    注意:如果程序没有说明部分那么前面的declare可以不写。

    http://img1.sycdn.imooc.com//5df47aae0001ffa206630391.jpg

    http://img1.sycdn.imooc.com//5df4788800019afb10800616.jpg

    Oracle中包的位置,可以通过查看文档了解包的用途。

    http://img1.sycdn.imooc.com//5df47d1f0001f06f11680672.jpg

    http://img1.sycdn.imooc.com//5df47d320001170611920683.jpg

    其中第一个表示Oracle数据库中提供了哪些程序包,第二个相当于语法手册,代表怎么使用。

    http://img1.sycdn.imooc.com//5df47d6f0001dcff12070697.jpg

    http://img1.sycdn.imooc.com//5df47da90001f5dd11670670.jpg

    拉到最下方可以看到oracle10g中提供了198个程序包。

    http://img1.sycdn.imooc.com//5df47dce0001507512190696.jpg

    而dbms这个包是第68个可以查看它的overview概述,它还提供了一些examples,还可以查看这个程序包中有哪些子程序,像put_line这个存储过程,通过它可以了解每一个包的详细用法。

    http://img1.sycdn.imooc.com//5df47e200001e82311430685.jpg

    http://img1.sycdn.imooc.com//5df47e7400018bf105690440.jpg

    在命令行中直接使用命令(desc 包名)查看包的结构,这种形式查看更为简洁。


    http://img1.sycdn.imooc.com//5df47efb00010cca11890602.jpg

    put_line它是一个存储过程,需要一个参数A,并且类型为字符串,并且为输入参数。

    http://img1.sycdn.imooc.com//5df47f15000114de08060135.jpg


    查看全部

  • set serveroutput on


    declare

    cursor cemp is select empno,sal from emp order by sal;

    pempno emp.empno%type;

    psal        emp.sal%type;

    countEmp number:=0;

    salTotal number;

    begin

     select sum(sal) into salTotal from emp;

    open cemp;

     loop

      exit when salTotal > 50000;

      fetch cemp into pempno,psal;

      exit when cemp%notfound;

      update emp set sal = sal*1.1 where empno =pempno;

      countEmp := countEmp +1;

      salTotal:=salTotal + psal*0.1; 

     end loop;

    close cemp;

    dbms.output.put_line();

    end;

    /


    查看全部
  • set serveroutput on


    declare

    cursor cemp is select to_char(hiredate,'yyyy')  from emp;

    phiredate varchar2(4);

    count80 number := 0;

    count81 number := 0;

    count82 number := 0;

    count87 number := 0;

    begin

    open cemp;

     loop

     fetch cemp into phiredate;

     exit when cemp%notfound;

     

     if phiredate = '1980' then count80:=count80+1;

     elsif phiredate = '1981' then count80:=count81+1;

     elsif phiredate = '1982' then count80:=count82+1;

     else  count87:=count87+1;

    end if;

    close cemp;


    dbms.output.put_line();

    end;

    /


    查看全部
  • set sereroutput on


    declare

      cursor cemp is select ename from emp where deptno = 50;

      pename emp.ename%type;

      no_emp_found exception;


    begin

     open cemp;

     fetch cemp into pename;

     if cemp%notfound then 

       raise no_emp_found;  

     end if;

     close cemp;


    exception

      when no_emp_found then dbms_output.put_line();

      when others then dbms_output.put_line();

    end;

    /


    查看全部
    0 采集 收起 来源:自定义例外

    2019-12-09

  • 自定义例外

    查看全部
    0 采集 收起 来源:自定义例外

    2019-12-09

  • 修改光标数的限制

    alter system set open_cursor = 400 scope = both;

    memory 只改当前实例

    spfile 改参数文件,需要重启数据库

    查看全部

举报

0/150
提交
取消
课程须知
亲,要学习本门课程只需要熟练使用Oracle的SQL语句就可以了,可以参考慕课网的课程《Oracle数据库开发必备利器之SQL基础》呦!
老师告诉你能学到什么?
1、能够熟练掌握PL/SQL的基本语法 2、能够熟练使用光标和例外 3、能够熟练使用PL/SQL进行开发

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!