首页 > 数据库 >Oracle过程

Oracle过程

时间:2023-02-05 11:31:08浏览次数:36  
标签:end num1 num3 -- number Oracle avg 过程

--过程:类似于Java中的无返方法
--示例1:过程的基本语法
create or replace procedure 过程名(
[参数1 类型(不要长度), 参数2 类型,....]
) is/as
[局部变量1 类型(要长度);
局部变量2 类型(要长度);
.....
]
begin
可执行代码
[exception]
end;
--调用过程
DECLARE
BEGIN
过程名(参数);
END;




--示例2 根据编号,查询某给用户的姓名和年龄:tem_user
create or replace procedure getUserInfo(
no number
) is
name VARCHAR2(20);
age number(10);
begin
select "Name","Age" into name,age
from "tem_user"
where "UserNo"=no;
DBMS_OUTPUT.PUT_LINE(no||'号的用户的姓名是:'||name||',年龄是:'||age);
end;

DECLARE
v_no number(4) :=1002;
begin
getUserInfo(v_no);
end;


--示例3 向tem_user中添加一个记录
create or replace procedure addUser(
no number,name varchar2,age number
)is
BEGIN
insert into "tem_user" VALUES(no,name,age);
END;

BEGIN
-- addUser(1005,'小白龙',100);
-- addUser(no=>1006,name=>'白骨精',age=>300);
addUser(no=>1007,age=>800,name=>'太上老君');
END;


--示例4 用不同的传参方式创建过程
--in:传入的参数
--out:传出的参数
--in out :又能传入、传出
--查询某一门课程的平均分,如果小于90则加10分,输出更新后的平均分
create or replace procedure calcuAvg(
subNo in number,avg out number,num in out number
)is
v_avg number(4);
begin
select AVG("StudentResult") into v_avg
from "Result" where "SubjectNo"=subNo;

avg :=v_avg;

IF v_avg<90 then
num:= v_avg+num;
end IF;
end;

DECLARE
v_num1 number(4) :=2;
v_num2 number(4);
v_num3 number(4) :=10;
BEGIN
calcuAvg(v_num1,v_num2,v_num3);
DBMS_OUTPUT.PUT_LINE(v_num1||'号课程的原平均分是:'||v_num2||',加分后的是:'||v_num3);
END;




--函数:类似于Java中的有返方法
--函数的基本语法
create or replace function 函数名(
型参列表
)return 返回值类型
is 返回值的名 返回值类型;
begin
--可执行的代码;
end;


--示例5 数学运算
create or replace function calcu(
num1 number,num2 number,num3 number
)return number
is result number;
begin
result :=(num1+num2)*num3;
return result;
end;

DECLARE
v_num1 number(4) :=10;
v_num2 number(4) :=20;
v_num3 number(4) :=30;
BEGIN
DBMS_OUTPUT.PUT_LINE('运算结果是:'||calcu(v_num1,v_num2,v_num3));
END;


--示例6 统计参加了某门考试的人数
create or replace function getCount(
subNo number :=2 --函数可以直接给变量赋值,过程不可以
)return number is person_count number;
begin
select count(1) into person_count
from "Result" where "SubjectNo"=subNo;
return person_count;
end;

BEGIN
DBMS_OUTPUT.PUT_LINE('2号课程的考试人数是:'||getCount());
END;


--删除过程与函数
drop procedure getUserInfo;
drop FUNCTION getCount;


--用函数改造示例4
create or replace procedure calcuAvgFunc(
subNo number,avg number
)ruturn number is avg_value number;
begin
select AVG("StudentResult") into v_avg
from "Result" where "SubjectNo"=subNo;

ruturn avg_value;
end;

DECLARE
v_num1 number(4) :=2;
v_num3 number(4) :=10;
v_result number(4);
v_result2 number(4);
BEGIN
avg_value :=calcuAvgFunc(v_num1,v_num2,v_num3);
IF avg_value<90 then
avg_value:= avg_value+v_num3;
end IF;
DBMS_OUTPUT.PUT_LINE(v_num1||'号课程的原平均分是:'|| ||',加分后的是:'||v_num3);
END;

标签:end,num1,num3,--,number,Oracle,avg,过程
From: https://blog.51cto.com/u_15907719/6038246

相关文章

  • linux引导过程与服务控制
    linux引导过程与服务控制一、引导过程总览开机自检(BIOS)---->MBR引导---->GRUB菜单---->加载内核---->init进程初始化1.开机自检服务器主机开机以后,将根据主......
  • Linux操作系统引导过程及故障修复
    1、引导过程总览1.开机自检服务器主机开机以后,将根据主板BIOS中的设置对CPU(CentralProcessingUnit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预......
  • [Oracle19C 数据库管理] 配置数据库审计
    以下内容未经整理占位强制审计:无法关闭此审计,比如记录数据库的开启和关闭。标准审计:基于值得审计:创建触发器,基于值进行记录。Trigger占用资源多细粒度审计:加一些where......
  • EMR SQOOP 测试过程纪录
    1、sqoop定义Sqoop是一款开源的工具,主要用于在Hadoop和传统数据库(MySQL、PostgreSQL等)之间进行数据传递,可以将一个关系型数据库(例如MySQL、Oracle、Postgres等)中的数......
  • Oracle视图、事务
    --1、视图view--创建视图createorreplaceviewv_stuasselect"StudentNo","StudentName","Phone","Address"from"Student";select*fromv_stu;--查询视图dropvie......
  • 记一次使用gdb诊断gc问题全过程
    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章《GC耗时高,原因竟是服务流量小?》然而,过了......
  • Vulnhub之Looz靶机详细测试过程
    Looz识别目标主机IP地址(kali㉿kali)-[~/Vulnhub/Looz]└─$sudonetdiscover-ieth1-r192.168.56.0/24Currentlyscanning:192.168.56.0/24|ScreenView:......
  • 998-搭建一台私用服务器全过程
    服务器U盘安装Ubuntu制作一个Ubuntu安装盘DELL服务器F11进入BOOTManager,选择U盘启动按照安装引导安装即可安装过程中两点分区,根据服务器的用途考虑给多少空间,我这里默认创......
  • Oracle 删除表空间回收磁盘空间
    1、查询表空间和表空间数据库文件路径SQL>select*fromdba_data_files;2、删除表空间SQL>droptablespace表空间名称;3、再次查询表空间的数据库文件对应表空间名称是......
  • java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数
    一、前言oracle和mysql的groupby分组功能大家应该清楚,那如何使用java实现同样的功能呢比如下面这个表idnameagemathEnglish10yujianlin2092.5103ww841025201026110363103......