Oracle 存储过程语法

news2024/11/23 3:18:15

Oracle 存储过程语法

1. 创建表(测试数据准备)

-- 创建用户表
create table TT_USER
(
  USERID   NUMBER(10),
  USERNAME VARCHAR2(255),
  PASSWORD VARCHAR2(255),
  SEX      VARCHAR2(1)
);

INSERT INTO TT_USER VALUES (101, 'zhang', '111', '1');
INSERT INTO TT_USER VALUES (102, 'han', '222', '2');
INSERT INTO TT_USER VALUES (103, 'hui', '333', '2');
INSERT INTO TT_USER VALUES (104, 'fang', '444', '1');
INSERT INTO TT_USER VALUES (105, 'li', '555', '2');
INSERT INTO TT_USER VALUES (106, 'cheng', '666', '1');
INSERT INTO TT_USER VALUES (107, 'zhao', '777', '0');

select * from TT_USER;


-- 创建学生表
CREATE TABLE student(sids number(11) NOT NULL,
                     sname varchar(10),
                     score float,
                     sex char(1),
                     addr varchar(10));

INSERT INTO student VALUES (101, 'zhang', 98, '2', '苏州');
INSERT INTO student VALUES (102, 'han', 69, '1', '西安');
INSERT INTO student VALUES (103, 'hui', 72, '1', '苏州');
INSERT INTO student VALUES (104, 'fang', 100, '2', '苏州');
INSERT INTO student VALUES (105, 'li', 88, '1', '北京');
INSERT INTO student VALUES (106, 'cheng', NULL, '1', '北京');
INSERT INTO student VALUES (107, 'zhao', NULL, '3', '北京');

select * from student;

-- 创建学生表1
CREATE TABLE student1(sids number(11) NOT NULL,
                      sname varchar(10),
                      score float,
                      sex char(1),
                      sage number(10),
                      addr varchar(10));

INSERT INTO student1 VALUES (101, 'zhang', 98, '2', 15, '苏州');
INSERT INTO student1 VALUES (102, 'han', 69, '1', 30, '西安');
INSERT INTO student1 VALUES (103, 'hui', 72, '1', 25, '苏州');
INSERT INTO student1 VALUES (104, 'fang', 100, '2', 35, '苏州');
INSERT INTO student1 VALUES (105, 'li', 88, '1', 45, '北京');
INSERT INTO student1 VALUES (106, 'cheng', NULL, '1', 12, '北京');
INSERT INTO student1 VALUES (107, 'zhao', NULL, '3', 23, '北京');
select * from student1;

-- 创建用户表
CREATE TABLE user_info(
       user_id number(11) NOT NULL,
       user_name varchar(10),
       user_password varchar(20),
       date_time date,
       create_time timestamp,
       update_time timestamp
      );
