oracle 存储过程实现数据CURD操作
1.创建数据库表:
-- Create table
create table TEST_TABLE
(
userid NUMBER not null,
username NVARCHAR2(50),
userno NVARCHAR2(60),
cardid NVARCHAR2(18),
createdate DATE,
redate DATE
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 8
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table TEST_TABLE
is '??????';
-- Add comments to the columns
comment on column TEST_TABLE.userid
is 'id';
comment on column TEST_TABLE.username
is '用户名';
comment on column TEST_TABLE.userno
is '用户编号';
comment on column TEST_TABLE.cardid
is '身份证号';
comment on column TEST_TABLE.createdate
is '创建日期';
comment on column TEST_TABLE.redate
is '修改日期';
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST_TABLE
add constraint USERID primary key (USERID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
2.创建sequences
-- Create sequence
create sequence S_TEST_TABLE
minvalue 1
maxvalue 9999999999999999999999
start with 21
increment by 1
cache 20;
3.创建触发器triggers
CREATE OR REPLACE TRIGGER Triger_test_table BEFORE INSERT
ON test_table FOR EACH ROW
DECLARE
INTEGRITY_ERROR EXCEPTION;
ERRNO INTEGER;
ERRMSG CHAR(200);
DUMMY INTEGER;
FOUND BOOLEAN; BEGIN
-- COLUMN "userid" USES SEQUENCE S_TEST_TABLE
SELECT S_TEST_TABLE.NEXTVAL INTO :NEW.userid FROM DUAL; -- ERRORS HANDLING
EXCEPTION
WHEN INTEGRITY_ERROR THEN
RAISE_APPLICATION_ERROR(ERRNO, ERRMSG);
END;
4.在包体中创建数据包名:在包中实现存储过程的实现。包头:
CREATE OR REPLACE PACKAGE SUNNY_PK IS -- AUTHOR : SUNNY
-- CREATED : 2014/4/7 13:49:11
-- PURPOSE : SUNNY_PK TYPE OUTPUTLIST IS REF CURSOR;
PROCEDURE SP_TEST_TABLEINSETUPDATE
(
VUSERID IN TEST_TABLE.USERID%TYPE DEFAULT NULL,
VUSERNAME IN TEST_TABLE.USERNAME%TYPE DEFAULT NULL,
VUSERNO IN TEST_TABLE.USERNO%TYPE DEFAULT NULL,
VCARDID IN TEST_TABLE.CARDID%TYPE DEFAULT NULL,
VRESULT OUT INT,
VERRORTEST OUT VARCHAR2,
DB_OPTION_ACTION IN VARCHAR2 DEFAULT NULL
); -- AUTHOR : SUNNY
-- CREATED : 2014/4/7 13:49:11
-- PURPOSE : SUNNY_PK 实现数据信息获取
PROCEDURE SP_GET_test_table
(
Vuserid INT,
VRETURN_LIST OUT OUTPUTLIST
);
END SUNNY_PK;
包体:
CREATE OR REPLACE PACKAGE BODY SUNNY_PK IS -- AUTHOR : SUNNY
-- CREATED : 2014/4/7 13:49:11
-- PURPOSE : SUNNY_PK 实现数据增删改
PROCEDURE SP_TEST_TABLEINSETUPDATE
(
VUSERID IN TEST_TABLE.USERID%TYPE DEFAULT NULL,
VUSERNAME IN TEST_TABLE.USERNAME%TYPE DEFAULT NULL,
VUSERNO IN TEST_TABLE.USERNO%TYPE DEFAULT NULL,
VCARDID IN TEST_TABLE.CARDID%TYPE DEFAULT NULL,
VRESULT OUT INT,
VERRORTEST OUT VARCHAR2,
DB_OPTION_ACTION IN VARCHAR2 DEFAULT NULL
)
IS
VCOUNT INT; BEGIN IF (UPPER(DB_OPTION_ACTION)='INSERT') THEN
SELECT COUNT(*) INTO VCOUNT
FROM TEST_TABLE
WHERE USERID = VUSERID
AND
(USERNO = VUSERNO
OR USERNAME = VUSERNAME); IF(VCOUNT > 0) THEN
VRESULT :=1;
VERRORTEST := '已存在該人员信息编号或人员名稱!';
RETURN;
END IF; INSERT INTO TEST_TABLE(USERNAME,
USERNO ,CARDID,CREATEDATE)
VALUES(VUSERNAME,
VUSERNO,
VCARDID,
SYSDATE
); END IF;
VRESULT :=0; IF(UPPER(DB_OPTION_ACTION)='UPDATE') THEN
SELECT COUNT(*) INTO VCOUNT
FROM TEST_TABLE
WHERE USERID <> VUSERID
AND USERID IN
(SELECT USERID FROM TEST_TABLE
WHERE USERID = VUSERID)
AND
(USERNO = VUSERNO
OR USERNAME = VUSERNAME); IF(VCOUNT > 0) THEN
VRESULT :=1;
VERRORTEST := '已存在該人员信息编号或人员名稱!';
RETURN;
END IF; UPDATE TEST_TABLE SET
USERNO=VUSERNO,
USERNAME=VUSERNAME,
CARDID=VCARDID,
REDATE=SYSDATE
WHERE (USERID = VUSERID);
VRESULT :=0;
END IF;
IF(UPPER(DB_OPTION_ACTION)='DELETE') THEN
DELETE FROM
TEST_TABLE WHERE USERID=VUSERID;
VRESULT:=0;
END IF;
COMMIT;
END; -- AUTHOR : SUNNY
-- CREATED : 2014/4/7 13:49:11
-- PURPOSE : SUNNY_PK 实现数据信息获取
PROCEDURE SP_GET_test_table
(
Vuserid INT,
VRETURN_LIST OUT OUTPUTLIST
)
IS
BEGIN
OPEN VRETURN_LIST FOR
SELECT userid, username,userno,cardid,createdate,redate FROM test_table WHERE
userid=Vuserid ;
END;
END SUNNY_PK;
5.根据用户编号递归实现获取部门信息
创建函数方法通过部门编号获取部门名称的函数
--通过部门编号获取部门名称的函数
create or replace function getdepartname(pdeptno in number )
return varchar2 is
vdname varchar2(50);
begin select dname into vdname from dept where deptno=pdeptno ;
return (vdname);
exception
when no_data_found then
-- dbms_output.put_line("没有改编号部门!");
return (null);
when too_many_rows then
-- dbms_output.put_line("有重复编号部门!");
return (null);
when others then
-- dbms_output.put_line("发生其他错误!");
return (null); end getdepartname;
存储过程:
-- AUTHOR : SUNNY
-- CREATED : 2014/4/7 13:49:11
-- PURPOSE : SUNNY_PK
--递归实现获取部门信息
PROCEDURE SP_GET_DEPARTMENT
(
Vempno INT,
VRETURN_LIST OUT OUTPUTLIST
)
IS
VGROUPID INTEGER DEFAULT 0;
BEGIN
SELECT deptno INTO VGROUPID FROM emp WHERE
empno = Vempno;
OPEN VRETURN_LIST FOR
SELECT GETDEPARTNAME(DEPTNO) GROUPNAME,DEPTNO FROM
(
SELECT DISTINCT DEPTNO FROM dept
CONNECT BY PRIOR DEPTNO=PARENTID
START WITH PARENTID=VGROUPID UNION SELECT VGROUPID FROM DUAL
);
COMMIT; END;
oracle 存储过程实现数据CURD操作的更多相关文章
- Oracle 对表的基本CURD操作
Oracle对表的基本Curd操作: 样式表: 接下来对这张(表明:Stud)表进行Curd操作(请看面SQL代码) 增加新的字段列:alter table Stud add(heigh ...
- ssm调用后台oracle存储过程统计分析数据
笔者所在项目需要一个统计本机构近6月收入情况(分两种).本机构下级机构收入情况的需求,数据量为百万级. 具体需求是时间.机构都不确定,可为入参. 综合考虑后决定使用后台存储过程统计. 基础表结构如下: ...
- oracle 数据库常用数据表操作
在oracle中创建sequence CREATE SEQUENCE sequence名称 MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCRE ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- .NET Core中使用Dapper操作Oracle存储过程最佳实践
为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...
- Oracle多用户对一个表进行并发插入数据行操作
oracle数据库支持多用户间同时对同一个表进行操作,但是数据不一定同步,因为oracle数据库是支持脏数据的,比如A用户删除了表的数据但没有提交,B用户也能查询访问到,如果要避免这种情况只能加锁,A ...
- NET Core中使用Dapper操作Oracle存储过程
.NET Core中使用Dapper操作Oracle存储过程最佳实践 为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
随机推荐
- 解决Swap file ".ceshi.c.swp" already exists!问题
关于swp文件:使用vi,常常能够看到swp这个文件,那这个文件是怎么产生的呢.当你打开一个文件,vi就会生成这么一个.(filename)swp文件以备不測,假设你正常退出,那么这个.(filena ...
- vue 数组 新增元素 响应式原理 7种方法
1.问题 思考一个问题,以下代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 【转发】JS中如何判断null/ undefined/IsNull
以下是不正确的方法:var exp = null;if (exp == null){ alert("is null");}exp 为 undefined 时,也会得到与 null ...
- Java学习笔记五(多线程)
1.介绍 线程可以使程序具有两条和两条以上的可运行的路径.尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来仅仅须要 ...
- [ACM] hdu 1671 Phone List (字典树)
Phone List Problem Description Given a list of phone numbers, determine if it is consistent in the s ...
- Loading...加载图收集
收集来源:http://cs.fangjia.com/zoushi/
- Hadoop Map/Reduce教程
原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/mapred_tutorial.html 目的 先决条件 概述 输入与输出 例子:WordCount v1.0 ...
- 转 jmeter使用IP欺骗压力测试
jmeterIP 欺骗多IP 最近在使用jmeter进行压力测试时需要使用类似于loadrunner的IP欺骗功能,经问津度娘无果后决定再次耐心研究jmeter官方文 档,终于发现在jmeter2.5 ...
- bootstrap 多元素共用 popover
<div class="popover fade bottom in small" role="tooltip" id="gPopover&qu ...
- Python2 long() 函数
描述 long() 函数将数字或字符串转换为一个长整型. 语法 long() 函数语法: class long(x, base=10) 参数 x -- 字符串或数字. base -- 可选,进制数,默 ...