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;
                    /
  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/soficircle/p/7276868.html
Copyright © 2011-2022 走看看