存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。...可作为一个独立的PL/SQL语句来执行 不能独立执行,必须作为表达式的一部分调用 可以通过out/in out 返回零个或多个值 通过return语句返回一个值,且改值要与声明部分一致,也可以是通过...它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。...逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based 函数索引 Domain 域索引...在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。
其中,隐含游标用于处理SELECT…INTO和DML语句,而显式游标则用于处理SELECT语句返回的多行数据。 为了处理SELECT语句返回的多行数据,开发人员可以使用显式游标。...SQL% FOUND 只有DML语句影响一行或多行时,SQL%FOUND属性才返回true。...Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。...既可以是单个触发事件,也可以是多个触发事件的组合(只能使用OR逻辑组合,不能使用AND逻辑组合)。...Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。
》》它支持SQL的所有数据类型,并且在此基础上扩展了新的数据类型,也支持SQL的函数以及 运算符 》》 PL/SQL可以存储在...如果此时换用PL/SQL语句,结果则不一样了。PL/SQL的语句块可以包含多条SQL语句,而语句 块可以嵌套在程序中,甚至可以存储到Oracle 服务器上。...这对于 编程开发人员是一个福音,他们不需要再写过多的SQL语句,只需要给出参数并调用一次 PL/SQL 的程序块就好。...块中就可以利用 CASE 语句完成判断分类,并把产品名称转换成产品编码。...也可把PL/SQL从一个Oracle 版本移植到其他版本的Oracle 中。
本篇为系列案例之一:标量子查询优化 以下案例来自于某省电信系统EDW性能优化实践,数据库版本为11.2.0.3,运行在ORACLE Exadata一体机上,是个典型的OLAP环境,表上无索引,表无统计信息...1, 每次执行SQL,返回的每行平均消耗的逻辑读338280770/4302704=78.62,大概逻辑读78才能换回一行。...303475,行返回是4,302,704,不知道大家是否还记得在之前我们获取SQL的统计信息的时候,看到SQL每次执行平均换回的行数是4,302,704。...在标量子查询中,当主查询返回一行数据时,所有的标量子查询就要执行一次,如果在连接列有索引时,标量子查询在主表返回的行很少的情况下,对性能影响不大,常常出现在OLTP环境,并且连接列一般都有索引;如果在OLAP...平均每次执行时消耗的逻辑读、物理读,返回的行平均消耗的逻辑读、物理读,平均返回的行数等信息可以用于初步判断SQL是否存在性能问题; 遇到这种标量子查询,就得修改SQL,也就意味着业务需要修改代码,像电信运营商这种环境可能要好一点
一、PLSQL编程 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言.通过增加变量、控制语句,使我们可以写一些逻辑更加复杂的数据库操作....既可以实现类似于Java中的switch语句的作用。也可以像if语句一样来实现范围的处理。...在 case 和when之间声明变量就可以 -- 如果是在when 和 then 之间指定条件那么和if语句是类似的 declare v_age number(3) := &输入年龄; begin...,控制权转移到PL/SQL 块的异常处理部分 异常有两种类型 预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发 用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常...exception when too_many_rows then dbms_output.put_line('返回太多行'); when no_data_found
你需要执行一个 SQL 语句,但是 SQL 语句语法规定需要指定一个表,为此 Oracle 设计了一个只有一行一列的表 DUAL,我们可以使用这个表来执行一些不需要表的 SQL 语句。...Oracle 尽量避免在 SQL语句的WHERE子句中使用函数 在 WHERE 子句中应该尽量避免在列上使用函数,因为这样做会使该列上的索引失效,影响SQL 语句的性能。...尽量避免在 SQL语句中使用 LIKE 前面,我们介绍了尽量避免在SQL语句的WHERE子句中使用函数,因为这样做会使该字段上的索引失效,影响SQL 语句的性能。...在 SQL 的世界中 CASE 语句有类似的效果。下面简单的介绍 CASE 语句的用法。...语句的形式 事实上,CASE 语句有两种形式。
表空间 : 表空间是Oracle对物理数据库上相关数据文件(ORA或者DBF文件)的逻辑映射.一个数据库再逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构.每个数据库至少有一个表...一个数据库在逻辑上被划分成一到若干个表空间,每个 表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表 空间(称之为system 表空间)。...来,在sql 中使用LIKE 语句完成。...在SQL 语句中使用IF-THEN-ELSE 实现的方式: CASE 表达式:SQL99 的语法,类似Basic,比较繁琐 DECODE 函数:Oracle 自己的语法,类似Java,比较简介...处理语句 else 是所有sql数据库都支持的 case 判断列 when 列值 then 显示值 when 列值 then
PL/SQL是Oracle数据库对SQL语句的扩展。...在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算程序语言。...3、运行的过程: PL/SQL程序的运行是通过Oracle中的一个引擎来进行的。这个引擎可能在Oracle服务器端,也可能在 Oracle 客户端。...它可以处理多行记录,类似于高级中的二维数组,使得可以在pl/sql中模仿其他数据库中的表。...2、过程用于执行一系列的动作,而函数用于计算和返回1个值。 3、可以在SQL语句内部通过调用函数来完成复杂的计算,而过程则做不到。
存储过程是保存可以接受或返回用户提供参数的SQL语句集合。在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装。...特点 1 提高性能 存储过程是预先编译过,进行优化后,存储在SQL的内存中,使用的时候不需要重新编译,提高工作效率。...VALUE_ERROR 赋值时,变量长度不足以容纳实际数据 LOGIN_DENIED PL\SQL应用连接到oracle时,提供了 不正确的用户名密码 NOT_LOGGED_ON PL\SQL应用程序在没有连接...在返回值上 存储过程的返回值,可以有多个 函数的返回值只有一个 调用方式上 存储过程的调用方式有:exec、execute、语句块调用 函数的调用方式有:可以在函数块中、也可以直接在sql中使用,比如:...同时也会在被作用的行上加行锁,以防止其他事务在相应行上执行DML操作 3 执行事务提交或者事务回滚时,Oracle会确认事务变化或回滚事务、结束事务、删除保存点、释放锁 参考 1 Oracle存储过程
在 MySQL 中,将多行数据转为多列数据一般可以通过使用 PIVOT(也称为旋转表格)操作来实现。但是,MySQL 并没有提供原生的 PIVOT 操作。...可以使用如下 SQL 语句实现: 复制代码SELECT name, MAX(CASE WHEN course_name = '语文' THEN score END) AS Chinese...= '英语' THEN score END) AS English FROM student GROUP BY name; 这条 SQL 语句执行的步骤是: 根据学生姓名分组; 在每个分组内...,使用 CASE WHEN 语句根据课程名称动态生成一列新的值; 使用 MAX() 函数筛选出每个分组中的最大值,并命名为对应的课程名称; 将结果按照学生姓名进行聚合返回。...方法二:使用 GROUP_CONCAT 函数 除了第一种方法,也可以使用 GROUP_CONCAT() 函数和 SUBSTRING_INDEX() 函数快速将多行数据转为多列数据。
前言:本博客分为两篇,学完之后就可以在项目中使用存储过程进行开发。 在学校的时候虽说上过PL/SQL这门课,然并卵,只恨当时啊!工作关系,需要用到Oracle存储过程。...首先,先介绍一下PL/SQL 是什么? PL/SQL是是由甲骨文公司在90年代初开发,以提高SQL的功能。PL/SQL是嵌入在Oracle数据库中的编程语言之一。...PL/SQL是Oracle数据库对SQL语句的扩展。...在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。...,但返回以字节为单位的值 LENGTH(x) : 返回x中的字符数 LOWER(x) : 在x转换为小写字母,并返回该字符串 LTRIM(x [, trim_string]) : 从x的左修剪字符
3.1:connect role(连接角色) 临时用户,特别时那些不需要建表的用户,通常只赋予他们connect role,connect是使用 oracle的简单权限,...SELECT语句 1:select * from table; select标识选择哪些列 from标识从那个表中选择; 2:SQL语言大小写不敏感,可以写在一行或者多行,关键字不能被缩写也不能分行...语句的结尾 select * from users order by user_id;可以按照多个字段进行排序操作; 19:Oracle之单行函数和多行函数 1:单行函数: (1...世纪存放20世纪的日期; (3):sysdate:返回日期和时间 (4):日期函数 在日期上加上或者减去一个数字结果仍为日期; ...; 2:Oracle连接: 使用连接在多个表中查询数据; 在where子句中写入连接条件; 在表中有相同列时,在列明之前加上表名前缀; 3:连接多给表:
(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2 ②case情况1 case 变量或表达式或字段 when 常量1 then 值1 when 常量2 then 值2...没有添加有效的连接条件,导致多个表所有行实现完全连接 如何解决:添加有效的连接条件 二、分类 按年代分类: sql92: 等值 非等值 自连接 也支持一部分外连接(用于oracle...foreign key(字段名) references 主表(被引用列)) 注意: 支持类型 可以起约束名 列级约束 除了外键 不可以 表级约束 除了非空和默认 可以,但对主键无效 列级约束可以在一个字段上追加多个...sql语句 注意:sql语句支持的是insert、update、delete 设置回滚点: savepoint 回滚点名; ③结束事务 提交:commit; 回滚:rollback; 回滚到指定的地方:...then 语句1; when 值2 then 语句2; … else 语句n; end [case]; 语法2: case when 条件1 then 语句1; when 条件2 then 语句2; …
而单个SQL无法满足需求。这时候用一下SQL的语句块就可以了。 如果你用的是Oracle数据库,那么你就可以用PL/SQL(Procedure Language/SQL),即过程化查询语言。...而我们用的SQL是结构化查询语言,属于第四代语言。 PL/SQL能够实现更加复杂的逻辑操作,像我们使用Java,C等高级语言一样。...但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL就无法使用(PL/SQL是属于Oracle的过程查询语言)。...的基本规则 1、标识符不区分大小写,所有的名称在存储时自动改成大写。...控制语句 1、简单CASE语句 语法格式: CASE case_operand WHEN value THEN ....
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧。...是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正。 PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言。...并且定义在以declare关键字开头的定义部分 二:可执行部分:(begin) 是PL/SQL的主题,包含该块的可执行语句,该部分定义了块的功能,是必须的部分。...的优点: 1、 改善了性能:PL/SQL把整个语句块发送给服务器,这个过程在单次调用中完成,降低了网络拥挤 2、 可重用性:只要有Oracle的地方都能运行 3、 模块化:...语句:语法(有返回值的) 1 CASE demo: 2 DECLARE 3 v_sal emp.sal%TYPE; 4 v_dept emp.deptno%TYPE; 5 v_result
条件判断1 CASE表达式CASE表达式是一个比较常用的表达式工具,它允许在SQL语句中使用逻辑结构为 如果 ... 那么... 如果 ... 那么... 最后 的SQL语句。...中不得不提这个函数,DECODE函数是Oracle特有的,提供了一种在SQL查询中执行简单条件逻辑的方法。...不过个人认为,与CASE表达式相比,DECODE的功能简单有限,而且语法较长,特别是对于复杂的条件逻辑不友好,一般也很少使用。这个用于个人感觉是简单方式的case表达式方式。...resultN 是当expression = searchN时返回的结果。default 是当没有任何searchN匹配expression时返回的值(可选)。...中的一些逻辑判断关键字和条件判断语句以及用法,勤能补拙,希望帮助自己加深记忆的同时也能帮助你。
SQL函数中可执行任意条数的SQL语句。在SQL函数体中,每条SQL语句必须以分号(;)分隔。SQL函数可以返回void或返回return语句指定类型的数据。...所有非returns void函数的最后一句SQL必须是返回指定类型的select语句,函数返回最后一条查询语句的结果,可以是单行或多行结果集。下面是SQL函数的几个例子。...当这种函数用于查询中时,必须由查询本身指定返回的行结构。下面的例子使用动态SQL,返回结果集依赖于作为入参的查询语句。...anyenum在操作上也与anyelement完全相同,它只是在anyelement的基础上增加了一个额外约束,即实际类型必须是枚举(enum)类型。...第一个参数的作用仅是为变量定义数据类型,所以在调用函数时传空即可。 下列语句调用函数返回情况如图12所示。
如果习惯在FROM子句中,而不是WHERE子句中,写连接逻辑,则可以使用JOIN子句。 如果从可阅读性角度来说,表关联的时候,关联条件写在ON子句中,过滤条件写在WHERE子句中,会更让人理解。...如果deptno是主键,不需要改,如果不是,则需要使用DISTINCT来确保每个在emp表中缺少的deptno值只出现一次,如下所示, select distinct deptno from dept...=50 or id=null); no rows selected 因为TRUE or NULL返回TRUE,但是FALSE or NULL返回NULL,所以当使用IN和OR时,要注意是否会涉及到NULL...EXISTS/NOT EXISTS和关联子查询一起使用时,SELECT中的列,不重要,之所以使用了NULL,是为了让注意力集中在子查询的连接操作上,而不是SELECT的列上。 5. ...标量子查询,不需要改主查询中正确的连接操作,他是为现有查询增加新数据的最佳方案。但是当使用标量子查询时,必须保证返回的是标量值(单值),不能返回多行。 7.
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。...out 三种模式的参数 5、不能独立执行,必须作为表达式的一部分调用 6、通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量 7、SQL语句(DML...它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。...逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based 函数索引 Domain...事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。...PL/SQL语句来执行 不能独立执行,必须作为表达式的一部分调用 可以通过out/in out 返回零个或多个值 通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量...它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。...逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based 函数索引 Domain 域索引...事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。
领取专属 10元无门槛券
手把手带您无忧上云