-- drop table user_info;
                      
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(8,'李一','123456',to_date('2023-01-02','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(2,'王五','123456',to_date('2015-12-20','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(3,'田七','123456',to_date('2018-09-22','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(4,'赵八','123456',to_date('2021-10-21','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(5,'王二','123456',to_date('2020-05-20','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(6,'李四','123456',to_date('2022-05-16','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(7,'赵云','123456',to_date('2023-12-23','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);
insert into USER_INFO (user_id,user_name,user_password,date_time,create_time,update_time) values(8,'黄忠','123456',to_date('2017-12-28','yyyy-mm-dd'),SYSTIMESTAMP,SYSTIMESTAMP);

select * from user_info;

2. 创建存储过程

2.1 MyDemo01 - 无参传递实例

-- 无参数传递,打印信息
create or replace procedure MyDemo01 is
begin
  dbms_output.put_line('hello word, my name is stored procedure');
end;

-- 调用存储过程操作(sql窗口)
call MyDemo01();

2.2 myDemo02 - 有参传递实例1

-- 有参数传递 输入参数 in
create or replace procedure myDemo02(name in varchar,age in int) is
begin
  dbms_output.put_line('name='||name||', age='||age);
end MyDemo02;

-- 调用存储过程操作
call MyDemo02('zhu',20);

2.3 myDemo03 - 有参传递实例2

-- 有参数传递 输出参数 out
create or replace procedure myDemo03(name out varchar,age in int) is
begin
    dbms_output.put_line('age='||age);
    select 'zhu' into name from dual;
end;

-- 调用存储过程操作
declare
   name varchar(10);
   age int;
begin
   myDemo03(name=>name,age=>25);
   dbms_output.put_line('name='||name);
end;

myDemo03 输出结果:

在这里插入图片描述

注:in 表示输入参数;out 表示输出参数

2.4 myDemo04 - 异常处理存储过程

-- 异常处理 exception
create or replace procedure myDemo04
as
age int;
begin
  age:=1/0;
  dbms_output.put_line(age);
  --异常
  exception when others then
    dbms_output.put_line('error');
end;

-- 调用存储过程操作
call myDemo04();
-- 程序分析:程序出现异常,将打印 error

2.5 myDemo05 - while 循环存储过程实例

-- while 循环
create or replace procedure myDemo05
as
  n_count number := 0;
begin
  while n_count < 5 loop
    dbms_output.put_line(n_count);
    n_count := n_count + 1;
  end loop;
end;

-- 调用存储过程操作
call myDemo05();

输出结果:

​ 0
​ 1
​ 2
​ 3
​ 4

2.6 myDemo06 - for 循环存储过程实例
-- for 循环
create or replace procedure myDemo06
as
begin
 FOR USE in (select * from student1) loop
     if (USE.sids<108) then
        dbms_output.put_line(USE.sname);
      end if;
  end loop;
end;

-- 调用存储过程操作
begin
  myDemo06;
end;

输出结果:

​ aaa
​ 李太白
​ 战三
​ 张三
​ 李四
​ 王五
​ 赵六
​ 朱八

2.7 mydemo07 - 增删改查存储过程实例
-- 增删改
create or replace procedure mydemo07(sidss in int, sname in varchar,score in int, sex in char,sage in int,addr in varchar)
as
begin
     --insert into student1 VALUES(sids,sname,score,sex,sage,addr);
     UPDATE  student1 t SET t.sname='狗蛋' WHERE t.sids=sidss ;
     --DELETE  student1 t WHERE t.sids=sids ; 
    commit; --提交
end MyDemo07;

-- 调用存储过程操作
begin
mydemo07(101, '', 120, '1', 20, '');
end;

2.8 myDemo08 - if 语句
-- 根据用户id判断用户是否存在
create or replace procedure myDemo08(pid in number,ret out number)
as
flag number;
begin
  select count(1) into flag from student1 where sids = pid;
  if flag = 1 then
    dbms_output.put_line(pid||'用户存在');
    ret:=1; -- 如果用户存在就把ret设为1
  else
    dbms_output.put_line(pid||'用户不存在');
    ret:=0; -- 如果用户不存在就把ret设为0
  end if;
end;

-- 测试 myDemo08 存储过程
declare
 input number(11):=101;
 ret number; -- 声明一个变量ret,类型是number,用来存储过程的输出值
begin
  MyDemo08(input,ret); -- 获取到过程的输出值存储在ret中
  dbms_output.put_line('存储过程返回值:' ||ret);
end;

输出结果:

​ 101用户存在
​ 存储过程返回值:1

3. 存储过程常用语法实例

-- when
declare 
  i int:= 0;
begin
  loop
    i:=i+1;
    dbms_output.put_line(i);
    EXIT WHEN i > 3;
  END LOOP;
end;
-- 输出结果:
            1
            2
            3
            4
        
-- 使用Loop+游标的时候,取游标当中的值,必须重新赋值一遍,要不然会报错。
declare
  cursor user is
    select * from user_info;
  user1 user_info%rowtype;
begin
  open user;
  loop
    fetch user into user1;
    exit when user%notfound;
    dbms_output.put_line('用户名称:' || user1.USER_NAME);
    dbms_output.put_line('用户年龄:' || user1.user_id);
  end loop;
  close user; --关闭游标
end;
-- 输出结果:
            用户名称:李六
            用户年龄:1
            用户名称:李一
            用户年龄:8
            用户名称:王五
            用户年龄:2
            用户名称:田七
            用户年龄:3
            用户名称:赵八
            用户年龄:4
            用户名称:王二
            用户年龄:5
            用户名称:李四
            用户年龄:6
            用户名称:赵云
            用户年龄:7
            用户名称:黄忠
            用户年龄:8
-- WHILE语句:在执行之前,首先要判断条件表达式的值是否为true,true则执行循环体,否则退出WHILE循环,继续执行循环后面的代码。
declare
  i int := 0;
begin
  while i < 3 loop
    i := i + 1;
    dbms_output.put_line(i);
  end loop;
end;

-- 实例测试
declare
  cursor user is
    select * from user_info;
  user1 user_info%rowtype;
begin
  open user;
  fetch user into user1;
  while(user%found)loop
  dbms_output.put_line('用户名称:' || user1.USER_NAME);
  fetch user into user1;
  end loop;
end;
-- 注意:%found %notfound 用法

--FOR语句是一个可提前设置循环次数的循环控制语句,它有一个循环计数器,通常是一个整型变量,通过这个计数器来控制循环次数
for A IN (reverse) B...C LOOP
   D;
 END LOOP;

--A: 表示一个变量,通常为证书类型,用来作为计数器,默认值是递增的,当循环当中使用reverse关键字时,就会循环递减。
--B: 计数器下线值,当计数器的值小于下限值的时候,终止循环。
--C: 计数器上线值,当计数器的值大于上限值的时候,终止循环。
--D: 循环体。

declare 
  i int := 0;
begin
  for i IN reverse 1..5 LOOP
    dbms_output.put_line(i);
  END LOOP;
end;

-- 配合游标实例测试
declare
  cursor user is
    select * from user_info;
begin
  for user1 in user loop
  dbms_output.put_line('用户名称:'|| user1.USER_NAME);
  dbms_output.put_line('用户ID:'|| user1.USER_ID);
  end loop;
end;

游标实例测试 - 输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Win11校园网不弹出登录页面怎么回事?

Win11校园网不弹出登录页面怎么回事&#xff1f;最近有用户在使用校园网的时候遇到了一些问题&#xff0c;访问登录网站的时候&#xff0c;一直无法显示登录的界面。那么遇到这个情况如何去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法如下&#xff1a; 方…

【零基础学机器学习 2】 机器学习的实操步骤-以及在Python中实现机器学习模型

文章目录 1. 收集数据2. 准备数据3. 选择模型4. 训练模型5. 评估模型6. 参数调整7. 进行预测在Python中实现机器学习模型 机器学习是一种人工智能的分支&#xff0c;它使用算法和统计模型来让计算机系统自动地从数据中学习&#xff0c;并根据学习结果做出预测或决策。机器学习的…

智能双向嵌入式UART转CAN模块 串口 RS232 RS485 UART CAN转换器

CANUART-100TL系列智能双向UART转CAN模块具有一路TTL UART串口通道和一路CAN通道&#xff0c;实现CAN与串口 UART之间的双向数据智能转换。超小型灌封模块设计&#xff0c;方便用户集成到电路板上&#xff0c;快速通过MCU的UART口扩展CAN通道。 智能双向UART转CAN模块提供“…

Docker高级:Compose 容器编排

目录 一、Docker Compose 概述二、使用 Docker Compose三、常用命令四、编排微服务Ⅰ、搭建微服务Ⅱ、编写Dockerfile构建镜像Ⅲ、启动容器&#xff0c;测试服务Ⅳ、使用Compose编排容器 五、总结 一、Docker Compose 概述 Compose 是Docker公司推出的一个软件&#xff0c;可以…

跟着我学 AI丨AIGC,自媒体的核武器

自从 ChatGPT 火爆全网之后&#xff0c;AI 相关概念的热度就一直持续高涨不下&#xff0c;尤其是大众都在关注的 AI 的应用场景方向&#xff0c;更是疯狂。无论是 AI 圈内人还是以前对 AI 完全没有认知的人&#xff0c;都想借助 AI 挣上一笔。目前来说最受关注的 AI 应用场景&a…

阿里云数据库ClickHouse产品和技术解读

摘要&#xff1a;社区ClickHouse的单机引擎性能十分惊艳&#xff0c;但是部署运维ClickHouse集群&#xff0c;以及troubleshoot都不是很好上手。本次分享阿里云数据库ClickHouse产品能力和特性&#xff0c;包含同步MySQL库、ODPS库、本地盘及多盘性价比实例以及自建集群上云的迁…

kubernetes中Pod介绍

目录 kubernetes的作用 k8s核心资源pod Pod如何管理多个容器&#xff1f; Pod网络 k8s中容器的共享方式 Pod存储 已经学习了docker为什么还要学习Pod Pod与Docker之间的关系 Pod的优势 收集业务日志 pod工作方式 自主式&#xff08;不推荐&#xff09; yaml文件详解…

内存和闪存介绍

主要分为两类&#xff1a;内存和闪存&#xff0c;内存的数据掉电会丢失&#xff0c;闪存的数据掉电不会丢失。 内存&#xff1a;SRAM、RAM、SDRAM、DDR 闪存&#xff1a;ROM、FLASH、EMMC RAM&#xff1a;Random Access Memory 随机存储器&#xff0c;又分为&#xff1a;SRAM…

科士达为绿色世界 提供多维度低碳新动能

2023年5月11日&#xff0c;“数据中心绿色发展大会”围绕节能降碳绿色赋能主题&#xff0c;在成都如期召开。作为国内数据中心行业的翘楚&#xff0c;科士达应邀参加了大会,与会代表高级售前沈凤文带来了题为《为绿色世界 提供多维度低碳新动能》的精彩演讲。 在“双碳”目标引…

『手撕 Mybatis 源码』02 - 加载配置文件

加载配置文件 获取输入流 myBatis 的配置文档层次架构 首先从读入开始查看是怎么加载配置文件的&#xff0c;现在从这里打个断点 public class MybatisTest {Testpublic void test1() throws IOException {// 1. 通过类加载器对配置文件进行加载&#xff0c;加载成了字节输入…

MidJourney中国版开放内测;70款ChatGPT插件全评测;盘点181家海外AI创业公司;GPT+科研工作流 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『左耳朵耗子 | 享受编程和技术带来的快乐』Coding Your Ambition CoolShell 是陈皓创建的技术共享平台&#xff0c;主题非常广泛&…

加密解密软件VMProtect教程(五):主窗口之主菜单

VMProtect 是保护应用程序代码免遭分析和破解的可靠工具&#xff0c;但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。 接下来为大家介绍关于VMProtect中主菜单的功能介绍&#xff0c;包括文件、编辑、项目、工具和帮助。 &…

基于SSM+JSP的人体健康信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

PV270R1K1T1WMMC_PARKER轴向柱塞泵

PV270R1K1T1WMMC_PARKER轴向柱塞泵 柱塞泵分类 PARKER柱塞泵根据倾斜元件的不同&#xff0c;有斜盘式和斜轴式两种。斜盘式是斜盘相对回转的缸体有一倾斜角度&#xff0c;而引起柱塞在泵缸中往复运动。传动轴轴线和缸体轴线是一致的。这种结构较简单&#xff0c;转速较高&…

Git教程(二)

工作区和暂存区 工作区&#xff08;Working Directory&#xff09; learngit 文件夹就是一个工作区。 版本库&#xff08;Repository&#xff09; 工作区有个隐藏目录 .git &#xff0c;这个不算工作区&#xff0c;而是 Git 的版本库。 版本库里面的 index(stage) 文件叫暂…

掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】

&#x1f618; 目录 00【前言】 01【大数据学习路线&#xff08;快速版&#xff09;】 02【视频地址&资料下载】 03【课程笔记】 001-Linux 002-Hadoop 003-Zookeeper 004【Scala】 005【Spark】 006【Nifi】 007【kafka】 008【flink】 00【前言】 都是公开的…

“深入探索SDL游戏开发“

前言 欢迎来到小K的SDL专栏第二小节&#xff0c;本节将为大家带来基本窗口构成、渲染器、基本图形绘制、贴图、事件处理等的详细讲解&#xff0c;看完后希望对你有收获 文章目录 前言一、简单窗口二、渲染器三、基本图形绘制1、点2、线3、矩形4、圆和椭圆 四、贴图五、事件处理…

Java经典笔试题—day09

Java经典笔试题—day09 &#x1f50e;选择题&#x1f50e;编程题&#x1f95d; 另类加法&#x1f95d;走方格的方案数 &#x1f50e;结尾 &#x1f50e;选择题 (1)下面程序的输出是 ( ) String x“fmn”; x.toUpperCase(); String yx.replace(‘f’,‘F’); yy“wxy”; Syste…

数据结构lab3-图型结构的建立与搜索

title: 数据结构lab3-图型结构的建立与搜索 date: 2023-05-16 11:42:26 tags: 数据结构与算法 课程名称&#xff1a;数据结构与算法 课程类型&#xff1a;必修 实验项目&#xff1a;图型结构的建立与搜索 实验题目&#xff1a;图的存储结构的建立与搜索 实验日期&#xff1…