zoukankan      html  css  js  c++  java
  • Oracle PLSQL:

    PLSQL:
      符号:
        赋值: :=

      基本示例:

            set serveroutput on   //设置输出打开.
            declare
              --说明部分
              
            begin
              --程序
              dbms_output.put_line('Hello World');
            exception
            
            end;
            /


      引用型变量:
        --查询7839的姓名和薪水

            --查询7839的姓名和薪水
            set serveroutput on
    
            declare
              --定义变量保存姓名和薪水
              --pename varchar2(20);
              --psal   number;
              pename emp.ename%type;      //引用型变量
              psal   emp.sal%type;      
            begin
              --得到姓名和薪水
              select ename,sal into pename,psal from emp where empno=7839;
    
              dbms_output.put_line(pename||'的薪水是'||psal);
            end;
            /


      记录型变量(代表了一行,多个列,类似数组)
        --查询7839的姓名和薪水

            set serveroutput on
    
            declare
              --定义记录型变量:代表一行
              emp_rec emp%rowtype;
            begin
              select * into emp_rec from emp where empno=7839;
              dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
            end;
            /


      IF语句
        --判断用户从键盘输入的数字

            set serveroutput on
    
            --接收键盘输入
            --num: 地址值,在该地址上 保存了输入的值
            accept num prompt '请输入一个数字';  //accept 命令
    
            declare
              --定义变量保存输入的数字
              pnum number := #            //从地址上取出数字 使用 &
            begin
              if pnum = 0 then dbms_output.put_line('您输入的是0');
                elsif pnum = 1 then dbms_output.put_line('您输入的是1');
                elsif pnum = 2 then dbms_output.put_line('您输入的是2');
                else dbms_output.put_line('其他数字');
              end if;
            end;
            /

      循环语句(共有三种方式,此处举例一种):
        --打印1~10

            set serveroutput on
    
            declare
              pnum number := 1;
            begin
              loop
                --退出条件
                exit when pnum > 10;
                
                dbms_output.put_line(pnum);
                --加一
                pnum := pnum + 1;
              end loop;
            end;
            /

      Cursor:光标(相当一个resultset, 结果集):
        1. 光标的属性:
          %isopen      %rowcount (影响的行数)
          %found        %notfound
        2. 默认,一个会话中只能打开300个光标
                    show parameter cursor //查看参数 --->后面两个都是这里查来的
          修改: alter system/session set open_cursors=400;

        3. cursor_sharing ---> 性能优化
          EXACT(默认),   FORCE(提性能),   SIMILAR

        例子:
          --查询并打印员工的姓名和薪水(不带参数)

                set serveroutput on
    
                declare
                  --定义光标
                  cursor cemp is select ename,sal from emp; //定义一个光标
                  pename emp.ename%type;
                  psal   emp.sal%type;
                begin
                  --打开光标
                  open cemp;                            //打开一个光标
    
                  loop
                    --取一条记录
                    fetch cemp into pename,psal;        //取出一个记录
                    --退出条件
                    --exit when 没有取到记录;
                    exit when cemp%notfound;
    
                    dbms_output.put_line(pename||'的薪水是'||psal);
    
                  end loop;
                  
                  --关闭光标
                  close cemp;                            //关闭光标
                end;
                /

        例二(带参数):
          --查询某个部门的员工姓名

                set serveroutput on
    
                declare
                  cursor cemp(dno number) is select ename from emp where deptno=dno;
                  pename emp.ename%type;
                begin
                  open cemp(20);     //传参
                  loop
                    fetch cemp into pename;
                    exit when cemp%notfound;
                    
                    dbms_output.put_line(pename);
    
                  end loop;
                  close cemp;
                end;
                /

    exception(例外)
      系统例外:
        No_data_found (没有找到数据)
        Too_many_rows (select into 语句匹配多个行)
        Zero_Divide (被 0 除)
        Value_error (算数或者转换异常)
        Timeout_on_resource (等待资源超时)

        --被0除
        

                    set serveroutput on
    
                    declare
                      pnum number;
                    begin
                      pnum := 1/0;
                      
                    exception
                      when zero_divide then dbms_output.put_line('1:0不能做分母');
                                             dbms_output.put_line('2:0不能做分母');
                      when value_error then dbms_output.put_line('算术或者转换错误');
                      when others then dbms_output.put_line('其他例外');
                    end;
                    /

      自定义例外:
        --查询50号部门的员工姓名

                    set serveroutput 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;
    
                      --pmon: process monitor
                      close cemp;
                      
                    exception      //一般处理是保存到一个表中
                      when no_emp_found then dbms_output.put_line('没有找到员工');
                      when others then dbms_output.put_line('其他例外'); 
                    end;
                    /
  • 相关阅读:
    【美团面试题】——图遍历
    ubuntu15.04 + ROS jade
    3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(三)
    谈谈你对组件的看法
    Web开发中跨域的几种解决方案
    JS事件模型
    zepto的clone方法于textarea和select的bug修复
    SASS使用总结
    git用法总结
    去除inline-block元素间间距
  • 原文地址:https://www.cnblogs.com/soficircle/p/7276868.html
Copyright © 2011-2022 走看看