OraclePL/SQL循环和游标

Posted ~★半支烟☆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OraclePL/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; 

以上是关于OraclePL/SQL循环和游标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle PL/SQL 过程的开始部分之后声明游标

Oracle PL/SQL 在循环中捕获锁定异常并继续

嵌套隐式游标未清除数据

Oracle PL/SQL 将游标(来自函数)中的每个值一一分配给另一个游标

oracle pl/sql 循环中以表名作为参数的 UPDATE 语句

在 Oracle PL/SQL 中复制 SAS DO 循环