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操作的更多相关文章

  1. Oracle 对表的基本CURD操作

    Oracle对表的基本Curd操作: 样式表:        接下来对这张(表明:Stud)表进行Curd操作(请看面SQL代码) 增加新的字段列:alter table Stud add(heigh ...

  2. ssm调用后台oracle存储过程统计分析数据

    笔者所在项目需要一个统计本机构近6月收入情况(分两种).本机构下级机构收入情况的需求,数据量为百万级. 具体需求是时间.机构都不确定,可为入参. 综合考虑后决定使用后台存储过程统计. 基础表结构如下: ...

  3. oracle 数据库常用数据表操作

    在oracle中创建sequence CREATE SEQUENCE sequence名称 MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCRE ...

  4. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  5. .NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  6. Oracle多用户对一个表进行并发插入数据行操作

    oracle数据库支持多用户间同时对同一个表进行操作,但是数据不一定同步,因为oracle数据库是支持脏数据的,比如A用户删除了表的数据但没有提交,B用户也能查询访问到,如果要避免这种情况只能加锁,A ...

  7. NET Core中使用Dapper操作Oracle存储过程

    .NET Core中使用Dapper操作Oracle存储过程最佳实践   为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...

  8. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中Oracle SQL和存储过程的数据血缘分析   数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...

  9. Oracle存储过程中异步调用的实际操作步骤

    本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

随机推荐

  1. rmdir 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目 ...

  2. gradle 添加jar依赖,执行grade build时出现“程序包不存在”问题

    引用的第三方依赖的包都找不到了 解决办法 group'com.suneony' version'1.0.0' apply plugin:'java' repositories { mavenLocal ...

  3. Camera2必知必会

    引言 一切源于在项目过程中的一个Bug:我的需求是在MainActivity 实现自动预览,也可以点击跳到签到SignedActivity去实现拍照签到,第一次进入界面的时候都是正常的,但是有时候返回 ...

  4. WebStorm配置

    一.主题配色 主题设置方法:File -> Settings -> Appearance & Behavior -> Appearance ->Theme. webst ...

  5. mysql循环批量插入测试数据

    http://blog.51cto.com/tianxingzhe/1676097 DROP PROCEDURE test_insert ; DELIMITER $$ CREATE PROCEDURE ...

  6. google打不开解决的方法

    14.5.27以来.谷歌又打不开了. 从网上找了些国内的googleserverIP,例如以下: const char* g_google_ips[18] = { "203.208.48.1 ...

  7. 数制转换-栈的应用(C++实现)

    本程序实现的是十进制与不同进制之间的的数据转换,利用的数据结构是栈,基本数学方法辗转相除法. conversion.h #include<stack> using namespace st ...

  8. urlretrieve 如何给文件下载设置下载进度?

    #python #xiaodeng #如何给文件下载设置下载进度? import urllib def callbackinfo(down,block,size): ''' 回调函数: down:已经 ...

  9. TaskController

    package main.java.com.zte.controller.system; import java.io.PrintWriter; import java.util.ArrayList; ...

  10. MSSQL-SQL SERVER 2008安装教程

    运行setup.exe     选择“安装”菜单,点击“全新安装或向现有安装添加功能. 环境检测通过,点击“确定”: 不用修改产品密钥,点击“下一步”: 点击“下一步”: 根据您的实际情况选择响应的组 ...