`

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基础培训

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

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

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

    Oracle 基础 PPT

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

    清华大学Oracle培训资料

    清华大学Oracle培训资料 Oracle PLSQL程序设计 Oracle SQL移动商务 Oracle DBA(ch) Oracle 优化 ……

    JDBC连接MySQL、SQLServer、Oracle三种数据库

    JDBC连接MySQL数据库 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCTest { public static void main(String[] args) { ...useUnicode=true&ch

    Oracle中PL/SQL单行函数和组函数详解数据库开发技术

    在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:23 单行函数45 组函数67 本文将讨论如何利用单行函数以及使用规则。89 SQL中的单行函数1011 SQL和PL/SQL中自带很多...

    DBA需要的技能

    oracle sql hign performance tuning 2nd editon by guy harrison 6. pl/sql OReilly_oracle_Bookshelf 包括: Oracle PL/SQL Programming, 2nd Edition by Steven Feuerstein Oracle Built-in Packages ...

    wabacus制作的一个填写周报的小例子_oracle版

    1.数据库改成oracle了,绝大部分sql语法都换成通用的了,只有reportconfig/report/report.xml和system_security.xml里还少有sysdate,to_char,||等oracle的语法 2.原来sql server里的自增长id改为wabacus里的uuid{} 3....

    《Oracle9i&10g编程艺术.rar

    ch1-ch19目录。分别对应第1章到第19章的代码。如果没有使用数据源,每章的代码只要拷贝到%Tomcat_Home%\webapps\目录下 即可运行。 b. 如果某些章节中要使用数据库,那么创建数据表的脚本就在本章代码的根...

    ASP.NET网络数据库开发实例精解.part1

    ch4\Example_4_1~ Example_4_4 ---- 第4章中的连接到SQL Server数据库、使用ODBC连接数据源、使用OLEDB连接数据源、链接到Oracle数据库; ch5\Example_5_1~ Example_5_4 ---- 第5章中的使用ADO.NET操作数据库; ch6\...

    ASP.NET网络数据库开发实例精解.part2

    ch4\Example_4_1~ Example_4_4 ---- 第4章中的连接到SQL Server数据库、使用ODBC连接数据源、使用OLEDB连接数据源、链接到Oracle数据库; ch5\Example_5_1~ Example_5_4 ---- 第5章中的使用ADO.NET操作数据库; ch6\...

    JSP数据库项目案例导航光盘

    本套光盘包括各个章节内容: \ch01 JSP基本理论 \ch04 电子商务系统(MySQL) \ch05 大学生论文管理系统(MySQL) \ch06 网络随行秘书系统(Access) \ch07 联系人客户关系管理系统...\ch11 企业员工信息管理系统(Oracle)

    PLSQL Developer64.rar

    运行PLSQL Developer64\PLSQL Developer\PLSQL Developer_ch.bat中文显示才有效 无需安装解压即用配置环境变量后就可以玩转ORACLE了 ,6不6 1) 变量名:ORACLE_HOME 变量值:D:\PLSQL Developer\instantclient_11_2...

    aceql-http:AceQL HTTP是REST的框架,例如http API,该框架允许从任何支持http的设备通过http访问远程SQL数据库。

    " sql=select id, title, lname from customer where customer_id = 1 " \ https://www.acme.com:9443/aceql/session/mn7andp2tt049iaeaskr28j9ch/execute_query AceQL HTTP是通过开放源代码许可证授权的: 。 ...

    matlab代码输入如何换行符-utl_map_counties_within_one_state_choropleth_map:在一个州Ch

    sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    网管教程 从入门到精通软件篇.txt

    CH:OS/2配置文件 CHK:由Windows磁盘碎片整理器或磁盘扫描保存的文件碎片 CHM:编译过的HTML文件 CHP:Ventura Publisher章节文件 CHR:字符集(字体文件) CHT:ChartViem文件;Harvard Graphics矢量文件 ...

Global site tag (gtag.js) - Google Analytics