,明显是应用写的SQL出现了错误导致的,但是因为未将出错的SQL打印到日志中,所以不知道究竟是什么SQL出错了,由于逻辑中涉及到很多的SQL,逐个排查,非常耗时。...ORA-00933,意思是“SQL command not properly ended”,明显是SQL的语法出现错误,但是现在的问题,就是如何找到错误的SQL?...(); PL/SQL procedure successfully completed....,碰巧解析错误的会执行多次,可能瞬时导致磁盘空间压力,因此Oracle中任何的event,我们在使用前,一定要知道他的副作用,避免带来影响。...其中一项,就是应用执行错误的SQL语句需要打印到应用日志中,包括SQL原文、报错信息、参数等,一方面为监控报警提供数据,另一方面便于问题的排查。
-02289的报错: [oracle@bogon trace]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Wed...SQL> select s2.nextval from dual; select s2.nextval from dual * ERROR at line 1: ORA-02289:.../u01/app/oracle/diag/rdbms/demo/demo/trace/demo_ora_3435.trc: ORA-02289: sequence does not exist 进而在...trc文件中进一步查询具体报错的SQL信息等: [oracle@bogon trace]$ vi demo_ora_3435.trc ... 17 *** 2023-04-26T22:00:27.300081...我这里模拟是直接查询了不存在的序列,但是报这个错误其实未必是数据库问题,可以在MOS多搜索下相关案例,也有程序配置问题导致的情况。
sql 如下: select sequence_name from user_sequences where sequence_name= ‘参数’ 需要注意的是 oracle...例子:(这是使用simple 框架实现) // 判断 oracle sequence 是否已经存在 public static boolean isSequenceExists(final DataSource...() { @Override public Boolean doInConnection(final Connection con) throws SQLException { String sql...user_sequences where sequence_name= ‘”+sequencename.toUpperCase()+”‘”; ResultSet rs= con.prepareStatement(sql
在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛出一堆难以理解的...本文只介绍3中PL/SQL异常的三种高级形态,用于解决Oracle内置异常过少,很多时候不能够满足实际的使用需求。...当我们输入存在的员工编号时,程序能够正常返回结果;如果输入不存在ID,则select into语句会抛出没有返回行,进而使程序进入异常处理部分(本部分为举例),程序同样执行成功;当输入一个负数时,if条件语句就会进入到...PL/SQL procedure successfully completed. - 这下抛出的错误就容易理解多了。...在异常处理部分,我们使用了一个PL/SQL语句块来处理这个错误,声明两个变量,并将SQLCODE和SQLERRM以字面值赋值的方法给这两个变量。
Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理。...1.预定义异常 ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理Oracle常见的错误 NO_DATA_FOUND SELECT ... INTO ......二、异常处理 PL/SQL中,异常处理按个步骤进行: 定义异常 抛出异常 捕获及处理异常 a.定义异常 exception_name EXCEPTION; b.抛出异常 RAISE exception_name...错误没有任何关系,有开发人员为特定情况所定义的例外 下面的例子中当输入empno为时,尽管该雇员编号不存在,但PL/SQL代码并未给出适当的提示 scott@ORCL> declare 2 e_integrity...从Oracle 10g开始,在编写PL/SQL子程序之前开发人员可以激活警告检查.
=============================== 一、序列 是一个Oracle对象,提供唯一的数字,在需要时根据指定的增量值来递增,通常用于产生主键值 类似于SQL server中的IDENTITY...序列缓存与否(默认NOCACHE) 关于创建序列,使用序列所需要的权限请参考:Oracle 用户、对象权限、系统权限 --创建一个序列 SQL> CREATE SEQUENCE my_seq...查看序列当前的有效值 --当第一次使用序列时指定了currval列,结果出现如下错误提示 SQL> SELECT my_seq.currval FROM dual; SELECT my_seq.currval...--出现了下面的错误,怀疑是授权的问题 SQL> INSERT INTO robinson.dept(deptno,dname,loc) 2 VALUES(my_seq.currval,'Customers...SQL> DROP SEQUENCE my_seq; Sequence dropped 8.创建序列的详细语法:CREATE SEQUENCE 二、同义词 是Oracle对象的别名,使用同义词访问相同的对象
众所周知,程序的错误一般情况下分为两类:编译错误和运行时错误。其中运行时错误被称为异常。PL/SQL语句块中处理异常的部分即为异常处理部分。在异常处理部分,可以指定当特定异常发生时所采取的动作。...本文我们就来聊一聊PL/SQL异常处理的那些事儿。 ? PL/SQL有两种类型的异常:内置异常和用户自定义异常。其中,内置异常又分为预定义异常和非预定义异常。...当输入的员工编号存在时,输出员工姓名,当员工编号不存在时,会有运行错误。...PL/SQL procedure successfully completed....这时可以通过EXCEPTION_INIT编译指令进行错误代码和名称的关联。当PL/SQL语句块的可执行部分出现某个运行错误时,会抛出不同类型的异常。
/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据 PROGRAM_ERROR...PL/SQL 内部问题,可能需要重装数据字典& pl....运行 PL/SQL 时,超出内存空间 SYS_INVALID_ID 无效的 ROWID 字符串 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时 基本语法 1....用pl/sql developer debug 连接数据库后建立一个Test WINDOW,在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试 关于oracle存储过程的若干问题备忘 1....在oracle中,数据表别名不能加as,如: select a.appname from appinfo a;-- 正确 select a.appname from appinfo as a;-- 错误
做数据的导入导出操作,最常用的就是imp/exp和impdp/expdp,经常会碰见各种错误,之前总结过一些,《解决导入过程中出现的ORA-02289错误》、《生产数据导入测试环境碰见的一些问题》。...补充一些最近碰见的错误。...1. exp导出提示"PLS-00302:必须说明SET_NO_OUTLINES 组件" 如果客户端是Oracle 11g,而服务器端是Oracle 9i,执行exp就会有如下错误: Export: ...All rights reserved EXP-00056: 遇到 ORACLE 错误 6550 ORA-06550: 第 1 行, 第 41 列: PLS-00302: 必须说明 'SET_NO_OUTLINES...' 组件 ORA-06550: 第 1 行, 第 15 列: PL/SQL: Statement ignored EXP-00000: 导出终止失败 Oracle不同版本导入导出存在一些问题
$ORACLE_HOME/clone/bin/perl clone.pl ORACLE_BASE=$ORACLE_BASE ORACLE_HOME=$ORACLE_HOME ORACLE_HOME_NAME...升级前的检查需要跑一个脚本/preupgrd.sql 本来想速战速决,没想到检查的时候竟然抛出了一个错误。...,因为我这个备库是没有使用ASM的,怎么会抛出和ASM相关的错误呢。...可见原来的主库是使用了ASM,但是在备库端压根没有用到,怎么会抛出这个错误呢。 查看alert日志,发现这个错误还挺特别。...后台会继续检查+DATA这个不存在的虚拟存储,然后最终从数据字典层面统一这些信息。 再次做升级前的检查,就没有任何问题了。
看看ORA-02298的错误描述,因为存在独立的字节点记录,导致生效约束操作报错, ? 通俗一些,就是子表外键对应的主表主键/唯一约束键值不存在,所以此时无法生效外键约束。...主表不存在id=2这条记录,但子表中存在外键字段id_a=2的这条记录,只是由于disable了约束所以才可以insert,但实际此时是无法enable约束,这和上面执行impdp的效果相同, ?...使用如下SQL,可以根据子表名称和子表外键约束名称,自动拼接出需要删除子表非法数据的SQL语句,复制出来继续执行就行, SELECT ' delete from ' || a.table_name...脚本, https://github.com/bisal-liu/oracle/blob/832c9c34c068981405a68bae55de885d78cf7bca/solve_illegal_constraint_data...解决ORA-02289错误,要理解其本质,即子表外键值存在不属于主表主键/唯一约束键的情况。 2. 一种方法是手工删除子表中存在的非法数据,保证主子表关系正确。 3.
本文链接:https://blog.csdn.net/wangtongxue123456/article/details/79681868 PLSQL PL/SQL 基础语法 PL/SQL 的程序结构...IF 语句 循环语句 第一种 while 第二种 loop 第三种 FOR 光标 光标的语法 光标的属性 光标数的限制 带参数的光标 例外(错误) 系统列外 自定义列外 PLSQL PL/SQL 是...Oracle 对 sql 语言的过程化扩展, 指在sql 命令语言中增加了过程处理语句(如分支、循环等),使sql语言具有过程处理能力 PL/SQL 基础语法 PL/SQL 的程序结构 declare...; end; 光标的属性 %found 光标取到值为true %notfound 光标取不到值true %isopen 判断光标是否打开 %rowcount 影响的行数 光标数的限制 默认情况下,oracle...) Timeout_on_resource (在等待资源时发生超时) 自定义列外 定义变量,类型是 exception 使用raise抛出自定义列外 --自定义例外: set serveroutput
游标可以理解为是PL/SQL中的结果集,我们通过游标可以提取结果集中的每行记录。 ?.../SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据 PROGRAM_ERROR...PL/SQL 内部问题,可能需要重装数据字典& pl....运行 PL/SQL 时,超出内存空间 SYS_INVALID_ID 无效的 ROWID 字符串 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时 范例1:写出被0除的异常的plsql...每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
/sql developer debug 连接数据库后建立一个Test WINDOW 在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试 关于oracle存储过程的若干问题备忘.../SQL 应用程序连接到 oracle 数据库时,提供了不 正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下...访问数据 PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& pl..../SQL 系统包 ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容 SELF_IS_NULL...使用对象类型时,在 null 对象上调用对象方法 STORAGE_ERROR 运行 PL/SQL 时,超出内存空间 SYS_INVALID_ID
.'); end; 用户自定义异常就是用户定义一个异常情况,遇到这种情况再对这种情况进行处理 因为用户定义的异常不一定是Oracle返回的系统错误,系统不会自动触发,需要在声明部分定义。...而用户自定义异常以及预定义异常不回终止程序,但会终止该 PL/SQL 代码块,所以一个存储过程中可以有多个 PL/SQL 代码块。...关于异常的语法及定义: 什么是异常: PL/SQL用异常和异常处理器来实现错误处理 Oracle中出现错误的情形通常分为编译时错误(compile-time error)和运行时错误(run-time...异常在PL/SQL执行过程中很可能出现 对异常如果不进行处理,异常可能会中断程序的运行 捕获异常的规则: 在异常部分WHEN 子句没有数量限制 当异常抛出后,控制无条件转到异常处理部分 EXCEPTION...编写PL/SQL块,使用SELECT语句将管理者编号为空的员工的姓名及工作编号显示出来,如果符合条件的员工多于一人,则返回字符串“最高管理者人员过多!”
drop index teachername; 序列 序列是Oracle提供的用于产生一系列唯一数字的数据库对象。...创建序列要有序列权限 grant create sequence,select any sequence to 用户名 --dba权限包括以上权限,所以不用重新赋予 序列的创建 SQL例子:.../SQL块 块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是在编写块,要完成简单的功能,可能需要一个块,复杂的功能,要一个块中嵌套另一个块 PL/SQL块由三个部分组成:定义部分.../*异常处理部分——处理运行的各种错误*/ end; 实例1:只包括执行部分的pl/sql块 /*只要涉及输入就需要打开输出选项*/ set serveroutput on --打开输出选项...PL/SQL函数 函数是命名了的、存储在数据库中的PL/SQL程序块。
在过程,包,函数,触发器中调用Oracle相关动态性能视图时,需要授予适当的权限,否则会收到表和视图不存在的错误提示。即使你可以单独查询这些视图。...--------------------------------- 5/1 PL/SQL: SQL Statement ignored 5/33 PL/SQL: ORA-00942:...table or view does not exist 2、分析与解决 --根据上面提示的错误信息,咋一看就是表和视图不存在 --而实际上动态性能视图是一个同义词,并非真正的视图,下面尝试使用sys帐户对其赋予权限到所需用户...--收到了ORA-02030错误信息,也就是说只能对固定的表和视图进行权限赋予 SQL> conn / as sysdba Connected....--------------- oracle SQL> conn / as sysdba Connected.
概述 PL/SQL简介 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入Sql语言,还可以定义变量和常量,允许使用条件语句和循环语句...pl/sql是面向过程的语言。 ? 不同数据库的SQL扩展 PL/SQL 是Oracle数据的SQL扩展。 SQL/PL 是DB2数据库的SQL扩展。...---- PL/SQL块 块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上 就是编写pl/sql块。...---- PL/SQL基础语法 ---- 程序结构 declare 说明部分(变量说明\游标声明\例外说明) begin 语句序列(DML语句) exception 例外处理语句...oracle会自动启动一个pmon(process monitor)的一个进程 --将pl/sql程序中未关闭的资源释放 --所以 close c_emp; 还是会执行的 close c_emp
1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle...的pl/sql的概念 2.掌握pl/sql编程技术(过程、函数、触发器) pl/sql是标准sql语句的扩展 简介 1.过程、函数、触发器都是由pl/sql编写...2.过程、函数、触发器是在oracle中 3.pl/sql是非常强大的过程语言 4.过程、函数等可以在java程序被调用 学习必要性:.../SQL: 数字或值错误 : 字符串缓冲区太小 当ename为MARTIN时,会报上述错误,解决方法,定义v_ename时,v_ename emp1.ename%type; ②...实例:编写一个存储过程,输入一个名字,工资加1000,如果没有该人,抛出自定义例外。 8.oracle的视图 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的行和列数据。
如果PL/SQL程序块一旦产生异常,而程序并没有指出如何处理,那么程序就会自动终止运行。...(3)当异常处理结束后,Oracle就将处理权交给调用者。结束PL/SQL块的运行。 Oracle将异常分为预定义异常、非预定义异常和自定义异常三种。...1、预定义异常(Predefined) 当PL/SQL应用程序违反了Oracle规定的限制时,就会隐含地触发一个内部异常,这就是预定义异常。...预定义异常用于处理常见的Oracle错误,对这种异常情况的处理,无需在程序中定义,由Oracle自动将其触发。它们全部放在PL/SQL自带的标准包中,这样程序员就无需再次定义了。...使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其它的一些Oracle错误。例如,在PL/SQL块中执行DML语句时,违反了约束规定等等。
领取专属 10元无门槛券
手把手带您无忧上云