`
chensunhao
  • 浏览: 11610 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle中使用函数、存储过程、触发器实现业务主键编号

阅读更多

现有以下学生表:

SQL> select * from t_stu;

SID      SNAME       CID
-------- ---------- ----

先需要对学生的学号进行定义,规则是两位年份+三位班级号+三位流水号(不够位数的用0补)。

 

在这里可以通过自定义一个函数来得到学号:

CREATE OR REPLACE FUNCTION f_get_stuno(p_cid NUMBER)
RETURN VARCHAR2
AS
  v_no VARCHAR2(8);
  v_count NUMBER;
BEGIN
  v_no := to_char(SYSDATE,'yy'); 
  v_no := v_no || lpad(p_cid,3,0);
  SELECT COUNT(*)+1 INTO v_count FROM t_stu WHERE cid=p_cid;
  v_no := v_no || lpad(v_count,3,0);
  RETURN v_no;
END;

 这样在存储过程中添加学生就可以直接调用:

CREATE OR REPLACE PROCEDURE sp_add_stu(
  p_sname t_stu.sname%TYPE,
  p_cid t_stu.cid%TYPE
)
AS
BEGIN
  INSERT INTO t_stu(sid,sname,cid)
  VALUES(f_get_stuno(p_cid),p_sname,p_cid);
  COMMIT;
END;
--测试
CALL sp_add_stu('a',2);

 使用触发器:

CREATE OR REPLACE TRIGGER tr_su_no
BEFORE INSERT
ON t_stu
FOR EACH ROW 
DECLARE
BEGIN
  :NEW.sid := f_get_stuno(:NEW.cid);
END;
--测试,只需执行普通SQL语句,该触发器就会被触发
INSERT INTO t_stu(sname,cid) VALUES('b',2);
 

 

2
0
分享到:
评论

相关推荐

    Oracle学习记录之使用自定义函数和触发器实现主键动态生成

    很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会。现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考。  案例介绍:  招投标管理系统(数据库设计)。  数据表有...

    oracle 触发器方式实现行ID自增加

    在Oracle数据库系统中,行ID(也称为序列号或序列)是用于...在实际应用中,还可以考虑其他方法,如使用序列函数直接在插入语句中生成ID,或者使用数据库的内置特性如 identity column(在Oracle 12c及以上版本支持)。

    Oracle存储过程和触发器实例

    Oracle数据库中的存储过程和触发器是数据库编程的重要组成部分,用于执行复杂的业务逻辑和数据操作。在本实例中,我们将探讨如何创建和使用这两个特性。 首先,存储过程是预编译的SQL和PL/SQL代码集合,可以在需要...

    oracle函数大全中文api文档

    CREATE TRIGGER用于创建触发器,PROCEDURE和FUNCTION分别用于定义过程和函数,这在数据库业务逻辑实现中至关重要。 11. **序列函数**: NEXTVAL和CURRVAL用于获取序列的下一个和当前值,序列在自增主键生成方面...

    Oracle中主键自增实例

    在Oracle数据库系统中,主键(Primary Key)是表中的一个或一组字段,它们的值在整张表中是唯一的,用于唯一标识每一条记录。然而,与MySQL等其他数据库不同,Oracle并没有内置的自动递增(auto-increment)功能来...

    c# 安泰家具销售系统 源码 + 数据库中脚本(包,存储过程,序列,函数,触发器等)

    本篇将详细探讨由C#语言编写的安泰家具销售系统的源码以及数据库中的脚本,包括包、存储过程、序列、函数和触发器等核心组件。这些元素构成了系统的数据处理与业务逻辑,为企业的日常运营提供了高效的支持。 首先,...

    ORACLE自增主键设置方法

    除了使用序列实现自增主键外,Oracle还提供了其他几种主键生成策略,比如使用`SYS_GUID()`函数生成全局唯一标识符(GUID)作为主键。这种方法适用于需要全局唯一性的场景,但可能不适合对性能要求较高的应用,因为`...

    oracle 存储过程和触发器复制数据

    Oracle数据库中的存储过程和触发器是数据库编程的重要组成部分,它们被广泛用于数据处理、业务逻辑控制以及自动化数据复制。在本场景中,我们探讨的是如何使用存储过程来复制数据,特别是涉及ICP(互联网内容提供商...

    创建Oracle触发器用于表中序列值自增长(Helloblock写作)

    在Oracle数据库中,为了实现表中某个字段的自动递增功能,通常会使用序列(sequence)结合触发器(trigger)的方式来完成。这种方式不仅能够确保数据的一致性和完整性,还能提高数据处理效率。本文将详细解释如何...

    Oracle数据库表序列ID自增生成器

    总结来说,Oracle数据库表序列ID自增生成器结合了序列和触发器的概念,实现了主键ID的自动增长。这种机制在处理大量数据和并发操作时,能确保数据的完整性和一致性。了解并熟练运用这些知识点,对于进行高效的Oracle...

    oracle讲解(表分区,视图,序列,游标,触发器等等)

    序列可以用来生成表的主键、自动编号等。Oracle 提供了多种序列类型,包括整数序列、字符串序列等。 游标 游标是一个指向表或视图的指针,用于读取和操作数据。游标可以用来实现高性能的数据查询和操作。Oracle ...

    Mysql转oracle工具

    MySQL到Oracle转换是一个常见的任务,特别是在企业级应用迁移或整合过程中。这个工具专注于将MySQL的数据库结构和数据转换为Oracle数据库兼容的格式。下面将详细解释这个过程涉及的知识点。 1. **SQL语言的差异**:...

    oracle 购物系统(包括表,视图,序列,索引,触发器,程序包,等等)

    Oracle购物系统是一个全面的数据管理平台,它包含了数据库设计的核心元素,如表、视图、序列、触发器、程序包等,这些都是构建复杂业务逻辑和高效数据处理的关键组件。以下是对这些概念的详细解释: 1. **表**:在...

    oracle基础

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初学者来说,掌握Oracle基础知识是迈进数据库管理领域的关键步骤。本篇将详细讲解Oracle的基础知识,帮助你从零开始...

    struts2+oracle过程调用

    在Struts2中集成Oracle数据库的过程调用,能够实现复杂的业务逻辑和数据处理。 首先,我们要理解Struts2中的Action类。Action类是业务逻辑的核心,它接收用户的请求,执行相应的业务操作,并将结果返回给视图层。...

    GKD-Base PL_SQL存储过程的设计与实现.pdf

    然而,随着应用需求的多样化,GKD-Base 在某些方面显得不足,比如不支持过程式SQL语言、无存储过程和函数、缺乏主键/外键约束以及触发器功能。这些不足在一定程度上限制了GKD-Base的进一步推广和应用。 为了解决...

Global site tag (gtag.js) - Google Analytics