oracle函数

oracle练习-day04

心不动则不痛 提交于 2020-01-15 22:34:06
- - - - - - - - - - - - - - - - - - - - - - - - - - - Oracle day04 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 01 .什么是PL / SQL ? 通俗理解:plsql: Procedure language sql 过程化语言 plsql是一组 sql 语句集合,在这个plsql中集合语句中可以处理复杂业务逻辑 (申明变量、条件分支、循环语句、异常处理) 优点:如果使用plsql语言,编写存储过程 函数,提供java代码调用,减少访问数据频率 缺点:对程序员要求比较高(高级程序员 或 专业DBA),存储过程 函数 移植不方便 - - 02 .PL / SQL 基本语法 declare - - 声明变量 (普通变量、常量、引用型变量、记录型变量) begin - - DML语句(逻辑语句) end ; - - 03 .普通变量和常量使用 - - 类似于java中 private String myname = "老王" ; declare myname varchar2( 30 ) : = '老王' ; begin myname : = '隔壁老王' ; select e.ename into myname from

Oracle数据库自带了decode()函数

喜夏-厌秋 提交于 2020-01-15 21:59:52
Oracle数据库自带了decode()函数,函数的使用方法如下: SELECT emp.ename, emp.job, emp.sal, decode(job, 'manager', sal * 1.2, 'ANALYST', sal * 1.1, 'salesman', sal * 1.05, Sal) FROM emp; 类似于java中学过的case语句,根据不同的条件进行不同的操作,但是在Mysql中是不支持这个函数的想要实现上面的功能,Mysql中编写的代码如下: SELECT emp.ename, emp.job, emp.sal, (CASE WHEN emp.job = 'manager' THEN sal * 1.2 WHEN 'ANALYST' THEN sal * 1.1 WHEN 'salesman' THEN sal * 1.05 ELSE Sal END) as bonus FROM emp; 来源: https://www.cnblogs.com/coder-wf/p/12198864.html

Oracle索引大全

隐身守侯 提交于 2020-01-15 20:09:29
文档结构如下: 前言: Oracle 官方文档对索引的描述真是弱透了,对索引的说明就是一坨……,support也没有很好的资料,下面还是用的官方上的内容经过自己的整理加上网上的资料;至于为什么用索引,以及索引的重要性,相信大家都知晓;如果把数据库所有的表比如成一本书,那么,索引就是书的目录,你不可能每一次查看书的内容从第一页读到最后一页,不用目录吧!! 索引类型: 索引是与表和群集关联的可选结构,可以使SQL查询对表执行得更快。正如本手册中的索引可以帮助您更快地找到信息(没有索引)一样,Oracle数据库索引提供了对表数据的更快访问路径。您可以使用索引而无需重写任何查询。结果是相同的,但是可以更快地看到它们。 Oracle数据库提供了几种索引方案,这些方案提供了互补的性能功能。这些是: B树索引:默认索引和最常见索引 B树集群索引:专门为集群定义 哈希集群索引:专门为哈希集群定义 全局和局部索引:与分区表和索引有关 反向键索引:对Oracle Real Application Clusters应用程序最有用 位图索引:紧凑;最适合具有少量值的列 基于函数的索引:包含函数/表达式的预先计算的值 域索引:特定于应用程序或盒带。 索引在逻辑上和物理上独立于关联表中的数据。作为独立的结构,它们需要存储空间。您可以创建或删除索引,而不会影响基表,数据库应用程序或其他索引。当您插入

Oracle 语句

冷暖自知 提交于 2020-01-14 19:23:04
FOR UPDATE 语句 FOR UPDATE 语句是用于锁住表的部分或全部数据(多用于pl/sql developer手动修改数据;也可以用来在Oracle函数中用来锁表数据,然后再执行操作数据的语句,以保证数据的唯一性)。 锁住表的部分或全部数据的意思即除了当前执行for update这个事务,不允许其他的事务对 锁住的数据 进行增、删、改操作,这里体现了数据的唯一性。 注意:正常情况下锁表,对数据进行操作后一定要记得commit提交 。 因为正常情况下只有通过commit或者rollback才能解除锁。 例: SELECT * FROM TABLE1 WHERE DEPTNO = 10 FOR UPDATE ;  --只对满足条件的部门编号为10的数据进行锁定 SELECT * FROM TABLE1 WHERE FOR UPDATE ;  --对 TABLEFORTEST 表 当前的所有数据 进行锁定(即新增的数据不受影响,随便嗨) FOR UPDATE的延申用法: FOR UPDATE OF COLUMN、FOR UPDATE WAIT、FOR UPDATE NOTWAIT、FOR UPDATE SKIP LOCKED 例:SELECT * FROM TABLE1 E , TABLE2 D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO =

Oracle keep函数讲解

拜拜、爱过 提交于 2020-01-14 09:05:15
keep函数 聚合函数(min/max/sum......) keep(dense_rank first/last order by xxx) 应用场景1: select col1, min(col2) keep(dense_rank first order by col3) as aaa from xxx group by col1; 注释: 按表字段col1分组,将分组后的数据按字段col3升序排序,取排序后的首行字段col2,若是排序时出现字段col3字段一样的情况导致首行多行并列,则取最小值。 应用场景2: select a.*, min(col2) keep(dense_rank first order by col3) over(partition by col1) as aaa from xxx a; 注释: 表原表数据粒度保持不变,新增字段aaa,按col1字段分组后的数据按字段col3升序排序,取排序后的首行字段col2,若是排序时出现字段col3字段一样的情况导致首行多行并列,则取最小值。 注意点: keep函数是分组排序后取首行/尾行后的聚合; 执行顺序为:分组 --> 排序 --> 取值 --> 聚合 执行效果自行验证,看书百边不如动手一次! 来源: CSDN 作者: 松子-招财猫 链接: https://blog.csdn.net/weixin

