现有以下学生表:
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);
分享到:
相关推荐
很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会。现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考。 案例介绍: 招投标管理系统(数据库设计)。 数据表有...
在Oracle数据库系统中,行ID(也称为序列号或序列)是用于...在实际应用中,还可以考虑其他方法,如使用序列函数直接在插入语句中生成ID,或者使用数据库的内置特性如 identity column(在Oracle 12c及以上版本支持)。
Oracle数据库中的存储过程和触发器是数据库编程的重要组成部分,用于执行复杂的业务逻辑和数据操作。在本实例中,我们将探讨如何创建和使用这两个特性。 首先,存储过程是预编译的SQL和PL/SQL代码集合,可以在需要...
CREATE TRIGGER用于创建触发器,PROCEDURE和FUNCTION分别用于定义过程和函数,这在数据库业务逻辑实现中至关重要。 11. **序列函数**: NEXTVAL和CURRVAL用于获取序列的下一个和当前值,序列在自增主键生成方面...
在Oracle数据库系统中,主键(Primary Key)是表中的一个或一组字段,它们的值在整张表中是唯一的,用于唯一标识每一条记录。然而,与MySQL等其他数据库不同,Oracle并没有内置的自动递增(auto-increment)功能来...
本篇将详细探讨由C#语言编写的安泰家具销售系统的源码以及数据库中的脚本,包括包、存储过程、序列、函数和触发器等核心组件。这些元素构成了系统的数据处理与业务逻辑,为企业的日常运营提供了高效的支持。 首先,...
除了使用序列实现自增主键外,Oracle还提供了其他几种主键生成策略,比如使用`SYS_GUID()`函数生成全局唯一标识符(GUID)作为主键。这种方法适用于需要全局唯一性的场景,但可能不适合对性能要求较高的应用,因为`...
Oracle数据库中的存储过程和触发器是数据库编程的重要组成部分,它们被广泛用于数据处理、业务逻辑控制以及自动化数据复制。在本场景中,我们探讨的是如何使用存储过程来复制数据,特别是涉及ICP(互联网内容提供商...
在Oracle数据库中,为了实现表中某个字段的自动递增功能,通常会使用序列(sequence)结合触发器(trigger)的方式来完成。这种方式不仅能够确保数据的一致性和完整性,还能提高数据处理效率。本文将详细解释如何...
总结来说,Oracle数据库表序列ID自增生成器结合了序列和触发器的概念,实现了主键ID的自动增长。这种机制在处理大量数据和并发操作时,能确保数据的完整性和一致性。了解并熟练运用这些知识点,对于进行高效的Oracle...
序列可以用来生成表的主键、自动编号等。Oracle 提供了多种序列类型,包括整数序列、字符串序列等。 游标 游标是一个指向表或视图的指针,用于读取和操作数据。游标可以用来实现高性能的数据查询和操作。Oracle ...
MySQL到Oracle转换是一个常见的任务,特别是在企业级应用迁移或整合过程中。这个工具专注于将MySQL的数据库结构和数据转换为Oracle数据库兼容的格式。下面将详细解释这个过程涉及的知识点。 1. **SQL语言的差异**:...
Oracle购物系统是一个全面的数据管理平台,它包含了数据库设计的核心元素,如表、视图、序列、触发器、程序包等,这些都是构建复杂业务逻辑和高效数据处理的关键组件。以下是对这些概念的详细解释: 1. **表**:在...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初学者来说,掌握Oracle基础知识是迈进数据库管理领域的关键步骤。本篇将详细讲解Oracle的基础知识,帮助你从零开始...
在Struts2中集成Oracle数据库的过程调用,能够实现复杂的业务逻辑和数据处理。 首先,我们要理解Struts2中的Action类。Action类是业务逻辑的核心,它接收用户的请求,执行相应的业务操作,并将结果返回给视图层。...
然而,随着应用需求的多样化,GKD-Base 在某些方面显得不足,比如不支持过程式SQL语言、无存储过程和函数、缺乏主键/外键约束以及触发器功能。这些不足在一定程度上限制了GKD-Base的进一步推广和应用。 为了解决...