- 浏览: 853884 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
这是一个忙碌的季节,也是一个收获颇多的季节。在忙碌工作的同时,挤出些时间写一些小dome,其乐无穷。也许这是最后一篇博客了,但愿玛雅人是在和我们开玩笑,呵呵!在时间允许的情况下,顺便把它搬到博客,希望对一些新手有帮助,对于一个新手来说,这样的博客我觉得很有用。我在自学的时候在网上查找了很多资料,但很少有一份资料适合我的口味,而且一篇文章拷贝来拷贝去的,甚至看了好多篇一模一样的“原创”文章,大部分都是谈谈一些理论,没有具体的dome参考,真正动起手来还是挺有难度的,这一步我还是顺利的走过来了,^_^!
一、什么是游标?
游标的字面理解就是游动的光标,用数据库语言来描述就是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对改行数据进行操作。
二、什么时候需要使用游标?
游标可以存储结果集,当我们需要使用结果集中的数据时,直接从游标里面遍历获取。
三、游标都有哪些?
PL/SQL有两种类型的游标:隐式游标(Implicit Cursor)和显示游标(Explicit Cursor)。PL/SQL为所有的SQL数据库操作语句都声明了一个隐式游标,其中也包括只返回一条记录的查询。但是,对于返回多条记录的查询来说,必须声明显示游标。
四、游标的使用
1.声明
CURSOR cursor_name[(parameter[,parameter]...)][return return_type]IS select_statement;
声明游标时参数和返回类型可根据实际情况选择,是可选的。其中,return_type必须是记录或是数据表的行类型,例如,
DECLARE CURSOR c1 IS SELECT t.business_id , t.business_type FROM tbl_flow_work t;
CURSOR c2 RETURN tbl_flow_work%rowTYPE IS SELECT t.business_id , t.business_type FROM t bl_flow_work t where t.flow_work_id =1;
需要注意的是,PL/SQL不允许向前引用,所以必须要在其他语句引用游标之前声明它,声明时,除了命名之外,还需要把它和一个查询相关联起来。游标名是一个未声明的标识符,而不是PL/SQL变 量名,因此,不能把值直接赋给游标名,也不能在表达式中使用。但是,游标和变量有着同样的作用域和规则,例如,在循环体内定义的游标只能作用于循环内部,不能在循环体外引用它。游标的形式参数都必须是IN模式的,即参数只能用于传进值,而不能对其进行赋值。此外,不能给游标的参数添加NOT NULL约束。可以为游标参数初始化默认值,如,
CURSOR c1(width INTEGER DEFAULT 0)...
2.打开和关闭游标
游标只有在打开只有才能执行查询操作,OPEN语句会把满足查询条件的行锁住,执行OPEN语句不会选取出结果集中的记录,只有在使用FETCH语句的时候才能将数据读取出来,如,
open c(parameter);
loop fetch c into v_businessname;
dbms_output.put_line(v_businessname);
end loop;
close c;
在大多数需要使用显示游标的情况下,都可以用一个游标FOR循环来代替OPEN、FETCH和CLOSE语句,这样可以省去一些繁琐的代码。游标FOR隐式地声明了一个%ROWTYPE类型的记录作为它的 循环索引,打开游标,然后反复地执行把结果集中的行放到索引中去,最后在所有行都被处理完成后关闭游标。如,
for cfw in cursor_flowwork loop
v_busstype := cfw.bt;
dbms_output.put_line(v_busstype);
end loop;
五、实例演示
现有四个表,一个是香港业务表TBL_BUSINESS_A,该表有business_id和business_name两个字段, business_id是主键。一个大陆业务表TBL_BUSINESS_B,也有两个字段business_id和business_name, business_id是主键。还有一个表是待办表tbl_flow_work,该表记录的是香港表和大陆表的待办信息,有一个外 键business_id字段对应的是两个主业务表的business_id。最后一个表是报表临时表tbl_temp_report。具体结 构和测试数据如图:
为了方便浏览,以下才测数据,临时表的数据是动态生成的。
- tbl_business_a测试数据:
- BUSINESS_ID BUSINESS_NAME CREATEDATE
- 1 安利销售代表申请书 2012-12-5 12:00:00
- 2 经销商营业执照变更说明书 2012-12-5 13:01:00
- 3 安利优惠顾客申请书 2012-12-5 12:00:00
- 4 安利优惠顾客申请书 2012-12-5 12:00:00
- tbl_business_b测试数据:
- BUSINESS_ID BUSINESS_NAME CREATEDATE
- 1 销售代表新加入 2012-12-5 12:00:00
- 2 安利优惠顾客网上补交身份证 2012-12-5 12:00:00
- 3 IDIS档案资料 2012-12-5 12:00:00
- tbl_flow_work测试数据:
- FLOW_WORK_ID BUSINESS_ID BUSINESS_TYPE OPERATE_NODE STATUS CREATE_DATE
- 1 1 1 1 1 2012-12-5 12:00:00
- 2 2 1 2 1 2012-12-5 12:00:00
- 3 3 1 3 1 2012-12-5 12:00:00
- 4 3 1 4 1 2012-12-5 12:00:00
- 5 1 2 1 1 2012-12-5 12:00:00
- 6 2 2 2 1 2012-12-5 12:00:00
- 7 3 2 3 1 2012-12-5 12:00:00
- 8 3 2 4 1 2012-12-5 12:00:00
- 9 3 1 1 0 2012-12-5 12:00:00
- 10 3 2 1 0 2012-12-5 12:00:00
- 11 4 1 1 1 2012-12-5 12:00:00
- tbl_temp_report测试数据:
- BUSINESS_TYPE BUSINESS_NAME
- 香港业务 安利销售代表申请书
- 大陆业务 销售代表新加入
- 香港业务 经销商营业执照变更说明书
- 大陆业务 安利优惠顾客网上补交身份证
- 香港业务 安利优惠顾客申请书
- 大陆业务 IDIS档案资料
- 香港业务 安利优惠顾客申请书
1.需求一,获取某一条待办对应的业务类型的业务名称?
现在既然是在学习游标,那么就应该用游标知识来解决该问题。其实很简单,可以声明一个带输入参数和一个输出
参数的存储过程,输入参数我们可以假设为待办表的id,而输出参数当然就是业务名称了。接着根据传入的待办id查询出
业务id和业务类型,即business_id和business_type,并且声明一个游标来存储。然后继续声明两个查询两个主业务表的带参数的游标,参数是业务id,条件也就是根据传入的参数查询,查询字段为业务名称business_name。最后就是遍历游标获得结果了,遍历待办表的游标,从游标中取得业务类型和业务id,代入主业务表的游标,得到业务名称,将业务名称写入输出参数返回。存储过程语句如下:
- create or replace procedure pro_test(par_flowworkid in number,
- par_businessname out varchar2) as
- v_busstype varchar2(1); --业务类型
- v_bussid number(20); --业务id
- v_businessname varchar2(200); --业务名称
- i number(20);
- --根据待办id获取待办信息
- cursor cursor_flowwork is
- select t.business_id as bid, t.business_type as bt
- from tbl_flow_work t
- where t.flow_work_id = par_flowworkid;
- --根据i业务id获取香港信息
- cursor cursor_a(temp_bussid number) is
- select tba.business_name as bn
- from tbl_business_a tba
- where tba.business_id = temp_bussid;
- --根据业务id获取大陆信息
- cursor cursor_b(temp_bussid number) is
- select tbb.business_name as bn
- from tbl_business_b tbb
- where tbb.business_id = temp_bussid;
- begin
- i := 1; --初始化变量
- for cfw in cursor_flowwork loop
- v_busstype := cfw.bt;
- v_bussid := cfw.bid;
- if v_busstype = '1' then
- open cursor_a(v_bussid);
- loop
- fetch cursor_a
- into v_businessname;
- exit when cursor_a%notfound;
- i := i + 1;
- dbms_output.put_line('A业务名称' || i || ':' || v_businessname);
- par_businessname := v_businessname; --给输出参数赋值
- end loop;
- close cursor_a;
- elsif v_busstype = '2' then
- open cursor_b(v_bussid);
- loop
- fetch cursor_b
- into v_businessname;
- exit when cursor_b%notfound;
- i := i + 1;
- dbms_output.put_line('B业务名称' || i || ':' || v_businessname);
- par_businessname := v_businessname; --给输出参数赋值
- end loop;
- close cursor_b;
- end if;
- end loop;
- end pro_test;
该操作使用到了3个游标,后面两个游标的条件是第一个游标查询的结果,而第一个游标的条件又是存储过程的输入参数。
把待办id=2传入存储过程,得到如下结果:
- 经销商营业执照变更说明书
2.需求二,根据业务类型和业务名称统计该业务的待办数量?
这个需求的关键是在于一个业务名称,因为业务名称是来自表A或表B。首先可以根据业务类型和业务id分组统计出所有的业务id和业务类型,用一个游标来存储:
cursor cursor_flowwork is
select t.business_id as bid, t.business_type as bt
from tbl_flow_work t
group by t.business_id, t.business_type;
再用两个游标分别存储业务表A和业务表B的数据,条件问是第一个游标查询出的业务id:
cursor cursor_a(temp_bussid number) is
select tba.business_name as bn
from tbl_business_a tba
where tba.business_id = temp_bussid;--条件是游标参数
cursor cursor_b(temp_bussid number) is
select tbb.business_name as bn
from tbl_business_b tbb
where tbb.business_id = temp_bussid;--条件是游标参数
最后,通过遍历第一个游标,判断是香港业务还是大陆业务调用对应的游标,得到业务名称,并将业务名称插入临时表。再将临时表的数据存储到输出游标参数。
open par_businessname for
select t.business_type, t.business_name, count(t.business_name)
from tbl_temp_report t
group by t.business_type, t.business_name;
具体sql如下:
- create or replace procedure pro_test1(par_businessname out sys_refcursor) as
- v_bussid number(20); --业务id
- v_businessname varchar2(200); --业务名称
- --根据业务类型和业务id分组得到待办信息
- cursor cursor_flowwork is
- select t.business_id as bid, t.business_type as bt
- from tbl_flow_work t
- group by t.business_id, t.business_type;
- --根据业务类型和业务id获取所有业务名称
- cursor cursor_a(temp_bussid number) is
- select tba.business_name as bn
- from tbl_business_a tba
- where tba.business_id = temp_bussid;
- cursor cursor_b(temp_bussid number) is
- select tbb.business_name as bn
- from tbl_business_b tbb
- where tbb.business_id = temp_bussid;
- begin
- --先删除临时表的数据,可以做个判断
- delete from tbl_temp_report;
- for cfw in cursor_flowwork loop
- v_bussid := cfw.bid;
- if cfw.bt = '1' then
- open cursor_a(v_bussid);
- loop
- fetch cursor_a
- into v_businessname;
- exit when cursor_a%notfound;
- --向临时表插入记录
- insert into tbl_temp_report
- (business_type, business_name)
- values
- ('香港业务', v_businessname);
- end loop;
- close cursor_a;
- elsif cfw.bt = '2' then
- open cursor_b(v_bussid);
- loop
- fetch cursor_b
- into v_businessname;
- exit when cursor_b%notfound;
- --向临时表插入记录
- insert into tbl_temp_report
- (business_type, business_name)
- values
- ('大陆业务', v_businessname);
- end loop;
- close cursor_b;
- end if;
- end loop;
- commit;
- --统计临时表的数据,
- open par_businessname for
- select t.business_type, t.business_name, count(t.business_name)
- from tbl_temp_report t
- group by t.business_type, t.business_name;
- end pro_test1;
统计结果:
- 数量 业务类型 业务名称
- 1 大陆业务 IDIS档案资料
- 1 大陆业务 销售代表新加入
- 1 大陆业务 安利优惠顾客网上补交身份证
- 1 香港业务 安利销售代表申请书
- 2 香港业务 安利优惠顾客申请书
- 1 香港业务 经销商营业执照变更说明书
- package com.procedure.util;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- /**
- * @filename ConnectionUtils.java
- * @description 数据库连接工具
- * @date 2012-12-5
- * @time 13:38
- * @author wst
- *
- */
- public class ConnectionUtils {
- public static final String DRIVER = "oracle.jdbc.OracleDriver";
- public static final String URL = "jdbc:oracle:thin:@192.168.0.153:1521:testdb";
- public static final String USERNAME = "test";
- public static final String USERPASS = "sa";
- //得到连接
- protected Connection getConn() {
- Connection conn = null;
- try {
- // 装载驱动
- Class.forName(DRIVER);
- conn = DriverManager.getConnection(URL, USERNAME, USERPASS);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return conn;
- }
- // 关闭资源
- protected void closeAll(PreparedStatement pstmt, Connection con, ResultSet rs) {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (pstmt != null) {
- try {
- pstmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (con != null) {
- try {
- con.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
- package com.procedure.test;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import com.procedure.util.ConnectionUtils;
- /**
- * @fileName ProcedureTest.java
- * @description oracle存储过程测试
- * @date 2012-12-5
- * @time 13:54
- * @author wst
- *
- */
- public class ProcedureTest extends ConnectionUtils{
- public static void main(String[] args){
- ProcedureTest pt=new ProcedureTest();
- pt.test(2);
- pt.test1();
- }
- /**
- * 找出某一条待办所对应的业务类型的业务名称
- * @param fid 待办id
- */
- public void test(long fid){
- Connection conn=null;
- CallableStatement cstmt = null;
- try{
- conn=super.getConn();
- cstmt = conn.prepareCall("CALL pro_test (?,?)");
- cstmt.setLong(1,fid);//输入参数
- cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);//输出参数为字符类型
- cstmt.execute();
- System.out.println(cstmt.getString(2));
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- super.closeAll(cstmt, conn, null);
- }
- }
- /**
- *
- * 统计某个业务类型的业务名称在待办表中的数量
- */
- public void test1(){
- Connection conn=null;
- CallableStatement cstmt = null;
- try{
- conn=super.getConn();
- cstmt = conn.prepareCall("CALL pro_test1 (?)");
- cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);//输出参数为游标类型
- cstmt.execute();
- ResultSet rs=(ResultSet)cstmt.getObject(1);
- if(rs!=null){
- System.out.println("数量 业务类型 业务名称 ");
- while(rs.next()){
- System.out.println(rs.getString(3)+" "+rs.getString(1)+" "+rs.getString(2));
- }
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- super.closeAll(cstmt, conn, null);
- }
- }
- }
- -- Create table
- create table TBL_BUSINESS_A
- (
- BUSINESS_ID NUMBER not null,
- BUSINESS_NAME VARCHAR2(60),
- CREATEDATE DATE
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table TBL_BUSINESS_A
- is '香港业务表';
- -- Add comments to the columns
- comment on column TBL_BUSINESS_A.BUSINESS_ID
- is '主键,业务id';
- comment on column TBL_BUSINESS_A.BUSINESS_NAME
- is '业务名称';
- comment on column TBL_BUSINESS_A.CREATEDATE
- is '创建时间';
- -- Create/Recreate primary, unique and foreign key constraints
- alter table TBL_BUSINESS_A
- add constraint PK_BUSINESS_A_ID primary key (BUSINESS_ID)
- using index
- tablespace USERS
- pctfree 10
- initrans 2
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Create table
- create table TBL_BUSINESS_B
- (
- BUSINESS_ID NUMBER not null,
- BUSINESS_NAME VARCHAR2(50),
- CREATEDATE DATE
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table TBL_BUSINESS_B
- is '大陆业务表';
- -- Add comments to the columns
- comment on column TBL_BUSINESS_B.BUSINESS_ID
- is '主键,业务id';
- comment on column TBL_BUSINESS_B.BUSINESS_NAME
- is '业务名称';
- comment on column TBL_BUSINESS_B.CREATEDATE
- is '创建时间';
- -- Create/Recreate primary, unique and foreign key constraints
- alter table TBL_BUSINESS_B
- add constraint PK_BUSINESS_B_ID primary key (BUSINESS_ID)
- using index
- tablespace USERS
- pctfree 10
- initrans 2
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Create table
- create table TBL_FLOW_WORK
- (
- FLOW_WORK_ID NUMBER(20) not null,
- BUSINESS_ID NUMBER(20),
- BUSINESS_TYPE VARCHAR2(1),
- OPERATE_NODE VARCHAR2(20),
- STATUS VARCHAR2(1),
- CREATE_DATE DATE
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table TBL_FLOW_WORK
- is '待办业务表';
- -- Add comments to the columns
- comment on column TBL_FLOW_WORK.FLOW_WORK_ID
- is '主键';
- comment on column TBL_FLOW_WORK.BUSINESS_ID
- is '外键,业务表A或B的BUSINESS_ID';
- comment on column TBL_FLOW_WORK.BUSINESS_TYPE
- is '业务类型,1为TBL_BUSINESS_A,2为TBL_BUSINESS_B';
- comment on column TBL_FLOW_WORK.OPERATE_NODE
- is '待办类型,1/资料审核,2/数据录入,3/错误处理,4/电子剪刀';
- comment on column TBL_FLOW_WORK.STATUS
- is '状态
- ,0已结束,1处理中';
- comment on column TBL_FLOW_WORK.CREATE_DATE
- is '待办生成时间';
- -- Create/Recreate primary, unique and foreign key constraints
- alter table TBL_FLOW_WORK
- add constraint PK_FLOW_WORK_ID primary key (FLOW_WORK_ID)
- using index
- tablespace USERS
- pctfree 10
- initrans 2
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Create table
- create table TBL_TEMP_REPORT
- (
- BUSINESS_TYPE VARCHAR2(10),
- BUSINESS_NAME VARCHAR2(50)
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 64K
- minextents 1
- maxextents unlimited
- );
- -- Add comments to the table
- comment on table TBL_TEMP_REPORT
- is '报表临时表';
- -- Add comments to the columns
- comment on column TBL_TEMP_REPORT.BUSINESS_TYPE
- is '业务类型';
- comment on column TBL_TEMP_REPORT.BUSINESS_NAME
- is '业务名称';
参考资料:《Oracle PL/SQL完全自学手册》
评论
OK了
发表评论
-
根据多年经验整理的《互联网MySQL开发规范》
2015-08-10 16:09 792写在前面:无规矩不成方圆。对于刚加入互联网的朋友们,肯定会接 ... -
Mysql一主多从和读写分离配置简记
2015-05-15 10:56 1423近期开发的系统中使用MySql作为数据库,由于数据涉及到Mo ... -
MySQL第二天早上第一次连接超时报错,解决方法
2015-02-03 15:36 728| 浏览:44 | 更新:2014- ... -
MYSQL 设置 FOR UPDATE 超时时间
2015-01-21 10:37 2628show global variables like &q ... -
如何设计动态(不定)字段的产品数据库表?--淘宝多产品属性字段设计方法
2014-07-17 13:46 1997项目组会议上讨论的关于不定字段数目的数据库表问 ... -
要想学好SQL语句必会的50题,也是考试常考的点
2014-05-28 10:46 613-- 一、创建教学系统的数据库,表,以及数据 ... -
关于MYSQL group by 分组按时间取最大值的实现方法!
2013-02-06 08:22 1176类如 有一个帖子的回复表,posts( id , tid , ... -
全国行政区域数据库(地市数据库)
2012-10-28 13:48 1095创建表格: -- Create table creat ... -
oracle 数据库字段按照拼音首字母排序
2012-10-27 13:00 15371、创建oracle存储过程(网上拿来的的) Sql ... -
ORACALE查询数据库按汉字拼音排序
2012-10-27 13:03 1331CREATE OR REPLACE FUNCTION PUB_ ... -
ORA-12519,TNS:no appropriate service handler found的问题
2012-10-18 15:47 7698Java代码 ORA-12519, TNS:n ... -
dbcp的基本配置
2012-10-18 15:41 10401. 引入dbcp (选择1.4)Java代码 <dep ... -
in和exists区别
2012-10-15 09:21 1228引子 in和exists的讨论从未间断过。之前有“今年是 ... -
ORACLE-分区表分区字段的update操作
2012-10-16 09:44 10892默认情况下,oracle的分区表对于分区字段是不允许进行u ... -
oracle分区表的建立方法(包含已经存在的表要分区)
2012-10-13 10:22 1570Oracle提供了分区技术以支持VLDB(Very L ... -
查询Oracle表实际物理使用大小
2012-10-13 09:54 1117Oracle中有两种含义的表大小一种是分配给一个表的物理空 ... -
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等
2012-10-13 09:39 1479oracle 数据库表空间的作用 1.决定数据库实体的空 ... -
Oracle异常ORA-01502: 索引或这类索引的分区处于不可用状态
2012-10-13 09:25 8038原因: 出现这个问题,可能有人move过表,或者disab ... -
Oracle中分区表的使用
2012-10-13 08:53 744前提: 查询分区:Select *From use ... -
Oracle 分区表
2012-10-11 16:06 898--================== -- ...
相关推荐
在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入探讨这个语言的核心概念和实战技巧。 在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务...
在"韩顺平玩转Oracle10g实战教程PPT+课堂笔记文档"中,你可以期待涵盖以下几个关键知识点: 1. **Oracle 10g基础**:了解Oracle数据库的基本架构,包括数据文件、控制文件、重做日志文件等组成部分,以及数据库实例...
Oracle数据库是全球最广泛使用的数据库管理系统之一,以其高效、稳定和功能强大著称。本课程“2011版李兴华主讲-ORACLE实战 最强大的数据库课程MLDN出品”由知名讲师李兴华主讲,旨在为学习者提供深入的Oracle实战...
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理、数据分析以及事务处理中扮演着核心角色。本资料“深度解析Oracle 实战与提高”旨在帮助读者深入理解Oracle的内部机制,提升...
"Oracle实战练习"这个主题旨在帮助初学者通过实践操作来深入理解Oracle数据库的原理和操作技巧。以下是一些核心的Oracle知识点,这些内容将有助于你进行有效的学习和实践: 1. **SQL基础**:SQL(结构化查询语言)...
在"Oracle 11g PL/SQL编程实战"中,我们可以学习到以下关键知识点: 1. **PL/SQL基础**:了解PL/SQL的基本结构,包括块(DECLARE、BEGIN、EXCEPTION 和 END)、变量声明、数据类型(如NUMBER、VARCHAR2、DATE等)、...
《Oracle PLSQL实战》是专为Oracle数据库开发者和DBA准备的一本专业书籍,其第一章主要探讨了PL/SQL编程的基础和实践技巧。在Oracle数据库系统中,PL/SQL是一种强大的过程式编程语言,用于创建复杂的数据库应用程序...
本资料“Oracle Database 11g PLSQL编程实战”旨在帮助用户通过实践学习和掌握PL/SQL编程技巧。 1. **PL/SQL基础知识** - PL/SQL由声明部分、执行部分和异常处理部分组成。 - 声明部分包括变量、常量、游标、记录...
本套“Oracle 10g经典实战”教程是针对初学者设计的一系列PPT,旨在帮助学习者快速掌握Oracle数据库的基础知识和实践操作技能。以下是本教程可能涵盖的一些关键知识点: 1. **Oracle简介**:介绍Oracle数据库系统的...
此外,我们还将深入讲解PL/SQL编程、游标、函数、存储过程和触发器的使用,使您的应用程序更加高效和智能。事务管理、用户管理、备份恢复等关键技术,将为您的数据库安全稳定保驾护航。 最后,我们将介绍数据库设计...
《ORACLE_PL_SQL实战精讲》是一本专为PL/SQL开发者设计的指南,它深入浅出地介绍了Oracle数据库中的编程语言PL/SQL。PL/SQL是Oracle数据库系统中的核心组件,用于创建复杂的业务逻辑和数据处理程序。本书旨在帮助...
### Oracle调优实战执行计划详解 #### 一、执行计划的重要性 执行计划是Oracle数据库引擎在执行SQL语句时所采用的一系列策略和技术的集合,它决定了如何从表或索引中检索数据、如何处理这些数据,以及如何将它们...
事务处理和并发控制是Oracle数据库的核心功能之一。书中会讲解提交、回滚、保存点和事务隔离级别等概念,以及Oracle的多版本并发控制(MVCC)机制,帮助读者掌握如何在高并发环境下保证数据的一致性和完整性。 性能...
本书"Oracle Database 11g PLSQL编程实战"旨在帮助读者深入理解和掌握Oracle 11g中的PL/SQL编程技术。通过阅读这本书,你可以学习到以下关键知识点: 1. **Oracle数据库基础**:了解Oracle数据库的基本架构,包括表...
Oracle 9i是Oracle公司的一个里程碑产品,作为当时世界上最先进和功能最强大的数据库之一,它提供了包括Real Application Clusters(RAC)在内的多项革命性技术。本书作为初学者指南,旨在帮助读者快速理解并掌握...