首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle总结【PLSQL学习】

(2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数据库操纵能力强,只需发送命令,无需关注如何实现 (3)多表操作时...程序中:;号表示每条语句的结束,/表示整个PLSQL程序结束 PLSQL与SQL执行有什么不同: (1)SQL是单条执行的 (2)PLSQL是整体执行的,不能单条执行,整个PLSQL结束用/,其中每条语句结束用...设置显示PLSQL程序的执行结果,默认情况下,不显示PLSQL程序的执行结果,语法:set serveroutput on/off; set serveroutput on; 使用基本类型变量,...IS SELECT 语句; 使用无参光标cursor,查询所有员工的姓名和工资【如果需要遍历多条记录时,使用光标cursor,无记录找到使用cemp%notfound】 declare -...我们在上面看PLSQL中的语法已经知道,有一个exception,这个在Oracle中称为例外,我们也可以简单看成就是Java中的异常。。。

2.4K70

【DB笔试面试611】在Oracle中,什么是结果集缓存?

结果集缓存可以将SQL语句查询的结果缓存在内存(SGA的Shared Pool)中,从而显著地改进需要多次执行和查询相同结果的SQL语句的性能。...所以,Result Cache只对那些在平时几乎没有任何DML操作的只读表比较有用,可以减轻I/O的压力。 在实际情况中,结果集缓存仅在少数的情况下是有效的。...在以下情况中,结果集不会被缓存: ① 查询使用非确定性的函数、序列和临时表的结果集不会被缓存。 ② 查询违反了读一致性时结果集将不会被缓存。 ③ 引用数据字典视图的查询的结果集不会被缓存。...l STATUS函数:返回值若为DISABLED则表示没有开启结果集缓存;若为ENABLED则表示已经开启并且可以使用结果集缓存;若为BYPASS则表示已经开启结果集缓存但不可以使用结果集缓存,此时可以通过执行...如果是,那么函数就不用重新执行了,而是把缓存中的值简单返回即可。每当发现要修改的是缓存所依赖的表,数据库就会自动把缓存失效。 有两种函数缓存机制,分别是确定性函数缓存和函数结果集缓存。

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

    PLSQL --> 动态SQL的常见错误

    1.使用动态DDL时,不能使用绑定变量 下面的示例中,在创建表示,使用了绑定变量:dno,在执行的时候收到了错误信息。...使用USING传递参数到动态SQL或使用INTO子句传递结果集到变量应注意按正确的顺序排列处理 下面的示例中由于v_ename与v_sal为不同的数据类型,在使用INTO时不小心将顺序颠倒,导致错误产生...当然,如果数据类型相同, 且不会存在溢出的情况下将没有错误提示。...RETURNING INTO返回 下面的示例中,使用了动态的单行SELECT查询,并且使用了RETURNING子句来返回值。...8.动态SQL中RETURNING INTO返回DML操作的结果,对于SELECT查询返回的结果,在执行EXECUTE IMMEDIATE时,直接使用INTO子句来传递。

    2.2K20

    Web-第二十四天 Oracle学习【悟空教程】

    2.别名用法 在查询的结果列中可以使用别名 Select 列名 别名,列名别名,... from emp; 别名中,有没有双引号的区别就在于别名中有没有特殊的符号或者关键字。 ?...在LIKE中如果没有关键字表示查询全部 ? 查询名字中带有“M”的雇员 ? 在oracle中不等号的用法可以有两种形式“”和“!=” 范例:查询雇员编号不是7369的雇员信息 ? ?...2、用户赋权限 新创建的用户没有任何权限,登陆后会提示 ? Oracle中已存在三个重要的角色:connect角色,resource角色,dba角色。...序列 在很多数据库中都存在一个自动增长的列,如果现在要想在oracle 中完成自动增长的功能, 则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。...is 结果变量 数据类型; begin return(结果变量); end[函数名]; 存储过程和存储函数的区别 一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。

    1.9K20

    Oracle查看分析执行计划、建立索引以及SQL优化

    ) 对非唯一索引列上进行的任何查询 c) INDEX FULL SCAN(索引全扫描): 进行全索引扫描时,查询出的数据都必须从索引中可以直接得到(注意全索引扫描只有在CBO模式下才有效) ------...不过遗憾的是,由于返回的结果集中包括所有字段,所以通常的执行计划中,即使连接列存在索引,也不会进入到执行计划中,除非进行一些特定列处理(如仅仅只查询有索引的列等)。...如果该Bucket为空,则丢弃匹配表的这条数据。如果不为空,则需要看该Bucket是在内存里还是在磁盘上。...如果在内存中,就直接访问这个Bucket并检查其中的数据是否匹配,有匹配的话就返回这条查询结果。...SQL 语句优化 当Oracle数据库拿到SQL语句时,其会根据查询优化器分析该语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行的查询计划,而不是Sql语句。

    4.1K20

    mysql 缓存机制

    命中条件 缓存存在一个hash表中,通过查询SQL,查询数据库,客户端协议等作为key,在判断命中前,mysql不会解析SQL,而是使用SQL去查询缓存,SQL上的任何字符的不同,如空格,注释,都会导致缓存不命中...工作流程 1.服务器接收SQL,以SQL和一些其他条件为key查找缓存表 2.如果找到了缓存,则直接返回缓存 3.如果没有找到缓存,则执行SQL查询,包括原来的SQL解析,优化等。...4.执行完SQL查询结果以后,将SQL查询结果缓存入缓存表 缓存失败 当某个表正在写入数据,则这个表的缓存(命中缓存,缓存写入等)将会处于失效状态,在Innodb中,如果某个事务修改了这张表,则这个表的缓存在事务提交前都会处于失效状态...mysql需要设置单个小存储块大小,在SQL查询开始(还未得到结果)时就去申请一块内存空间,所以即使你的缓存数据没有达到这个大小也需要这个大小的数据块去保存(like linux filesystem’...: 如果某个数据表被锁住,是否仍然从缓存中返回数据,默认是OFF,表示仍然可以返回 GLOBAL STAUS 中 关于 缓存的参数解释: Qcache_free_blocks: 缓存池中空闲块的个数

    2.5K20

    PLSQ编程

    如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。...如果在游标查询语句的选择列表中存在计算列,则必须为这些计算列指定别名后才能通过游标FOR 循环语句中的索引变量来访问这些列数据 --获取emp表中所有员工的信息 declare cursor...SQL命令执行完毕立即关闭隐式游标。 –删除EMP 表中某部门的所有员工,如果该部门中已没有员工,则在DEPT 表中删除该部门。...程序单元 是数据库中命名的PL/SQL块,作为数据库对象保存在数据库中。...主要有四类:过程:执行特定操作,无返回值;函数:执行复杂操作,有返回值包:逻辑上相关的过程和函数的组合体触发器:事件触发,执行相应的操作 ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它

    1.5K10

    2018-07-12 Oracle for update和for update nowait的区别Oracle for update和for update nowait的区别

    : 首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何限制, 虽然这时候有可能另外一个进程正在修改表中的数据,并且修改的结果可能影响到你目前...如果加入了for update, 则Oracle一旦发现(符合查询条件的)这批数据正在被修改,则不会发出该select语句查询,直到数据被修改结束(被commit),马上自动执行这个select语句。...如果仅仅用update语句来更改数据时,可能会因为加不上锁而没有响应地、莫名其妙地等待,但如果在此之前,for update NOWAIT语句将要更改的数据试探性地加锁,就可以通过立即返回的错误提示而明白其中的道理...经过测试,以for update 或 for update nowait方式进行查询加锁,在select的结果集中,只要有任何一个记录在加锁,则整个结果集都在等待系统资源(如果是nowait,则抛出相应的异常...: 资源已被占用; 执行操作时出现 WAIT 超时 通过这段代码案例,我们可以得到结论,for update of columns 用在多表连接锁定时,可以指定要锁定的是哪几张表,而如果表中的列没有在for

    1.7K20

    Oracle学习笔记四

    在写java程序中有集合的概念,那么在pl/sq中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。...系统定义异常 no_data_found(没有找到数据) too_many_rows( (select.into语句匹配多个行)   zero_ divide(被零除)   value_error(...,一组为了完成特定功能的SQL句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。...is 结果变量 数据类型 begin return(结果变量); end[函数名]; 存储过程和存储函数的区别:   一般来讲,过程和函数的区别在于函数可以有一个返回值,而过程没有返回值;   ...每当一个特定的数据操作语句( insert, update, delete)在指定的表上发出时, Oracle自动地执行触发器中定义的语句序列。

    1.3K31

    Spark Block存储管理分析

    先从BlockManager获取该blockId对应的数据是否存在,如果本地存在(已经处理过),则直接返回Block结果(BlockResult);否则,查询远程的Executor是否已经处理过该Block...,就不需要重新计算了,如果没有找到对应的已经处理过的Block数据,则调用RDD的compute()方法进行处理,处理结果根据StorageLevel设置,将Block数据存储在内存或磁盘上,缓存供后续...从本地获取,根据StorageLevel设置,如果是存储在内存中,则从本地的MemoryStore中查询,存在则读取并返回;如果是存储在磁盘上,则从本地的DiskStore中查询,存在则读取并返回。...Task请求读取Block数据 如果该Block数据不存在,则直接返回空,表示当前RDD的该Partition并没有被处理过。...如果当前Block数据存在,并且没有其他Task在写,表示已经完成了些Block数据操作,则该Task直接读取该Block数据。

    1.5K100

    【史上最详解】Oracle数据库各种锁 - 看完这篇就够了!

    在 Oracle 数据库中,它并不是对某个表加上锁或者某几行加上锁, 锁是以数据块的一个属性存在的。...事务在修改块时(其实就是在修改行)会检查行中 row header 中的标志位,如果该标志位为0(该行没有被活动的事务锁住),就把该标志位修改为事务在该块获得的itl的序号,这样当前事务就获得了对记录的锁定...如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。 1:对返回结果集进行update或delete操作会发生阻塞。 左下角的时间执行了很久。 ?...---- Select … for update 当一个用户执行 select..for update 对返回的结果集进行修改时,如 果结果集已经被另一个会话锁定,此时 Oracle 已经对返回的结果集上加了排它的行级锁...特别是在 OLAP 系统中,从表经常会是非常巨大的表,在这种情况下,如果从表没有索引,那么查询几乎是不可想象的。

    18.3K87

    oracle基本面试题_mongodb面试题

    显示游标是用cursor…is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询...函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程 4). 在sql数据操纵语句中只能调用函数而不能调用存储过程 4....简言之就是存在加了锁而没有解锁,可能是使用锁没有提交或者回滚事务,如果是表级锁则不能操作表,客户端处于等在状态,如果是行级锁则不能操作锁定行 解决办法: 1)....如果把体现企业规则的 运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。 缺点: 1. 可移植性差 2....; 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值;两者都可以通过out参数返回值, 如果需要返回多个参数则建议使用存储过程;在sql数据操纵语句中只能调用函数而不能调用存储过程

    3.3K20

    oracle的操作

    在嵌套的时候,最内层的函数最先被执行,执行的结果被传递到它的上层函数,作为参数使用,然后依次从内向外执行,直到所有的函数执行完。...例如:执行一个查看当前日期的语句 select sysdate from dual,这条语句在放在放在任何一个oracle数据库当中都不会报错, 所以一般做一些特定查询的时候用这个表是最稳妥的。...put_line函数来输出内容 end; 注意,如果在sqlplus中,需要执行set serveroutput on来开启显示结果 5.pl/sql中执行的命令 在PL/SQL程序块中可以使用各种...只能使用in模式参数传入参数值 在函数的声明中,必须包括一个带有数据类型的RETURN 子句,表示函数计算后的最终返回函数的结果类 型。...在PL/SQL块中至少包括一个有效的RETURN语句,以便返回函数的最终计算结果。

    1.6K20

    oracle的userenv和nls_lang详解

    最后看下plsql上userenv执行的结果 ? 可以发现在windows上使用plsql的时候语言和地区使用的是plsql的环境变量NLS_LANG。...如果Oracle通用安装程序没有指定NLS_LANG,则默认值是AMERICAN_AMERICA.US7ASCII 如果language没有指定,则language的默认值是AMERICAN 如果territory...如果charset没有指定,则在创建session的时候charset的值是数据库的characterset。...由以上分析可知,不管是什么样的客户端程序(不管是plsql还是sqlplus),在创建会话的时候字符都是取数据库本身的字符集。因此客户端程序和session的字符集不一致的时候会产生转码。...如果转码的过程中出现了字节损失,则存储的真实数据就是损失之后的数据。至于我们看到的乱码是因为存储的数据会在查询的时候再次转码成客户端程序的字符集,由于数据缺失,因此就乱码了。

    2.4K20

    PLSQL基础语法

    这时候用一下SQL的语句块就可以了。 如果你用的是Oracle数据库,那么你就可以用PL/SQL(Procedure Language/SQL),即过程化查询语言。这是第三代语言。...但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL就无法使用(PL/SQL是属于Oracle的过程查询语言)。...如果你要在MYSQL/SQLSERVER实现复杂的逻辑查询,那你只能通过编写存储过程实现。 下面对PL/SQL常用的一些基础知识进行讲解。...id = 3; commit; END; --查看 select * from t_plsql_test; 二、PL/SQL的基本规则 1、标识符不区分大小写,所有的名称在存储时自动改成大写。...至于非预定义异常和自定义异常这里不做介绍。一般情况下,我们可以在存储过程的异常处理模块中将出错的信息保存到特定的系统表中,这样我们就可以根据日志记录得知执行的错误。

    2.6K110

    Oracle调优之看懂SQL执行计划explain

    t 不过如果是使用PLSQL的话,那就可以使用PLSQL提供的查询执行计划了,也就是按F5 打开PLSQL工具 -> 首选项 -> 窗口类型 -> 计划窗口 ,在这里加入执行计划需要的参数...ROWID是一个伪列,数据库里并没有这个列,它是数据库查询过程中获取的一个物理地址,用于表示数据对应的行数。...,也可以并行执行 索引全扫描会按照叶子块排序返回,而索引快速全扫描则是按照索引段内存储块顺序返回 索引快速全扫描的执行结果不一定是有序的,而索引全扫描的执行结果是有序的,因为索引快速全扫描是根据索引行在磁盘的物理存储顺序来扫描的...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标SQL依然可以使用跳跃索引 如图执行计划就有...笛卡尔连接(Cross join) 如果两个表做表连接而没有连接条件,而会产生笛卡尔积,在实际工作中应该尽可能避免笛卡尔积 对于这些连接的详细介绍可以查看《收获,不止sql调优》一书,或者查看我做的读书笔记

    7.9K21

    Oracle SQL调优系列之看懂执行计划explain

    t 不过如果是使用PLSQL的话,那就可以使用PLSQL提供的查询执行计划了,也就是按F5 打开PLSQL工具 -> 首选项 -> 窗口类型 -> 计划窗口 ,在这里加入执行计划需要的参数 找个...SQL,用PLSQL执行一下,这是plsql的简单使用 解释一下这些参数的意思: 基数(Rows):Oracle估计的当前步骤的返回结果集行数 字节(Bytes):执行SQL对应步骤返回的字节数...ROWID是一个伪列,数据库里并没有这个列,它是数据库查询过程中获取的一个物理地址,用于表示数据对应的行数。...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些在where条件中没有目标索引的前导列指定查询条件但是有索引的非前导列指定查询条件的目标SQL依然可以使用跳跃索引 如图执行计划就有...笛卡尔连接(Cross join) 如果两个表做表连接而没有连接条件,而会产生笛卡尔积,在实际工作中应该尽可能避免笛卡尔积 对于这些连接的详细介绍可以查看《收获,不止sql调优》一书,或者查看我做的读书笔记

    77710

    PLSQL --> 异常处理(Exception)

    为了提高程序的健壮性,可以在PL/SQL块中引 入异常处理部分,进行捕捉异常,并根据异常出现的情况进行相应的处理。 一、异常的类型 ORACLE异常分为两种类型:系统异常、自定义异常。...时,没有找到数据 DUL_VAL_ON_INDEX 试图在一个有惟一性约束的列上存储重复值 CURSOR_ALREADY_OPEN 试图打开一个已经打开的游标 TOO_MANY_ROWS SELECT...时,查询的结果是多值 ZERO_DIVIDE 零被整除 2.非预定义异常 ORACLE为它定义了错误编号,但没有定义异常名字。...自定义异常与Oracle错误没有任何关系,有开发人员为特定情况所定义的例外 下面的例子中当输入empno为时,尽管该雇员编号不存在,但PL/SQL代码并未给出适当的提示 scott@ORCL>...对于自定义的异常处理需要显示的触发,其步骤如下 a.定义异常(在declare部分进行定义) b.显示触发异常(在执行BEGIN部分触发异常,使用RAISE语句) c.引用异常(在EXCEPTION

    1.6K10

    SQL中EXISTS的用法

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False EXISTS 指定一个子查询,检测 行 的存在。...只是返回一个ture或false的结果(这也是为什么子查询里是select ‘x’的原因 当然也可以 select任何东西) 也就是它只在乎括号里的数据能不能查找出来,是否存在这样的记录。...其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果存在,返回ture则输 出,反之返回false则不输出,再根据主查询中的每一行去子查询里去查询....执行顺序如下: 1.首先执行一次外部查询 2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当 前行的值。 3.使用子查询的结果来确定外部查询的结果集。...) not exists的执行顺序是:在表中查询,是根据索引查询的,如果存在就返回true,如果不存在就返回false,不会每条记录都去查询。

    1.7K30
    领券