--------------------------------------oracle异常------------------------
预定义异常:数据库给定的异常
declare v_job varchar2(200);
begin
select job into v_job from emp;
exception
when too_many_rows then raise_application_error(-20001,'行太多');
when no_data_found then raise_application_error(-20001,'没有数据');
when others then raise_application_error(-20001,'其他错误');
end;
自定义异常
declare myException Exception;
begin
raise myException;
exception
when myException then raise_application_error(-20001,'我的消息');
--when myException then dbms_output.put_line('我的消息');
end;
--------------------------------------oracle动态sql------------------------
动态sql
格式为:execute immediate sql [into 变量] [using 参数值]
declare
v_sql varchar2(200);
v_emp emp%rowtype;
v_job emp.job%type;
begin
v_sql:='select * from emp where job =:1 and rownum=1';
v_job := '&CLERK';
execute immediate v_sql into v_emp using v_job;
dbms_output.put_line(v_emp.empno);
exception
when too_many_rows then raise_application_error(-20001,'行太多');
when no_data_found then raise_application_error(-20001,'没有数据');
when others then raise_application_error(-20001,'其他错误');
end;
--------------------------------------oracle游标管理------------------------
作用:一批行,可以一行一行的处理
属性:%rowcount,%found,%notfound,%isopen
类型:隐式,显式,REF
例:不带参数
declare
cursor v_cursor return emp%rowtype is select * from emp where rownum<10;
v_emp emp%rowtype;
begin
open v_cursor;
fetch v_cursor into v_emp;
while(v_cursor%found) loop
fetch v_cursor into v_emp;
dbms_output.put_line(v_emp.empno);
end loop;
close v_cursor;
end;
动态(指针):先定义类型,再定义变量
--普通的使用方式
declare
type c_type is ref cursor return emp%rowtype;
c1 c_type;
begin
open c1 for select * from emp where rownum=10;
end;
--动态的指针游标
declare
type c_type is ref cursor;
aa c_type;
v_sql varchar2(2000):='select * from emp where job =:1 and rownum=10';
v_job emp.job%type;
begin
v_job:='&job';
open aa for v_sql using v_job;
end;
--------------------------------------oracle优化基础------------------------
SQL> explan plan for select * from dept;
SQL> select * from table(DBMS_XPLAN.DISPLAY);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3383998547
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7 | 105 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DEPT | 7 | 105 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
已选择8行。
判断当前数据库使用何种优化器:
主要是由optimizer_mode初始化参数决定的。该参数可能的取值为:first_rows | all_rows | choose | rule。
具体解释如下:
RULE 为使用 RBO 优化器。
CHOOSE 则是根据实际情况,如果数据字典中包含被引用的表的统计数据,即引
用的对象已经被分析,则就使用 CBO 优化器,否则为 RBO 优化器。
ALL_ROWS为 CBO 优化器使用的第一种具体的优化方法,是以数据的吞吐量为
主要目标,以便可以使用最少的资源完成语句。
FIRST_ROWS 为优化器使用的第二种具体的优化方法,是以数据的响应时间为
主要目标,以便快速查询出开始的几行数据。
FIRST_ROWS_[1 | 10 | 100 | 1000] 为优化器使用的第三种具体的优化方法,让
优化器选择一个能够把响应时间减到最小的查询执行计划,以迅速产生查询结果
的前 n 行。该参数为 ORACLE 9I 新引入的。
从 ORACLE V7以来,optimizer_mode 参数的缺省设置应是"choose",即如果对已分
析的表查询的话选择 CBO,否则选择 RBO。在此种设置中,如果采用了 CBO,则缺省为
CBO 中的 all_rows 模式。
注意:即使指定数据库使用 RBO 优化器,但有时 ORACLE 数据库还是会采用 CBO
优化器,这并不是 ORACLE 的 BUG,主要是由于从 ORACLE 8I 后引入的许多新特性都必
须在 CBO 下才能使用,而你的 SQL 语句可能正好使用了这些新特性,此时数据库会自动
转为使用 CBO 优化器执行这些语句。
分享到:
相关推荐
### Oracle CH03 部分:数据库性能优化与内部原理 #### 一、引言与背景 在《OracleDBA手记3》的第三章节中,叶正盛同学聚焦于数据库性能优化与内部原理的解析,特别是针对数据库访问性能的优化法则。尽管这部分...
### Oracle 10g性能分析与优化:深入理解Latch及其优化策略 #### 一、Latch与Lock的区别 在Oracle数据库的性能优化过程中,理解和区分Latch与Lock是非常重要的。两者虽然都涉及资源的控制和访问,但其作用机制和对...
课程内容将深入讲解Oracle的安装与配置,以及如何使用基本工具如SQL*Plus进行数据库管理和开发。Oracle管理方面,会介绍DBA需要掌握的基本知识,包括用户管理、权限控制、性能监控、备份与恢复等。此外,还将探讨...
ch03Oracle Database10g的新增功能 .ppt ch04体系结构.ppt ch05SQLPlus基础.ppt ch06SQL基础.ppt ch07SQL高级查询技术.ppt ch08管理安全性.ppt ch09PLSQL基础.ppt ch10管理表.ppt ch11索引.ppt ch12视图.ppt ch13...
本课件“ch1_oracle入门”旨在为初学者提供一个基础的学习平台,引导大家踏入Oracle的世界。Oracle 9i是Oracle数据库的一个版本,发布于2001年,它带来了许多新的特性和改进,比如提高了性能、可用性和可管理性。 ...
标题中的"ch06 oracle索引"表明我们将探讨Oracle数据库中的索引机制,这在数据库管理、查询优化以及性能提升方面具有重要意义。Oracle索引是一种数据结构,它能加速对表中数据的查找,提高查询速度,降低I/O操作,...
通过学习这个“ch1_oracle入门”课程,你将能够理解 Oracle 数据库的基本原理,掌握 SQL 命令和函数,创建和使用数据库对象,编写 PL/SQL 存储过程,并了解基础的数据库配置和管理。这为你进一步深入学习和使用 ...
8. **PL/SQL基础**(ch10.pdf):介绍了Oracle的PL/SQL编程语言,包括PL/SQL块的结构、变量、常量、条件语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE、FOR)和异常处理。 9. **游标和存储过程**(ch11.pdf):详细...
用户进程是在客户端运行应用程序时启动的,它们通过网络与服务器建立连接并发送SQL语句。服务器进程则包括服务进程,它们负责解析、编译和执行SQL,以及后台进程,如检查点进程、归档日志进程、数据库写入器等,这些...
2. SQL语言:SQL是与Oracle数据库交互的主要工具,包括查询、插入、更新和删除数据的基本操作,以及更复杂的DML(数据操纵语言)和DDL(数据定义语言)语句。 3. 实例与数据库:实例是运行在操作系统上的进程集合,...
对于oracle技术人员而言,怎么强调掌握pl/sql的重要性都不过分。但是,真正精通pl/sql绝非易事。事实上,在现有的oracle应用程序中充斥着太多质量不佳的pl/sql代码,它们要么没有充分利用oracle特有的功能,要么是在...
在Oracle数据库系统中,"锁"和"表分区"是两个关键的概念,它们对于数据库的并发控制和数据管理起着...同时,了解并熟练掌握相关工具,如Oracle SQL Developer,可以帮助我们更好地管理和监控数据库的锁状态和分区效果。
在Oracle数据库管理中,SQL(Structured Query Language)是DBA(Database Administrator)进行数据查询、操作和管理的核心工具。以下是一些Oracle_DB中的常用经典SQL查询,涵盖了表空间管理、回滚段、控制文件、...
“ch03bb”章节可能涵盖了Oracle的事务管理与并发控制。他可能讲解了如何设置合适的事务隔离级别,以平衡并发性和一致性,同时避免死锁。还可能涉及到行锁定、多版本并发控制(MVCC)等技术。 “ch08”和“chap7”...
《Ch8-Oracle程序开发.ppt》介绍了PL/SQL编程,包括变量声明、流程控制、异常处理,以及存储过程、函数和触发器的创建和使用。这有助于开发者实现数据库级别的业务逻辑和数据处理。 **七、数据库备份恢复与性能优化...
│ ch03Oracle Database10g的新增功能 .p │ ch04体系__.ppt │ ch05SQLPlus基_.ppt │ ch06SQL基_.ppt │ ch07SQL高___技_.ppt │ ch08管理安全性.ppt │ ch09PLSQL基_.ppt │ ch10管理表.ppt │ ch11索引.ppt │ ...