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. Java从零开始学十三(封装)

    一.什么是封装,为什么要封装 对面向对象而言:封装就是将方法和属性包装到一个程序单元中,并且这个单元以类的形式实现. 简单讲:封闭就是将属性私有化,提供公有方法来访问私有属性 封装的作用: 封装反映和 ...

  2. 1z0-052 q209_4

    4: You have two tables with referential integrity enforced between them. You need to insert data to ...

  3. Linux see 网卡当前流量

    linux see网卡的当前流量 sar –n DEV  1 2  命令后面1 2 意思是:每一秒钟取1次值,取2次. DEV显示网络接口信息 -n参数很有用,他有6个不同的开关:DEV | EDEV ...

  4. python之函数用法execfile()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法execfile() #execfile() #说明:用来执行一个文件,相对于双击的效 ...

  5. 类的专有方法(__repr__)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://blog.csdn.net/yyt8yyt8/article/details/7030416 ...

  6. Android 一个apk多个ICON执行入口

    一个工程对应一个AndroidManifest.xml文件,这个文件中包含有该项目的一些设置,如权限.SDk版Activity.Service信息等.一般而言,这个文件中会有且仅有一个applicat ...

  7. 解释一下文件/etc/fstab的内容

    /etc/fstab 内容解释(偷个懒,把别人的话拷贝过来,做个标记,然后下班走人...)/dev/hda1 /mnt/c ntfs ro,users,gid=users,umask=0002,nls ...

  8. Android Developers:使ListView滑动流畅

    流畅滑动ListView的关键是保持应用程序的主线程(UI线程)从免于繁重处理.确保你的任何硬盘访问,网络访问或者SQL访问在一个单独的线程中.为了测试你的应用个程序的状态,你能启动StrictMod ...

  9. vs开发 winform 设置winform 获取管理员权限启动

    因为需要设置为开机项 没有管理员权限对注册表访问失败 C# 以管理员身份运行WinForm程序 转载https://www.bbsmax.com/A/obzbkKrQJE/ 鱼洛 2016-07-29 ...

  10. Android 中日期对话框的应用

    import java.util.Calendar; import android.widget.DatePicker; import android.app.DatePickerDialog; // ...