首页
学习
活动
专区
圈层
工具
发布

Oracle使用总结之异常篇

/SQL 中使用 SQLCODE, SQLERRM异常处理函数 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。...当然了,PL/SQL编译错误不能通过PL/SQL异常处理来处理,因为这些错误发生在PL/SQL程序执行之前。...1.1 异常处理概念 异常情况处理(EXCEPTION)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行...PL/SQL变量有不兼容行类型 ORA-6511 CURSOR-already-OPEN 试图打开一个已处于打开状态的游标 ORA-6530 Access-INTO-null 试图为null 对象的属性赋值...1.2.1 在执行部分引发异常错误 当一个异常错误在执行部分引发时,有下列情况: l 如果当前块对该异常错误设置了处理,则执行它并成功完成该块的执行,然后控制转给包含块。

2.5K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PLSQL 游标变量

    在PL/SQL 中,为创建游标变量,首先需要申明一个REF CURSOR类型,然后声明该类型的一个变量。     为了执行多行查询,Oracle 会开启一个未命名的工作区来存放处理信息。...2、打开游标变量      当打开游标变量时,则此时游标变量便与特定的SELECT语句关联,执行该查询,标识结果集。使用OPEN FOR可以为不同的查询打开相同的游标变量。...需要注意的是强类型返回的数据类型必须与FETCH 语句中INTO所使用的变量类型兼容。   其次查询列值的数量必须等于变量的数量,如果数量不匹配,则强类型在编译时出错,而弱类型则在运行时出错。   ...scott@CNMMBO> exec get_data.open_cv(:lv_ref_cv,:lv_choice); PL/SQL procedure successfully completed....3、当处理游标变量时,不要一起使用FOR UPDATE和OPEN FOR 4、不能使用比较运算符来测试游标变量的等价性、不等价性或者非空性 5、游标变量不能被赋予NULL值 6、REF CURSOR类型不能在

    1.7K40

    PLSQL --> 包重载、初始化

    即当包被首次使用时,会自动执行其构造过程,并且该构造过程在同一会话内仅仅被执行一次。 对于包的初始化,其通常的办法是包体的末尾增加一段匿名SQL代码。...END; END forward_pack; 六、函数纯度级别 Oracle函数可以在SQL语句中调用,也可以作为表达式的一部分,基于函数的一些特殊性,在包中使用SQL语句调用公共函数时,同样也存...:=emp_record; --将提取的记录存放到PL/SQL索引表 i:= i + 1; END LOOP; END read_emp_table; END cust_type; / --...CONNECT BY PRIOR) 有关PL/SQL请参考 PL/SQL --> 语言基础 PL/SQL --> 流程控制 PL/SQL --> 存储过程 PL/SQL --> 函数 PL/SQL...--> 游标 PL/SQL -->隐式游标(SQL%FOUND) PL/SQL --> 异常处理(Exception) PL/SQL --> PL/SQL记录 PL/SQL --> 包的创建与管理 PL

    91320

    Oracle SQL 异常处理

    而用户自定义异常以及预定义异常不回终止程序,但会终止该 PL/SQL 代码块,所以一个存储过程中可以有多个 PL/SQL 代码块。...关于异常的语法及定义: 什么是异常: PL/SQL用异常和异常处理器来实现错误处理 Oracle中出现错误的情形通常分为编译时错误(compile-time error)和运行时错误(run-time...异常在PL/SQL执行过程中很可能出现 对异常如果不进行处理,异常可能会中断程序的运行 捕获异常的规则: 在异常部分WHEN 子句没有数量限制 当异常抛出后,控制无条件转到异常处理部分 EXCEPTION...(v_error_code, v_error_message); END; 异常的传播 PL/SQL中错误处理的步骤: 步骤1:如果当前块中有该异常的处理器,则执行该异常处理语句块,然后控制权传递到外层语句块...编写PL/SQL块,使用SELECT语句将管理者编号为空的员工的姓名及工作编号显示出来,如果符合条件的员工多于一人,则返回字符串“最高管理者人员过多!”

    1K10

    疑难解答:ORA-01555的场景模拟和解决方案

    SQL> var cl refcursor SQL> begin open :cl for select * from demo.t_multiver; end; / PL/SQL procedure...too small no rows selected 2 延迟块清除导致的1555错误 开始读取表 SQL> var cc refcursor SQL> SQL> begin open :cc for...PL/SQL procedure successfully completed....6、使用游标时尽量使用显式游标,并且只在需要的时候打开游标,同时将所有可以在游标外做的操作从游标循环中拿出。 当游标打开时,查询就开始了,直到游标关闭。...以上总结了解决1555错误的各种办法,具体采用哪种方式,就需要根据错误产生的实际情况来决定了。 实例分析 实际上,你在了解了1555错误为什么会发生的前提,遇到了1555错误就不应该再手足无措了。

    1.9K50

    Oracle存储过程基本语法介绍

    行3:    BEGIN关键词表明PL/SQL体的开始。 ...行4:    NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;  行5:    END关键词表明PL/SQL体的结束  存储过程创建语法:  create...使用数组时,用户可以使用Oracle 已经定义好的数组类型,或可根据自己的需要定义数组类型。 ...需要注意的是此处使用了Index by binary_integer 编制该Table 的索引项,也可以不写,直接写成:type TestArray is  table of info ,如果不写的话使用数组时就需要进行初始化...number;  begin  i := 1;  get_comment(commentArray); -- 调用名为get_comment() 的存储过程获取学生课外评分信息  OPEN rsCursor

    4.3K50

    oracle补充

    索引 索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能 创建索引的SQL 把下面表中的name...,建议用v_作为前缀 v_sal 当定义常量时,建议用c_作为前缀 c_month 当定义游标时,建议用_cursor作为后缀 emp_cursor 当定义异常时,建议用e_作为前缀 e_error 什么是...PL/SQL块 块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是在编写块,要完成简单的功能,可能需要一个块,复杂的功能,要一个块中嵌套另一个块 PL/SQL块由三个部分组成:...('jerry',4000); --或 call lv_three('jerry',4000); --注:当遇到error时,用show error;查看错误 --类似于函数调用,过程可以被另一个过程调用.../SQL包 --当调用包的过程或是函数时,在过程和函数前需要带有包名 select lv_package.lv_funyearsal(‘jerry’) from lv where sname= 'jerry

    3.7K30

    PLSQL --> 动态SQL

    --==================== -- PL/SQL --> 动态SQL --==================== 使用动态SQL是在编写PL/SQL过程时经常使用的方法之一。...c.对于多行结果集的查询,需要使用游标变量或批量动态SQL,或者使用临时表来实现。 d.当执行SQL时,其尾部不需要使用分号,当执行PL/SQL 代码时,其尾部需要使用分号。...OPEN cursorname FOR SELECT ... 时,其SELECT 语句使用了字符串变量(动态SQL),其后紧跟USING子句。...--动态多行结果集查询语句 OPEN emp_cv FOR sql_stat USING v_dno; --OPEN 时使用动态查询语句以及USING子句来传递参数 LOOP FETCH emp_cv...当使用bulk子句时,集合类型可 以是PL/SQL所支持的索引表、嵌套表和VARRY,但集合元素必须使用SQL数据类型。

    2.8K10

    【DB笔试面试445】Oracle中的异常可以分为哪几类?

    (3)当异常处理结束后,Oracle就将处理权交给调用者。结束PL/SQL块的运行。 Oracle将异常分为预定义异常、非预定义异常和自定义异常三种。...1、预定义异常(Predefined) 当PL/SQL应用程序违反了Oracle规定的限制时,就会隐含地触发一个内部异常,这就是预定义异常。...内部错误,需重新安装数据字典视图和PL/SQL包 ORA-06511 CURSOR_ALREADY_OPEN 试图打开一个已存在的游标 ORA-06530 ACCESS_INTO_NULL 试图为NULL...使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其它的一些Oracle错误。例如,在PL/SQL块中执行DML语句时,违反了约束规定等等。...当与一个异常相关的错误出现时,就会隐含触发该异常。用户定义异常是通过显式使用RAISE语句来触发。当触发一个异常时,控制程序就转到异常块部分,执行错误处理代码。

    2.1K10
    领券