入门级Oracle存储过程 | oracle

-- 第一个存储过程 hello world
CREATE OR REPLACE PROCEDURE sayHello
AS
  word VARCHAR2(10) := 'hello';
  BEGIN
    dbms_output.put_line(word);
  END;
--Execute
BEGIN
  sayHello();
END;


-- 创建学生表
CREATE TABLE student (
  uuid     NUMBER(6, 0) PRIMARY KEY,
  username VARCHAR2(10),
  tuition  NUMBER(6, 0)
);

-- insert values
INSERT INTO student (uuid, username, tuition) VALUES (10001, 'alic', 5000);
INSERT INTO student (uuid, username, tuition) VALUES (10002, 'feng', 8000);
SELECT *
FROM student;

-- 实现带参数的存储过程
-- 学生学费涨价100 前后的金额
CREATE OR REPLACE PROCEDURE upTuition(id IN NUMBER)
AS
  curTuition student.tuition%TYPE;
  BEGIN
    select tuition into curTuition from student where uuid=id;
    update student set tuition=tuition+1000 WHERE uuid=id;

    -- print
    DBMS_OUTPUT.PUT_LINE('before:'||curTuition||';after:'||(curTuition+1000));
  END;

--Execute
BEGIN
  upTuition(10001);
END;


-- 存储函数
-- 根据学生的id查询学生的名字
create or replace function getStuNameById(id in number)
  return varchar2
  as
  usr student.username%type;
  BEGIN
    select username into usr from student where uuid=id;
    return usr;
  END;


-- in out 参数的存储过程
-- 根据学生的uuid获取姓名和学费
create or replace procedure getStuMsg(id in number,stuName out varchar2,stuTuition out number)
  as
  begin
    select username,tuition into stuName,stuTuition from student;
  end;


-- 使用光标 包头 包体
-- 获取所有的学生的所有信息
-- 包头
CREATE OR  REPLACE PACKAGE stuPackage
  AS
  TYPE stuList IS REF CURSOR ;
  PROCEDURE queryStuList(students out stuList);
  END stuPackage;
-- 包体
CREATE OR REPLACE PACKAGE BODY stuPackage
  AS
  PROCEDURE queryStuList(students out stuList)
    AS
    BEGIN
      -- 打开光标
      OPEN students FOR SELECT * FROM student;
    END queryStuList;
  END stuPackage;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

新闻数据库分表案例

文章节选自《Netkiller Architect 手札》 6.3. 新闻数据库分表案例 这里我通过一个新闻网站为例,解决分表的问题 避免开发中经常拼接表,我采...

3666
来自专栏乐沙弥的世界

Oracle 分区索引

    分区索引(或索引分区)主要是针对分区表而言的。随着数据量的不断增长,普通的堆表需要转换到分区表,其索引呢,则对应的转换到分区索引。分区索引的好处是显而易...

701
来自专栏跟着阿笨一起玩NET

SQL Server 2008 新语法

591
来自专栏WebDeveloper

Mysql数据库应用(一)

1172
来自专栏开源优测

SQL常用的基础语法

SQL常用的语法 本文主要分享SQL日常使用过程中常用的语法样式。 在sql语句中,主要的关键词有SELECT、INSERT、UPDATE、DELETE、ALE...

3128
来自专栏Python攻城狮

PostgreSQL语法、连接

博客地址:https://ask.hellobi.com/blog/zhiji 欢迎大家来交流学习。

921
来自专栏别先生

mysql根据分组和条件查询以后如何统计记录的条数

1、子查询,查询出的数据随便起一个别名,然后根据分组和条件查询出的数据,作为一个具有一列的一个表,然后外面的查询查询这个数据表的这一列的总数,即可。    

822
来自专栏Java后端生活

MySQL(十三)DDL之库和表的管理

1664
来自专栏SpringBoot

MySQL避免插入重复记录:唯一性约束

864
来自专栏www.96php.cn

mysql 快速生成百万条测试数据

1、生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 2、创建内存表及普通表 CREATE T...

53512

扫码关注云+社区