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

Oracle存储过程详解(一)

集合元素未初始化 CURSER_ALREADY_OPEN 游标已经打开 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值 INVALID_CURSOR 在不合法的游标上进行操作 INVALID_NUMBER...内嵌的 SQL 语句不能将字符转换为数字 NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的 TOO_MANY_ROWS 执行 select into 时,结果集超过一行...运行 PL/SQL 时,超出内存空间 SYS_INVALID_ID 无效的 ROWID 字符串 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时 基本语法 1.....在oracle中,数据表别名不能加as,如: select a.appname from appinfo a;-- 正确 select a.appname from appinfo as a;-- 错误...也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧 2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。

2.2K30

盘点 Oracle 11g 中新特性带来的10大性能影响

然而一个执行计划并不总是适用于所有绑定值,为了尽可能生成准确的执行计划,Oracle Database 11g 引入了自适应游标共享的新特性,在执行共享SQL时考虑更多的因素,如果与资源开销相比,使用多个执行计划所带来的收益更重要...这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加,以此减缓可能对于数据库重复的口令尝试攻击。...我在《数据安全警示录》一书上曾经写过多个案例,在归档模式下当发生文件(非SYSTEM文件)写错误时,Oracle会自动将数据文件离线,这造成了很多灾难,类似的错误日志可能是这样的: Fri Jan 13...6 _optimizer_use_feedback - 优化器的基数反馈 Cardinality Feedback - 基数反馈,是Oracle 11.2中引入的新特性,这个新特性利用SQL执行过程中的信息采集...=false; 7 deferred_segment_creation - 延迟段创建 在Oracle 11.2中, 当我们创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间

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

    盘点 Oracle 11g 中新特性带来的10大性能影响(上)

    在以前版本中,LGWR 执行写入操作完成后,会通知前台进程,这也就是 Post/Wait 模式;在11gR2 中,为了优化这个过程,前台进程通知LGWR写之后,可以通过定时获取的方式来查询写出进度,这被称为...Adaptive Cursor Sharing - 自适应游标共享 Oracle数据库的SQL使用的是共享机制,通过绑定变量可以使Oracle DB 可以为多条SQL 语句共享单个游标,以减少分析SQL...然而一个执行计划并不总是适用于所有绑定值,为了尽可能生成准确的执行计划,Oracle Database 11g 引入了自适应游标共享的新特性,在执行共享SQL时考虑更多的因素,如果与资源开销相比,使用多个执行计划所带来的收益更重要...这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加,以此减缓可能对于数据库重复的口令尝试攻击。...我在《数据安全警示录》一书上曾经写过多个案例,在归档模式下当发生文件(非SYSTEM文件)写错误时,Oracle会自动将数据文件离线,这造成了很多灾难,类似的错误日志可能是这样的: Fri Jan 13

    1.2K50

    Oracle存储过程

    在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试 关于oracle存储过程的若干问题备忘 1.在oracle中,数据表别名不能加as,如: ?...也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧 2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。 ?...5.在存储过程中,关于出现null的问题 假设有一个表A,定义如下: ? 如果在存储过程中,使用如下语句: ?...集合元素未初始化 CURSER_ALREADY_OPEN 游标已经打开 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值 INVALID_CURSOR...oracle 数据库时,提供了不 正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下 访问数据 PROGRAM_ERROR

    3K50

    Oracle使用总结之异常篇

    1.1 异常处理概念 异常情况处理(EXCEPTION)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行...对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。 3. 用户定义(User_define) 错误 程序执行过程中,出现编程人员认为的非正常情况。...内部错误 ORA-6502 Value-error 转换或截断错误 ORA-6504 Rowtype-mismatch 宿主游标变量与 PL/SQL变量有不兼容行类型 ORA-6511 CURSOR-already-OPEN...1.2.1 在执行部分引发异常错误 当一个异常错误在执行部分引发时,有下列情况: l 如果当前块对该异常错误设置了处理,则执行它并成功完成该块的执行,然后控制转给包含块。...语句捕获其他的条件   cursor_already_open ora-06511  -6511  程序试图打开一个已经打开的游标   timeout_on_resource ora-00051  -51

    2.2K60

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

    题目部分 Oracle中的异常可以分为哪几类? 答案部分 异常(EXCEPTION)处理是用来处理正常执行过程中未预料到的事件,包括程序块的异常处理、预定义的错误和自定义错误。...预定义异常用于处理常见的Oracle错误,对这种异常情况的处理,无需在程序中定义,由Oracle自动将其触发。它们全部放在PL/SQL自带的标准包中,这样程序员就无需再次定义了。...ORA-01422 TOO_MANY_ROWS SELECT INTO返回多行 ORA-06501 PROGRAM_ERROR 内部错误,需重新安装数据字典视图和PL/SQL包 ORA-06511 CURSOR_ALREADY_OPEN...使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其它的一些Oracle错误。例如,在PL/SQL块中执行DML语句时,违反了约束规定等等。...Oracle提供了2个函数SQLCODE和SQLERRM用于返回错误信息: l SQLCODE:返回错误代码 l SQLERRM:返回与错误代码关联的消息 这样就可以在错误日志表中记录程序在执行过程中发生的错误信息了

    1.9K10

    Oracle应用实战八(完结)——存储过程、函数+对象曹组

    游标 在写java程序中有结果集的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。...集合元素未初始化 CURSER_ALREADY_OPEN 游标已经打开 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值 INVALID_CURSOR 在不合法的游标上进行操作 INVALID_NUMBER...运行 PL/SQL 时,超出内存空间 SYS_INVALID_ID 无效的 ROWID 字符串 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时 范例1:写出被0除的异常的plsql...(重点) 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它...每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

    2.1K60

    Oracle笔记

    在oracle中,数据     完整性可以用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法     中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。...69.常见预定义例外:   (1)case_not_found:在开发pl/sql块中编写case语句时,如果在when子句      中没有包含必须的条件分支,就会出发case_not_found...  (2)cursor_already_open:当重新打开已经打开的游标时,会隐含的触发例外   (3)dup_val_on_index:在唯一索引所对应的列上插入重复的值时,会隐含的     ...触发该例外   (4)invalid_cursor:当试图在不合法的游标上执行操作时,会触发该例外   (5)invalid_number:当输入的数据有误时,会触发该例外   (6)no_data_found...(3)storage_error:如果超出了内存空间或是内存被损坏,就触发该例外   (4)timeout_on_resource:如果Oracle在等待资源时,出现了超时就触发该例外。

    1.6K20

    C#中使用Oracle存储过程返回结果集

    [Employees] 在Oracle数据库中这样定义是错误的,怎么解决?...办法: Oracle中可以使用游标(Cursor)对数据集进行操作,但在存储过程输出参数中直接使用Cursor错误,此时的Cursor应该是一个定义游标的关键字并非类型,所以先要定义一个包,在包中声明全局的自定义游标类型...proc_GetAllProducts(cur_set out cursor_pdt); end pkg_products; 这个包(package)有点类似OO中的接口,C++中的文件头,实现这个包时叫包体...; end; end; 定义成功,且编译通过,就可以先在Oracle中测试,如: /**使用过程测试定义的存储过程**/ declare --定义游标类型的变量 cur_set pkg_products.cursor_pdt...); 注意项目要添加引用程序集:System.Data.OracleClient,代码中也要using;另外如果使用sql语句在C#中作为字符串出现时尽量不要换行,也不要以分号结尾。

    1.4K10

    【MOS】故障排除 Shared Pool优化 (Doc ID 1523934.1)

    减轻Shared Pool负载 Parse一次并执行多次 在OLTP类型的应用中,最好的方法是只让一个语句被解析一次,然后保持这个cursor的打开状态,在需要的时候重复执行它。...此增强功能适用于当FORCE会产生一个不同并且不是想要的执行计划时,从而提高了参数CURSOR_SHARING的可用性。...控制当一个事务提交时是否PL/SQL cursor被关闭。...所以建议在每一个要被KEEP的package中放一个空的存储过程,在执行完DBMS_SHARED_POOL.KEEP之后再调用一下这个空存储过程来保证对象被完全装载。这在7.2之后已经修复了。...有可能不同的SQL文本会映射到相同的hash值,比如:在7.3中,如果一个值在语句中出现2次而且中间正好间隔32个字节的话,这两个语句会映射出相同的hash值。

    33410

    PLSQ编程

    对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。 非预定义 ( Predefined )错误 即其他标准的ORACLE错误。...对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。用户定义(User_define) 错误 程序执行过程中,出现编程人员认为的非正常情况。...异常的分类 Oralce中的异常分为如下三类: 预定义的ORACLE数据库异常:有异常名,有错误代码,有异常信息 非预定义的ORACLE数据库异常:无异常名有错误代码,有异常信息。...格式: OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)]; 在向游标传递参数时,可以使用与函数参数相同的传值方法,即位置表示法和名称表示法...主要有四类:过程:执行特定操作,无返回值;函数:执行复杂操作,有返回值包:逻辑上相关的过程和函数的组合体触发器:事件触发,执行相应的操作 ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它

    1.8K10

    案发现场:被注入的软件及 ORA-600 16703 灾难的恢复

    客户在尝试启动数据库时,是这样一个 ORA-600 错误映入眼帘,反复重试无法消除问题,历史备份,同样存在问题,客户毫无防范的,陷入一场数据库灾难: SQL*Plus: Release 11.2.0.4.0...最后出现错误之处是 20 号对象,在数据库中是 ICOL$ 对象: SQL> select object_name from dba_objects where object_id=20; OBJECT_NAME...-------------------------------------------------------------- ICOL$ 在 bootstrap$ 中,可以找到这条记录,在初始化这个对象的过程中...,数据库在 TAB$ 中找不到这条记录,就出现了 16703 的错误: CREATE TABLE ICOL$("OBJ#" NUMBER NOT NULL,"BO#" NUMBER NOT NULL,"...其实也很简单,当删除了 TAB$ 表中的内容后,数据库是启动引导遇到故障,所以我们只要找到一个良好运行的同平台、同版本 SYSTEM 文件,将引导块全部复制回来,就可以启动数据库了,以下是我的恢复过程截取的一部分

    1.5K40

    典型案例:深入剖析 ORA-04031 的前世今生

    以我这几年的工作经验来说,当我们遇到 Oracle 报错时,通常都会从数据库的 alert 日志看起,结合与错误相关的 trace 文件以及发生错误时的一些系统状态、数据库状态等获取相关信息,综合上面的信息来判断该报错...当客户端的 SQL 操作被传送到oracle端,oracleserver 进程在处理客户端 SQL 请求时,首先需要向 SGA(注意,我这里说的是 SGA 而不是 share pool)申请内存,当 SGA...其中 Library cache 中主要存储的信息有解析后的 SQL 语句,SQL 执行计划和解析和编译后的 PL/SQL 代码单元;而Private SQL Area 只有在使用共享的服务连接方式并且配置...为了看起来更加清楚,上面的过程我用一个流程图做示意: 通过上面这些我们知道了在 shared pool 中请求内存的过程。...open_cursor 如果设置的过大,导致 library cache 中很多对象都处于 pin 状态,而不能释放,那么当申请 shared pool 内存时,通过 LRU 依然不能找到可用空间,就会导致

    1.8K90

    深入剖析 ORA-04031 的前世今生

    以我这几年的工作经验来说,当我们遇到 Oracle 报错时,通常都会从数据库的 alert 日志看起,结合与错误相关的 trace 文件以及发生错误时的一些系统状态、数据库状态等获取相关信息,综合上面的信息来判断该报错...当客户端的 SQL 操作被传送到oracle端,oracleserver 进程在处理客户端 SQL 请求时,首先需要向 SGA(注意,我这里说的是 SGA 而不是 share pool)申请内存,当 SGA...其中 Library cache 中主要存储的信息有解析后的 SQL 语句,SQL 执行计划和解析和编译后的 PL/SQL 代码单元;而Private SQL Area 只有在使用共享的服务连接方式并且配置...为了看起来更加清楚,上面的过程我用一个流程图做示意: ? 通过上面这些我们知道了在 shared pool 中请求内存的过程。...open_cursor 如果设置的过大,导致 library cache 中很多对象都处于 pin 状态,而不能释放,那么当申请 shared pool 内存时,通过 LRU 依然不能找到可用空间,就会导致

    1.2K51

    经典故障分析 -用好UTL_FILE包其实并不是太容易

    故障一: 某环境最近用PL/SQL向远程服务器端写文件时遇到中文乱码情况,该程序主要是提取数据库中插入数据语句,通过UTL_FILE.PUT_LINE 在服务器端写入文本文件,但只要数据中含有中文,那输出文件里的...: 在上述存储过程P_TEST_UTLFILE,我们尝试并发打开51个文件句柄,现在我们执行一下这个存储过程: 从结果里我们可以看到,我们已经一模一样的重现了国航生产的ORA-29283错误,并且出问题的地方就是在...上述情况1经询问,不太可能在我们系统里出现,IPRA里应该是没有在某个时间点(特别是在daily作业的时候)出现文件句柄的并发open的数量超过50的情况。 现在我们重点来关注情况2。...completed 可以看到,在Session 1里,存储过程P_TEST_UTLFILE是可以成功执行的,但请注意,Session 1里已经累计open了50个文件句柄,也就是说如果我在session...,如下所示: 首先执行存储过程P_TEST_UTLFILE,并发打开50个文件句柄,并且不关闭: 此时只要我在上述session中执行任何一个需要调用到utl_file.fopen的存储过程oracle

    2.1K90

    Java程序员的日常——存储过程知识普及

    存储过程是保存可以接受或返回用户提供参数的SQL语句集合。在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装。...为了提高存储过程的健壮性,避免运行错误,建立存储过程时,应该包含异常处理的部分。...预定义异常:PL\SQL提供的系统异常 费预定义异常:用于处理与预定义异常无关的Oracle错误 自定义异常:处理Oracle错误之外的一些异常 使用方法: create or replace procedure...集合元素未初始化 CURSER_ALREADY_OPEN 游标已经打开 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值 INVALID_CURSOR 在不合法的游标上进行操作 INVALID_NUMBER...同时也会在被作用的行上加行锁,以防止其他事务在相应行上执行DML操作 3 执行事务提交或者事务回滚时,Oracle会确认事务变化或回滚事务、结束事务、删除保存点、释放锁 参考 1 Oracle存储过程

    1.7K80
    领券