/*
子程序:有名字的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;
存储过程procedure:oracle15(跟着宝哥学java:oracle系列:全网最全):存储过程、plsql、procedure
最新推荐文章于 2023-05-11 14:05:36 发布