oracle 中的递归查询

前提是你 提交于 2020-01-14 04:51:37
本文整理自网络: 一、树型表结构:   节点ID 上级ID 节点名称 二、公式:   select 节点ID,节点名称,level from   表 connect by prior 节点ID=上级节点ID start with 上级节点ID=节点值 说明:   1、常见的树形结构为公司组织机构、地区……     2、求节点ID以上的结构,或以上的结构,将“节点ID=上级节点ID”左右顺序换一下即可。     3、Level为Oracle的特殊字段,表示“层”的意思。当前节点ID的下一层节点为“1”。 测试SQL: 说明1、求002以下(或以上)所有子节点和层次(动态:总是从1开始算),但不包括自身 说明2、如果求002以上的节点,则“connect by prior topno=departno”,“=”两边的条件换位即可。 select departno,departname,level ——level可以看做一个隐藏列,查出每一行所在的级别。 from dept connect by prior departno=topno start with topno='002'; 测试数据   create table Dept(    DepartNO varchar2(10), DepartName varchar2(20), TopNo varchar2(10));

Oracle-洛总脚本--查询相关慢SQL

只愿长相守 提交于 2020-01-13 22:32:14
1、抓出外键没有创建索引的表(不依赖统计信息) with cons as (select /*+ materialize */ owner,table_name,constraint_name from dba_constraints where owner='SCOTT' and constraint_type='R'), idx as (select /*+ materialize */ table_owner,table_name,column_name from dba_ind_columns where table_owner='SCOTT') select owner,table_name,constraint_name,column_name from dba_cons_columns where (owner,table_name,constraint_name) in (select * from cons) and (owner,table_name,column_name) not in (select * from idx); 2、抓出需要收集直方图的列(依赖统计信息) select a.owner,a.table_name,a.column_name,b.num_rows,a.num_distinct cardinality, round(a.num

oracle null的解析

╄→гoц情女王★ 提交于 2020-01-13 19:50:13
有人总结了数据库中Null值的概念,比较精炼,摘录如下: Null是数据库中特有的数据类型,当一条记录的某个列为Null,则表示这个列的值是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,Null并不是一个确定的值。 这是Null的由来、也是Null的基础,所有和Null相关的操作的结果都可以从Null的概念推导出来。 判断一个字段是否为Null, 应该用IS Null或IS NOT Null,而不能用‘=’。对Null的判断只能定性,既是不是Null(IS Null/IS NOT Null),而不能定值。简单的说,由于Null存在着无数的可能,因此两个Null不是相等的关系,同样也不能说两个Null就不相等,或者比较两个 Null的大小,这些操作都是没有意义,得不到一个确切的答案的。因此,对Null的=、!=、>、<、>=、<=等操作的结果 都是未知的,也就算说,这些操作的结果仍然是Null。 同理,对Null进行+、-、*、/等操作的结果也是未知的,所以也是Null。 所以,很多时候会这样总结Null,除了IS Null、IS NOT Null以外,对Null的任何操作的结果还是Null。 Oracle 中的Null值和SQL Server 中的差不多,但是有个明显的区别,在Oracle中空字符串(‘’)被视作Null值

jdbc调用 oracle 存储过程操作

若如初见. 提交于 2020-01-13 10:10:31
创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,【返回多个值,演示out的用法】 当返回2个或多个值,必须使用out符号 当返回1个值,就无需out符号 create or replace function findEmpNameAndSal (pempno in number,pename out varchar2) return number as psal emp.sal%type; begin select ename,sal into pename,psal from emp where empno=pempno; --返回月薪 return psal; end; / ---------------------------------------相互转值 以下为测试调用 declare psal emp.sal%type; pename emp.ename%type; begin psal := findEmpNameAndSal(7902,pename); dbms_output.put_line('7902号员工的姓名'||pename||',薪水是'||psal); end; / 存储过程 创建有参存储过程findEmpNameAndSalAndJob(编号),查询7902号员工的的姓名,职位,月薪【演示out的用法】

查看Oracle当前用户下的信息

耗尽温柔 提交于 2020-01-13 07:24:10
查看 Oracle 当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件) 0、表空间   SQL>select username,default_tablespace from user_users;   查看当前用户的角色   SQL>select * from user_role_privs;   查看当前用户的系统权限和表级权限   SQL>select * from user_sys_privs;   SQL>select * from user_tab_privs;   查看用户下所有的表   SQL>select * from user_tables;    1、用户   查看当前用户的缺省表空间   SQL>select username,default_tablespace from user_users;   查看当前用户的角色   SQL>select * from user_role_privs;   查看当前用户的系统权限和表级权限   SQL>select * from user_sys_privs;   SQL>select * from user_tab_privs;   显示当前会话所具有的权限   SQL>select * from session_privs;   显示指定用户所具有的系统权限   SQL>select