读《Oracle 数据库应用与实践》

最近的工作与oracle数据库有关,所以拿起家里之前买的一本oracle书籍。在阅读过程中,我发现这本书有多出不准确的描述。在此记录下来,当然,我也会把一些sql命令或者sql语句记录下来,如果有人恰好也是读这本书,就直接复制即可。

更希望的时, 恰好也在看这本书的人可以和我共同记录阅读过程。

此书有配套课件,根据书本最后一页的提示可以下载(我不知道怎样上传到该页面)。

目录


目录

 DEBUG

第7章 SELECT 高级查询

7.2 使用join关键字的连接查询

7.2.2 外连接查询

7.2.3 交叉连接

7.3  SELECT 查询的集合操作

7.3.1 UNION 集合运算

7.3.2 INTERSECT 取交集

7.3.3 MINUS 取补集 A-B 

7.4 子查询

7.4.1 子查询的类型

7.4.2 单行子查询

7.4.3 多行子查询

1. 使用IN或者NOT IN

2. 使用ANY(任意匹配)和ALL(任意匹配), 必须使用一个单行操作符,包括=、>、<、<=、>=等

7.4.4 多列子查询

7.4.5 关联子查询

7.4.6 其他语句中使用子查询

第8章  PL/SQL编程基础

8.1 PL/SQL简介

8.1.1 PL/SQL体系结构

​编辑8.1.2 PL/SQL特点:

8.1.3 PL/SQL的开发和运行环境

8.2 PL/SQL程序块结构

8.3 常量和变量

8.3.1 PL/SQL标识符

8.3.2 数据类型

8.3.3 声明常量与变量

8.3.4 使用%TYPE和%ROWTYPE定义变量

8.4 PL/SQL控制结构

PL/SQL的基本控制结构包括以下3类:

    8.4.1 条 件 结 构 

8.4.2 循 环 结 构

第9章 第9章 存储过程、函数、触发器和包

9.1 存 储 过 程

9.1.1 创建与调用存储过程

9.1.2 修改与删除存储过程

9.1.3 与存储过程相关数据字典

9.1.4 存储过程的注意事项

9.2 函   数

9.2.1 创建和调用函数

9.2.1 修改和删除函数



 DEBUG

我参考了使用 SQL Developer 开发和调试 PL/SQL

以下的输出内容对我的工作已经足够。

连接到数据库 ORCL1555_sys。
执行 PL/SQL: ALTER SESSION SET PLSQL_DEBUG=TRUE
执行 PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '51995' )
调试器接受了端口 51995 上的数据库连接。
源断点: PKG_DEMO.pls:11
源断点: PKG_DEMO.pls:12
 

当然,你也可能遇到以下问题:

连接到数据库 ORCL1555。
执行 PL/SQL: ALTER SESSION SET PLSQL_DEBUG=TRUE
执行 PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '55521' )
ORA-01031: 权限不足
ORA-06512: 在 "SYS.DBMS_DEBUG_JDWP", line 68
ORA-06512: 在 line 1
此会话需要 DEBUG CONNECT SESSION 和 DEBUG ANY PROCEDURE 用户权限。
进程已退出。
从数据库 ORCL1555 断开连接。

第7章 SELECT 高级查询

7.2 使用join关键字的连接查询

  • 7.2.2 外连接查询

  • 1. 左外连接

关于用(+)表示外连接,书中描述有误。

关于恰当用法,我参考了这个连接

Oracle左连接、右连接、全外连接以及(+)号用法 - 何海洋 - 博客园 (cnblogs.com)

select 
*
from scott.dept d
left join scott.emp e
    on d.deptno = e.deptno;

select 
*
from scott.dept d,
    scott.emp e
    on d.deptno = e.deptno (+)   ;
ORA-00933: SQL 命令未正确结束
00933. 00000 -  "SQL command not properly ended"


select 
*
from scott.dept d,
    scott.emp e
    where d.deptno = e.deptno (+)   ;  
  • 2. 右外连接
select 
    distinct e.deptno , d.deptno
from scott.emp e 
right join scott.dept d
    on e.deptno = d.deptno
;   


select 
    distinct e.deptno , d.deptno
from scott.emp e 
    ,scott.dept d
    where e.deptno (+) = d.deptno
;   

以上语句得到同样的结果。

  • 3.完全外连接
  • 7.2.3 交叉连接

我没写过交叉连接,不知道交叉连接有什么优点,目前不去深究。

7.3  SELECT 查询的集合操作

7.3.1 UNION 集合运算

UNION 会去重, UNION ALL 的All顾名思义就是不去重^-^.

select 
*
from scott.emp 
where sal > 2000
union all
select 
*
from scott.emp 
where job = 'MANAGER'
order by 1;

select 
*
from scott.emp 
where sal > 2000
union  
select 
*
from scott.emp 
where job = 'MANAGER'
order by 1;

 

如果想将union /union all 的结果集order by 一下,可以参考(50条消息) Oracle中union all、union 和order by一起使用的解决方法_luzaijx的博客-CSDN博客

7.3.2 INTERSECT 取交集

select 
*
from scott.emp 
where empno > 7800;



select 
*
from scott.emp 
where deptno = 10;


select 
*
from scott.emp 
where empno > 7800
intersect
select 
*
from scott.emp 
where deptno = 10;


create table scott.emp_2 as select * from scott.emp ;


select 
*
from scott.emp 
where empno > 7800
intersect
select 
*
from scott.emp_2 
where deptno = 10;

7.3.3 MINUS 取补集 A-B 

SELECT empno, ename, job, sal  FROM  scott.emp	
WHERE sal>2000
MINUS
SELECT  empno,ename,job,sal FROM scott.emp
WHERE job= 'MANAGER';

7.4 子查询

7.4.1 子查询的类型

        书本中分为以下3种,我不明白为什么要做这种分类。当我们用错的时候,执行结果会给我们报错提示。

根据子查询返回结果情况为分为3种子类型

  1.单行子查询(仅限单列)

  2.多行子查询(仅限单列)

  3.多列子查询

或者 根据操作符来分,我感觉这种分类更加合理。

    1)单行操作符:包括=、><>=<=<>!=

    (2)多行操作符:包括ALLANYINEXISTS

        疑问:ALL,SOME 呢?

7.4.2 单行子查询

书本给出的例子如下,我觉得给出这种例子不合适。


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值