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来进行相关的调用 .而有些相关的业务逻辑 ...
随机推荐
- rmdir 命令(转)
原文:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目 ...
- gradle 添加jar依赖,执行grade build时出现“程序包不存在”问题
引用的第三方依赖的包都找不到了 解决办法 group'com.suneony' version'1.0.0' apply plugin:'java' repositories { mavenLocal ...
- Camera2必知必会
引言 一切源于在项目过程中的一个Bug:我的需求是在MainActivity 实现自动预览,也可以点击跳到签到SignedActivity去实现拍照签到,第一次进入界面的时候都是正常的,但是有时候返回 ...
- WebStorm配置
一.主题配色 主题设置方法:File -> Settings -> Appearance & Behavior -> Appearance ->Theme. webst ...
- mysql循环批量插入测试数据
http://blog.51cto.com/tianxingzhe/1676097 DROP PROCEDURE test_insert ; DELIMITER $$ CREATE PROCEDURE ...
- google打不开解决的方法
14.5.27以来.谷歌又打不开了. 从网上找了些国内的googleserverIP,例如以下: const char* g_google_ips[18] = { "203.208.48.1 ...
- 数制转换-栈的应用(C++实现)
本程序实现的是十进制与不同进制之间的的数据转换,利用的数据结构是栈,基本数学方法辗转相除法. conversion.h #include<stack> using namespace st ...
- urlretrieve 如何给文件下载设置下载进度?
#python #xiaodeng #如何给文件下载设置下载进度? import urllib def callbackinfo(down,block,size): ''' 回调函数: down:已经 ...
- TaskController
package main.java.com.zte.controller.system; import java.io.PrintWriter; import java.util.ArrayList; ...
- MSSQL-SQL SERVER 2008安装教程
运行setup.exe 选择“安装”菜单,点击“全新安装或向现有安装添加功能. 环境检测通过,点击“确定”: 不用修改产品密钥,点击“下一步”: 点击“下一步”: 根据您的实际情况选择响应的组 ...