oracle 存储过程实现数据CURD操作
2014-04-07 16:10
513 查看
1.创建数据库表:
2.创建sequences
3.创建触发器triggers
4.在包体中创建数据包名:在包中实现存储过程的实现。包头:
包体:
5.根据用户编号递归实现获取部门信息
创建函数方法通过部门编号获取部门名称的函数
存储过程:
-- 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如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作-------sql方式
- oracle的存储过程实现数据分页
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- 使用 Oracle的存储过程实现数据加密和解密
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- JAVA结合Oracle的Database Change Notification实现替代获取实时数据需要的刷库操作
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- Mybatis实现数据CURD操作实例
- 如何优化操作大数据量数据库(几十万以上数据)(三。实现小数据量和海量数据的分页显示存储过程)
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- Spring和Hibernate整合实现Oracle的大数据类型Clob的操作
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)
- jQuery EasyUI和PHP实现数据的CURD操作
- SQLServer2008新建数据链接服务器 for Oracle,实现不同数据库源数据的统一操作!
- Oracle中对一个表中的数据和输入的参数对比,做出对应的操作(存储过程)
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)