pl/sql _oracle 学习

--首先申明我是初学者 写的日记也难免有问题 毕竟是自己自学的 也希望大哥大姐们也教教我。

PL/SQL是一种块结构的语言,它解决sql所不能解决的问题。
块得好处:sql语句是一条一条的执行 当系统复杂的时候(网络资源不好)总是要到服务器来回
而块一次封装sql语句,以块得方式执行。

 

pl/sql格式

declare
申明变量
begin
执行部分
[exception ex]
异常处理部分
end

PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以多行,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。
每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。


分支语语句
if判断语句

if 表达式 then
执行语句
elsif 表达式 then
执行语句
else
执行语句
end if(结束)

 

case表达式

case 表达式
when 'A' then 执行语句
when 'B' then 执行语句
when 'C' then 执行语句
else(相当c语言的defalut)
执行语句
end case;
case语句的功能:首先设定变量的值作为条件,然后顺序检查表达式,一旦从中找到与条件匹配的表达式值,就停止CASE语句的处理。

for while
一、for  变量  in  开始数值...结束数值 loop     end loop;
二、while 条件 loop       end  loop;

 


例子:
declare
sp number(10);
begin
select count(1) into sp  from t_sp;
if(sp>23) then
dbms_output.put_line('sp的值:'||sp);
elsif (sp>44) then
dbms_output.put_line('sp的值:'||sp);
else
dbms_output.put_line('sp的_值:'||sp);
end if;
end;
输出结果:sp的d值:21

 

declare
sp number(10);
begin
select count(1) into sp  from t_sp;
case sp
when 1 then
dbms_output.put_line('sp的值:'||sp);
when 2 then
dbms_output.put_line('sp的值:'||sp);
else
dbms_output.put_line('sp的值:'||sp);
end case;
end;
输出结果:sp的d值:21

 


declare
  sp number(10);
begin
  select count(1) into sp from t_sp;
  while (sp<80)
  loop
  sp:=sp+10;
      dbms_output.put_line('sp的值是:' || sp);
    end loop;
  end;

 

 

declare
  sp number(10);
begin
  select count(1) into sp from t_sp;
  for sp in 1 .. 8 loop
      dbms_output.put_line('sp的值是:' || sp);
    end loop;
  end;

sp的值是:1
sp的值是:2
sp的值是:3
sp的值是:4
sp的值是:5
sp的值是:6
sp的值是:7
sp的值是:8


--游标 通俗的话
简单的说。。就是oracle不允许定义数组,
查找出来的数据是一个大集合的话就需要使用游标进行遍历打印。


1申明游标
declare cursor 名称 is select .....
--申明了游标 并将游标和查询关联
2 打开游标
open 名称(上面定义的游标名称)
3 从游标取数据
fetch 变量 into(结果集合里面的数据) 个人理解(从集合里面循环取数据并赋值给变量)
close 名称

1)%ISOPEN属性
  该属性功能是测试游标是否打开,如果没有打开游标就使用fetch语句将提示错误。
  2)%FOUND属性
  该属性功能是测试前一个fetch语句是否有值,有值将返回true,否则为false。
  3)%NOTFOUND属性
  该属性是%found属性的反逻辑,常被用于退出循环。
  4)%ROWCOUNT属性
  该属性用于返回游标的数据行数。

例子:


declare
sp varchar2(10);
cursor c_sp is
  select sp from t_sp s where s.cityid < 5;
begin
  open c_sp;
  fetch c_sp
    into sp;
  while c_sp %found loop
    fetch c_sp
      into sp;
    dbms_output.put_line('我是游标:' ||sp );
  end loop;
  close c_sp;
end;
输出结果:

我是游标:
我是游标:
我是游标:
我是游标:
为什么sp的值是空呢?谁能告诉我啊??

对游标我是这理解的

首先得到一个集合(集合不为空)将里面的数据输出 ,我们则需要利用游标遍历集合 依次将数据打印出来?我的理解对吗  大哥大姐们?

 

 

 

 

declare
    sp int;
    cursor c_sp is select cityid from t_sp s;
begin
    --加一个这个dbms_output.enable(99999999999999);
    dbms_output.enable(99999999999999);
    open c_sp;
    loop
        fetch c_sp into sp;
        exit when c_sp%notfound;
       
        dbms_output.put_line('我是游标:' || sp);
    end loop;
    close c_sp;
end;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值