存储过程procedure:oracle15(跟着宝哥学java:oracle系列:全网最全):存储过程、plsql、procedure

/*
子程序:有名字的plsql块
存储过程:过程procedure::没有返回值的子程序
函数:::::function::有返回值的子程序
子程序的优点:
            >模块化
                一个子程序代表一个完整的功能
           >复用性
                定义完后  可以通过名字直接来调用
           >提高维护性
                直接定位方法  维护起来方便简单
           >提高安全性 
                调用者只能看到子查询到的声明  无法干涉程序具体执行
                可以通过设置权限  只让可信任的用户进行操作此程序
存储过程的格式:
create or replace procedure
    存储过程名(参数列表)
as|is
    定义变量的语句
begin
    实现功能的具体代码
exception
    处理异常的代码
end;
*/

-- 获取1到n的和
create or replace procedure 
    pro_1(n int)
is
    sumn int:=0;
begin
   for m in 1..n loop
       sumn:=sumn+m;
   end loop;
   dbms_output.put_line('1到'||n||'的和::'||sumn);
end;
-- 调用存储过程:方式1:通过plsql块
begin
   pro_1(10);
end;
-- 调用存储过程:方式2:通过execute关键字:::但此方式在plsql developer中不识别
--                      通过oracle自带的客户端 sql plus来测试
--                      在sql plus中输入:set serverout on ; 开启oracle的系统输出流
execute pro_1(11);

-- 查询所有的存储过程
select * from user_procedures;
-- 删除存储过程
drop procedure pro_1;

-- 注意事项1:子程序的参数列表不能指定精度
-- 对参数字符串解析转换:大写转换为小写 小写转化为大写 删除数字字符
create or replace procedure
   pro_2(str varchar)
is
   strNew varchar(100):='';
   c varchar(3);
begin
    for i in 1..length(str) loop
        c:=substr(str,i,1);
        if ascii(c) >=ascii('a') and ascii(c) <=ascii('z') then
            strNew:=strNew||upper(c);
        elsif ascii(c) >=ascii('A') and ascii(c) <=ascii('Z') then
            strNew:=strNew||lower(c);
        elsif ascii(c) >ascii('9') or ascii(c) <ascii('0') then
            strNew:=strNew||c; 
        end if;  
    end loop;
    dbms_output.put_line(str||'::'||strNew);
end;
-- 调用
begin
   pro_2('&请输入一个字符串:');
end;

--- 练习1:从1开始累加 判断加到几时 和第一次大于1000
--  注意事项2:存储过程 如果没有参数列表 ()省略
create or replace procedure
   pro_11
is
   sumn int:=0;
   n int:=1;
begin
   loop
       sumn:=sumn+n;
       if sumn > 1000 then
            exit;
       end if;
       n:=n+1;
   end loop;
   dbms_output.put_line('从1开始累加 判断加到'||n||'时 和第一次大于1000:::'||sumn);
end;
-- 调用
begin
   pro_11;
end;


--- 练习2:获取祖冲之计算到3.1415926到3.1415927时 计算的次数
create or replace procedure
   pro_12
is
   pi float:=0;
   ciShu int:=0;
   numPi float:=0;
begin
   while pi <3.1415926 or pi > 3.1415927 loop
       ciShu:=ciShu+1; --次数加1
       numPi:=4/(ciShu*2-1);  -- 每次的加数
       if mod(ciShu,2)=1 then
           pi:=pi+numPi;
       else
          pi:=pi-numPi;
       end if;
   end loop;
   dbms_output.put_line('获取祖冲之计算到3.1415926到3.1415927时 '||pi||'计算的次数:::'||ciShu);
end;
-- 调用
begin
   pro_12;
end;
--- 练习3: 输入一个字符串 打印其大小写转换 并删除数字后的结果

--- 练习4:获取1到10000内 所有的完数:n的所有因子之和等于n :如果m可以除尽n m就是n的因子  本身不是本身的因子
--           6: 1+2+3
create or replace procedure
   pro_14
is
  yinZiSum int:=0;
begin
  for n in 1..10000 loop
       yinZiSum:=0;
       -- 判断当前n是不是完数
       for m in 1..n-1 loop
          if mod(n,m)=0 then
               yinZiSum:=yinZiSum+m;
          end if;
       end loop;
       if yinZiSum=n then
            dbms_output.put_line(n||'是完数!');
       end if;
  end loop;
end;
-- 调用
begin
   pro_14;
end;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值