`

ch03 oracle异常异常与动态sql

阅读更多

--------------------------------------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部分

    ### Oracle CH03 部分:数据库性能优化与内部原理 #### 一、引言与背景 在《OracleDBA手记3》的第三章节中,叶正盛同学聚焦于数据库性能优化与内部原理的解析,特别是针对数据库访问性能的优化法则。尽管这部分...

    让Oracle跑得更快—Oracle 10g性能分析与优化思路ch03.pdf

    ### Oracle 10g性能分析与优化:深入理解Latch及其优化策略 #### 一、Latch与Lock的区别 在Oracle数据库的性能优化过程中,理解和区分Latch与Lock是非常重要的。两者虽然都涉及资源的控制和访问,但其作用机制和对...

    Ch1Oracle关系数据库.ppt

    课程内容将深入讲解Oracle的安装与配置,以及如何使用基本工具如SQL*Plus进行数据库管理和开发。Oracle管理方面,会介绍DBA需要掌握的基本知识,包括用户管理、权限控制、性能监控、备份与恢复等。此外,还将探讨...

    oracle基础培训

    ch03Oracle Database10g的新增功能 .ppt ch04体系结构.ppt ch05SQLPlus基础.ppt ch06SQL基础.ppt ch07SQL高级查询技术.ppt ch08管理安全性.ppt ch09PLSQL基础.ppt ch10管理表.ppt ch11索引.ppt ch12视图.ppt ch13...

    ch1_oracle入门,课件

    本课件“ch1_oracle入门”旨在为初学者提供一个基础的学习平台,引导大家踏入Oracle的世界。Oracle 9i是Oracle数据库的一个版本,发布于2001年,它带来了许多新的特性和改进,比如提高了性能、可用性和可管理性。 ...

    ch06 oracle索引

    标题中的"ch06 oracle索引"表明我们将探讨Oracle数据库中的索引机制,这在数据库管理、查询优化以及性能提升方面具有重要意义。Oracle索引是一种数据结构,它能加速对表中数据的查找,提高查询速度,降低I/O操作,...

    ch1_oracle入门

    通过学习这个“ch1_oracle入门”课程,你将能够理解 Oracle 数据库的基本原理,掌握 SQL 命令和函数,创建和使用数据库对象,编写 PL/SQL 存储过程,并了解基础的数据库配置和管理。这为你进一步深入学习和使用 ...

    OCA Oracle Database 11g SQL Fundamentals I Exam Guide

    8. **PL/SQL基础**(ch10.pdf):介绍了Oracle的PL/SQL编程语言,包括PL/SQL块的结构、变量、常量、条件语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE、FOR)和异常处理。 9. **游标和存储过程**(ch11.pdf):详细...

    Ch2-Oracle10g体系结构.ppt

    用户进程是在客户端运行应用程序时启动的,它们通过网络与服务器建立连接并发送SQL语句。服务器进程则包括服务进程,它们负责解析、编译和执行SQL,以及后台进程,如检查点进程、归档日志进程、数据库写入器等,这些...

    Oracle_Concept_11gR2_EN_CH

    2. SQL语言:SQL是与Oracle数据库交互的主要工具,包括查询、插入、更新和删除数据的基本操作,以及更复杂的DML(数据操纵语言)和DDL(数据定义语言)语句。 3. 实例与数据库:实例是运行在操作系统上的进程集合,...

    精通Oracle+PL+SQL.pdf(超清书签版)

    对于oracle技术人员而言,怎么强调掌握pl/sql的重要性都不过分。但是,真正精通pl/sql绝非易事。事实上,在现有的oracle应用程序中充斥着太多质量不佳的pl/sql代码,它们要么没有充分利用oracle特有的功能,要么是在...

    ch05 oracle锁与表分区

    在Oracle数据库系统中,"锁"和"表分区"是两个关键的概念,它们对于数据库的并发控制和数据管理起着...同时,了解并熟练掌握相关工具,如Oracle SQL Developer,可以帮助我们更好地管理和监控数据库的锁状态和分区效果。

    Oracle_DB常用经典sql查询

    在Oracle数据库管理中,SQL(Structured Query Language)是DBA(Database Administrator)进行数据查询、操作和管理的核心工具。以下是一些Oracle_DB中的常用经典SQL查询,涵盖了表空间管理、回滚段、控制文件、...

    TomKyte[1].Effect.Oracle.Design.zip_oracle_oracle高效设计_tom ch01bb

    “ch03bb”章节可能涵盖了Oracle的事务管理与并发控制。他可能讲解了如何设置合适的事务隔离级别,以平衡并发性和一致性,同时避免死锁。还可能涉及到行锁定、多版本并发控制(MVCC)等技术。 “ch08”和“chap7”...

    oracle复习资料详解,ppt格式

    《Ch8-Oracle程序开发.ppt》介绍了PL/SQL编程,包括变量声明、流程控制、异常处理,以及存储过程、函数和触发器的创建和使用。这有助于开发者实现数据库级别的业务逻辑和数据处理。 **七、数据库备份恢复与性能优化...

    Oracle 基础 PPT

    │ ch03Oracle Database10g的新增功能 .p │ ch04体系__.ppt │ ch05SQLPlus基_.ppt │ ch06SQL基_.ppt │ ch07SQL高___技_.ppt │ ch08管理安全性.ppt │ ch09PLSQL基_.ppt │ ch10管理表.ppt │ ch11索引.ppt │ ...

Global site tag (gtag.js) - Google Analytics