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

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

难度初级
时长 3小时22分
学习人数
综合评分9.57
114人评价 查看评价
9.8 内容实用
9.4 简洁易懂
9.5 逻辑清晰
  • 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 count81:=count81+1;
                 elsif phiredate='1982' then count82:=count82+1;
                 else count87:=count87+1;
              end if;
            end loop;
       close cemp;
       
       --输出结果
       dbms_output.put_line('Total:'||(count80+count81+count82+count87));
       dbms_output.put_line('1980:'||count80);
       dbms_output.put_line('1981:'||count81);
       dbms_output.put_line('1982:'||count82);
       dbms_output.put_line('1987:'||count87);
    end;
    /

    查看全部
  • 使用基本的数据类型 declare --定义基本变量类型 --基本数据类型 pnumber number(7,2); --字符串变量 pname varchar2(20); --日期变量 pdate date; begin pnumber :=1; dbms_output.put_line(pnumber); pname :='Tom'; dbms_output.put_line(pname); pdate=sysdate; dbms_output_line(pdate); ---计算明天的日期 dbms_output.put_line(pdate +1); end; /
    查看全部
  • 学习PLSQL的目的: 一、操作Oracle效率最高 二、在于继续学习存储过程,存储函数和触发器 declare --说明部分(变量,光标或者例外) begin --程序体 dbms_output.put_line('Hello World'); end; / set serveroutput on --打开输出开关 --查看程序包的结构 desc dems_output
    查看全部
  • /* 1. 光标的属性 %found %notfound %isopen; 判断光标是否打开 true / false %rowcount; 影响的行数 2. 光标数的限制:默认情况下,Oracle数据库只允许在同一个回话中,打开300个光标 -- 切换到管理员 show user conn sys/password@192.168.56.101:1521/orcl as sysdba show parameter -- 做的是模糊查询 show parameter cursor -- 修改光标数的限制 alter system set open_cursors=400 scope=both; scope的取值:both、memory(只更改当前实例,不更改参数文件)、spfile(只更改参数文件,不更改当前实例,数据库需要重启才会生效) */ set serveroutput on declare cursor cemp is select empno,empjob from emp; pempno emp.empno%type; pjob emp.empjob%type; begin open cemp; if cemp%isopen then dbms_output.put_line('光标已经打开'); else dbms_output.put_line('光标没有打开'); end if; loop fetch cemp into pempno,pjob; exit when cemp%nofound; dbms_output.put_line('rowcount:'||cemp%rowcount); end loop; close cemp; end; /
    查看全部
  • PL/SQL的程序结构 declare 说明部分 (变量说明、光标申明、例外说明) 定义基本变量或常量 类型:char,varchar2,date,number,boolean,long 例: pname varchar2(20); pdate date; married boolean := true; -- 赋值 := pnumber number(7,2); begin 语句序列 (DML语句) pnumber:=1; dbms_output.put_line(pnumber); pname:='Tom'; dbms_output.put_line(pname); pdate:=sysdate; dbms_output.put_line(pdate); exception 例外处理语句 end; /
    查看全部
  • set serveroutput on declare cursor cemp is select empno,sal from emp order by sal; pempno emp.empno%type; psal emp.sal%type; pcount number := 0; ptotal number; begin select sum(sal) into ptotal from emp; --打开光标 open cemp; loop fetch cemp into pempno,psal; exit when cemp%notfound; --工资总额>50000退出 exit when ptotal + psal*0.1>50000; ptotal := ptotal + psal*0.1; pcount := pcount + 1; update emp set sal = sal + sal * 0.1 where empno=pempno; end loop; --关闭光标 close cemp; commit; DBMS_OUTPUT.PUT_LINE('涨工资人数:'||pcount||',涨后工资总额:'||ptotal); end; /
    查看全部
  • 连接MySQL数据库
    查看全部
    1 采集 收起 来源:SQL Developer安装

    2017-04-20

  • set serveroutput on declare Cursor cdep is select dno, dname from dep; pdno dep.dno%type; pdname dep.dname%type; Cursor csc(p_cname course.cname%type, p_dno student.dno%type) is select grade from sc where cno = (select cno from course where cname = p_cname) and sno in (select sno from student where dno = p_dno); pgrade sc.grade%type; count1 number; count2 number; count3 number; avggrade number; begin open cdep; loop fetch cdep into pdno, pdname; exit when cdep%notfound; count1 := 0; count2 := 0; count3 := 0; avggrade := 0; open csc('大学物理', pdno); loop fetch csc into pgrade; exit when csc%notfound; if pgrade < 60 then count1 := count1 + 1; elsif pgrade < 85 then count2 := count2 + 1; else count3 := count3 + 1; end if; avggrade := avggrade + pgrade; end loop; avggrade := avggrade / (count1 + count2 + count3); insert into msg1 values ('大学物理', pdname, count1, count2, count3, avggrade); close csc; end loop; close cdep; end; /
    查看全部
  • /* 1.得到有哪些系 select dno, dname from dep;-->光标-->循环-->退出条件:notfound; 2.得到系中,选修了“大学物理”课程学生的成绩 select grade from sc where cno = (select cno from course where cname = ??) and sno in (select sno from student where dno = ??) --> 带参数的光标-->循环-->退出条件:notfound 变量:1.初始值 2.如何得到 每个分数段的人数 count1 number; count2 number; count3 number; 每个系选修了“大学物理”学生的平均成绩 avggrade number; 1. 算术运算 2. select avg(grade) into avggrade from sc where cno = (select cno from course where cname = ??) and sno in (select sno from student where dno = ??); */
    查看全部
  • 系统例外: 1.No_date_found(没有找到数据) 2.Too_many_rows (select...into语句匹配多个行) 3.Zero_Divide (被零除) 4.Value_error (算术或转换错误) 如:负数在实数范围开平方,abc字符串 转换成 数字123 5.Timeout_on_resource (等待资源时发生超时)比较典型的场景:分布式数据库
    查看全部
  • 光标的属性: %found 是否取到值 true/false %notfound 是否未取到值 true/false %isopen 光标是否打开 true/false %rowcount 影响的行 光标数的限制:系统默认300 修改光标数限制 alter system set open_cursors=400 scope=both scopt属性:memory(只该当前实例),spfile(只改参数文件,数据库需要重启),both(两者都改)
    查看全部
  • No_data_found 很容易理解就是没有数据返回。 Too_many_rows 在我们使用 select ... into 的时候这种错误经常的会发生,就是因为其返回了多条内容。 Zero_Divide 被零除。 Value_error 算数或者转换错误,比如说我们想把一个字符串 “abc” 转换成一个整数类型的数据 Time_on_resource 等待资源的时候由于时间过长会有这样的例外发生。
    查看全部
  • 说明部分: 1.引用型变量:my_name emp.ename%type;引用emp中ename列的的属性 2.记录型变量的引用:emp_rec emp%rowtype;取表中一行的类型 理解成数组。 记录型变量分量的引用 emp_rec.ename:='ADAMS';取表中一行中的其中一个的类型 例子: 1)引用型变量 set serveroutput on declare --定义引用型变量:查询并打印7839的姓名和薪水 --pename varchar2(20); --psal number; pename emp.ename%type; psal emp.sal%type; begin --得到7839的姓名和薪水 select ename,sal into pename,psal from emp where empno=7839; --打印姓名和薪水 DBMS_OUTPUT.PUT_LINE(pename||'的薪水是'||psal); end; / 2)记录型变量 --使用记录型变量,查询并打印7839的姓名和薪水 set serveroutput on declare --定义记录型变量:注意代表某一行 emp_rec emp%rowtype; begin --得到7839一行的信息 select * into emp_rec from emp where empno='7839'; dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal); end;
    查看全部
  • 1.2PL/SQL的作用 ResultSet rs="select empno,job from emp"; while(rs.next()){ int eno=rs.getInt("empno"); String job=rs.getString("job"); if("PRESIDENT".equals(job)){ update emp set sal=sal+1000 where empno=eno; }else if("MANAGER".equals(job)){ update emp set sal=sal+800 where empno=eno; }else { update emp set sal=sal+400 where empno=eno; } } PLSQL作用:操作数据库的效率更高,便于存储; declare --说明部分 begin --程序体 dbms_output.put_line("Hello World"); end; / --打开输出开关 set serveroutput on / --查看程序包的结构 desc dbms_output
    查看全部
  • if判断1: if 条件 then 语句1; 语句2; end if; if判断2: if条件then语句; elsif 语句then语句; else 语句; end if; 注意:elsif没有e 且是连在一起的
    查看全部

举报

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

微信扫码,参与3人拼团

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

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