zoukankan      html  css  js  c++  java
  • Oracle(六)PL/SQL、循环和游标

     

    -- View:视图(虚表),不占用物理空间!
    --  如果没有权限
    -- 使用dba登录  grant  create any  view to 用户名;

    create or replace  view  teacher_view
    as
    select tname,sal from teacher

    --  查询视图
    select * from teacher_view

    ************=======PL/SQL=======*************

    --PL/SQL (Procedural  Language) 过程化sql语言! 在原本的sql语句上 添加了 逻辑判断
    --循环等操作!   在数据库 执行pl/sql程序时,pl/sql和sql语句时分别进行解析和执行的!

    --语法结构     :=  就是赋值语句
    --01.declare   可选部分  声明 : 变量, 异常,游标...

    --02.begin     必要部分   书写:sql语句 和pl/sql语句

    --03.exception  可选部分   针对出现异常时候的处理

    --04.end       必要部分


    -- 根据指定老师的编号查询薪水  输出一个结果
    declare
      v_name  teacher.tname%type;
      v_sal   teacher.sal%type;
      v_result  varchar2(30);
    begin
        select t.tname,t.sal into v_name,v_sal from teacher t where  tno=1002;
       --根据薪水   得到不同的返回结果
        if v_sal>=2000 and v_sal<=10000 then
          v_result:='还可以吧';
        elsif v_sal>10000 and v_sal<=40000 then
          v_result:='真可以';
        elsif v_sal>40000 then
          v_result:='牛牛牛';
        else
           v_result:='咩咩';
        end if;
          dbms_output.put_line(v_name||':'||v_sal||'====='||v_result);
       
        --根据 v_result的值 输出不同的结果
        case v_result
          when '还可以吧' then
             dbms_output.put_line(v_name||'工资在2k到10k');
          when  '真可以' then
              dbms_output.put_line(v_name||'工资在10k到40k');
          when '牛牛牛' then
             dbms_output.put_line(v_name||'工资在40k以上');
            else
                 dbms_output.put_line(v_name||'工资2k以下');
          end case
        
    end;

    ************=======循环=======*************

    --循环结构
    --01.loop 语法
       loop
         执行的语句;
         exit when 条件;
       end loop;
      

    declare
    i number;
    begin
      i:=1;
      loop
        dbms_output.put_line(i);
        i:=i+1;
        exit when i>50;
       end loop;
    end;
       
    --02.while  语法
      while 条件  loop
       执行的语句;
      end loop;

    declare
    i number;
    begin
      i:=1;
      while i<=50 loop
        dbms_output.put_line(i);
        i:=i+1
       end loop;
    end;


    --03.for 语法

    for 变量 in  范围(上限,下限)loop
      执行的语句;
    end loop;

    declare
    i number;
    begin
    for i in 1..50
       loop
        dbms_output.put_line(i);
       end loop;
    end;

    ************=======游标=======*************

    --游标:是系统给我们用户 开设一个数据缓冲区! 存放的是sql语句执行的结果!
    --每个游标区都有一个名字,用户通过游标一行一行的获取记录!

    --01.隐式游标  在我们Pl/sql中,程序执行sql语句时 自动创建! ====>sql
    --02.显示游标  可以返回多行的查询!
    --03.REF游标   用于处理运行时才能确定的动态sql 查询结果

    --隐式游标属性
       --01.sql%found   影响了一行或者多行 都返回 true
       --02.sql%notfound   没有影响行数   返回 true
       --03.sql%rowcount    sql语句影响的行数
       --04.sql%isopen    游标是否打开,始终为false
    declare
    tname  teacher.tname%type; --声明一个变量
      cursor teacher_cursor  is  select tname from teacher; --声明游标
    begin
       open teacher_cursor;  --打开游标
        fetch teacher_cursor into tname;
       --循环输出tname
       while teacher_cursor%found
         loop
           dbms_output.put_line('教师的姓名===='||tname);
           fetch teacher_cursor into tname;
         end loop;
       close teacher_cursor;--关闭游标
    end; 

  • 相关阅读:
    flink on yarn部分源码解析 (FLIP-6 new mode)
    flink on yarn部分源码解析
    flink window的early计算
    【flink training】 打车热点区域实时统计PopularPlaces
    troubshooting-sqoop 导出 TiDB表数据报com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    Hive2.0常用函数(对编辑器很无语😓)
    Hive正则表达式
    troubleshooting-Container 'PHYSICAL' memory limit
    Hive-查询结果导入到 MySQL
    Hive-复制表
  • 原文地址:https://www.cnblogs.com/xiaobaizhang/p/8724401.html
Copyright © 2011-2022 走看看