入门级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 条评论
登录 后参与评论

相关文章

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

SQL Server 2008 新语法

881
来自专栏WebDeveloper

Mysql数据库应用(一)

1532
来自专栏calmound

操作数据表

打开数据库    use 数据库 ---- use mydata 查看数据库    show databases 显示当前用户打开的数据库   SELECT ...

3116
来自专栏乐沙弥的世界

使用DBMS_REDEFINITION在线切换普通表到分区表

      随着数据库数据量的不断增长,有些表需要由普通的堆表转换为分区表的模式。有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区...

902
来自专栏ml

行受影响 是什么意思

这就是说明你写的语句没问题,此句实现插入一条name为a kecheng为d fenshu为d  的数据 说明你插入的数据成功... CREATE TABLE ...

3055
来自专栏SpringBoot

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

1294
来自专栏Java呓语

第13.1.1章 语法解释ALTER DATABASE

ALTER DATABASE 允许修改数据库的特征,所有关于数据库的特征都存储在db.opt文件中。你必须先具备该数据库的ALTER特权,才能完成对数据库的AL...

721
来自专栏吴伟祥

建表模版SQL 原

752
来自专栏深度学习之tensorflow实战篇

SQl 语句(常见) 新建,删除,修改表,新增字段,修改默认值

SQl 语句(常见) 新建,删除,修改表结构 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIM...

3009
来自专栏Python攻城狮

PostgreSQL语法、连接

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

1051

扫码关注云+社区