随笔分类 -  Oracle

【PL/SQL】用星号拼出金字塔
摘要:代码中首先声明了几个变量,然后使用嵌套循环去输出空格和星号,其中: 每层空格数=总层数-该层层数 每层星号数=当前层数*2-1 代码如下: v_num输入10,即金字塔为10层,效果如下: 阅读全文

posted @ 2017-08-16 22:18 Diegoal 编辑

【PL/SQL】触发器示例:记录加薪
摘要:首先创建一张表,用于保存薪资变化情况: 创建触发器,当emp表中sal发生变化,就把变化记录到raisedsalarylog表中: 验证触发器: The End! 2017-08-15 阅读全文

posted @ 2017-08-15 14:20 Diegoal 编辑

【PL/SQL】九九乘法口诀表
摘要:输出结果为: 代码中使用了两个FOR循环,内层的FOR循环将根据外层循环的当前已循环次数来决定最大循环计数。 The End! 2017-08-15 阅读全文

posted @ 2017-08-15 13:39 Diegoal 编辑

【Oracle】DBMS_STATS.GATHER_TABLE_STATS
摘要:月初一直在忙保监会报送的事情,苦逼的保险行业的ETL大家都懂的。今天闲来无事查看了一下前阵子的报送存储过程,发现系统隔一段时间就会调用一次DBMS_STATS.GATHER_TABLE_STATS,所以整理了一下详细用法供大家参考。 作用: 收集统计信息,确保查询走最优的执行计划。 语法如下: DB 阅读全文

posted @ 2017-08-08 11:01 Diegoal 编辑

【Oracle】rollup函数
摘要:当我们在做报表统计的时候,很多时候需要用到‘合计’这个功能,比如我们想得到如下格式的报表: 这张表是按照deptno分组,然后按照deptno分组合计。rollup函数可以完美的解决这个问题。 1.建立一张t表: 2.插入数据: 3.使用rollup函数 The End! 阅读全文

posted @ 2017-07-31 20:26 Diegoal 编辑

【Oracle】to_char技巧
摘要:Select to_char(sysdate,'ss') from dual; 取当前时间秒部分 Select to_char(sysdate,'mi') from dual; 取当前时间分钟部分 Select to_char(sysdate,'HH24') from dual; 取当前时间小时部分 阅读全文

posted @ 2017-06-19 09:47 Diegoal 编辑

【Oracle】truncate分区表
摘要:分区表是生产中常用的一种表,它可以实现数据的按类存放,极大的提高了数据的查询及维护。当我们不需要某一分区的数据时,可以采用truncate来清空分区。实验如下: The End! 阅读全文

posted @ 2017-06-02 19:51 Diegoal 编辑

【Oracle】append
摘要:我们在生产环境中经常遇到需要往表中插入大量数据的情况,怎么样才能让插入数据的速度变快呢?Oracle中的append简直就是神器!!没图说个**,直接上图: 是不是看晕了?哈哈,莫慌,请看下面总结: 1. 数据库为归档模式,必须同时有nologging和append才可以; 2. 数据库为非归档模式 阅读全文

posted @ 2017-06-02 17:24 Diegoal 编辑

【SQL】CASE与DECODE
摘要:1. case..when case..when语句用于按照条件返回查询结果,如当我们想把emp表的工资按照多少分成几个不同的级别,并分别统计各个级别的员工数。SQL语句如下: select (case when sal <= 1000 then '1' when sal > 1000 and sa 阅读全文

posted @ 2017-05-09 16:02 Diegoal 编辑

【SQL】通过rowid查找及删除重复记录
摘要:新建T表如下: SQL> select * from t; X Y -- 1 a 1 a 1 a 2 b 2 b 3 a 3 a 1.查询表中重复的记录(在子查询中运用了自连接查出相同记录的max(rowid),通过不等值运算查出去,除了第一条重复记录后的重复记录) SQL> select x,y 阅读全文

posted @ 2017-04-30 21:40 Diegoal 编辑

【SQL】联合语句
摘要:一、UNION操作符 UNION 操作符用于合并两个结果集,在合并的同时去掉重复行,并按合并后结果的第一列升序排列。合并后结果集的列名由第一个结果集的列名确定。 UINON连接的两个结果集必须具有相同的列数,并且各列具有相同的数据类型。注意这里说的是相同的数据类型,而不是相同的列名! 示例:两个表的 阅读全文

posted @ 2017-04-28 11:13 Diegoal 编辑

【PLSQL】游标
摘要:Oracle中的SQL在执行时需要分配一块内存区域,这块内存区域叫做上下文区。 上下文区中记录了SQL语句的处理信息,这些信息包括:查询返回的数据行、查询所处理的数据的行号、指向共享池中的已分析的SQL语句。 在PL/SQL中游标可以分为以下两类: 显式游标:使用CURSOR语句显式定义的游标,需要 阅读全文

posted @ 2017-04-27 15:23 Diegoal 编辑

【SQL】IN、EXISTS和表连接三者的效率比较
摘要:一、 IN和EXISTS比较 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行查询。此时就会用到IN和EXISTS。 例如:查询departments表中存在的部门的人数。 SQL> set timing on SQL> select employees.department_id 阅读全文

posted @ 2017-04-27 14:00 Diegoal 编辑

【SQL】CONNECT BY 层次化查询
摘要:层次化查询,顾名思义就是把查询结果有层次的呈现出来。层次化查询结果类似于树状结构,最顶端的是“根节点”,下面是“父节点”,没有子节点的是“叶节点”。 为了让一个或多个表具有层次关系,必须使用相关的字段将表关联起来。比如HR用户下的employees表中的employee_id和manager_id列 阅读全文

posted @ 2017-03-30 21:22 Diegoal 编辑

【SQL】MERGE
摘要:MERGE可以合并多个表中的数据,也可实现多表中数据的同步。使用MERGE语句对表中数据进行有条件的更新和插入。当查找的行存在时,UPDATE更新行中的数据;当查找的行不存在时,INSERT插入数据。 语法如下: MERGE INTO table_name table_alias USING (ta 阅读全文

posted @ 2017-03-30 21:20 Diegoal 编辑

【SQL】多表查询
摘要:多表查询,即查询可以从两个或多个表中获取数据。在Oracle中,有两种类型的连接格式:ANSI SQL连接格式和Oracle特有的连接格式。Oracle建议采用符合ANSI标准的连接格式。 1、内连接 SELECT table1.column,table2.column FROM table1,ta 阅读全文

posted @ 2017-03-22 20:42 Diegoal 编辑

【SQL】DUAL表
摘要:DUAL表是Oracle系统中对所有用户可用的一个实际存在的1行1列的表,这个表不能用来存储信息,在实际应用中仅用来执行SELECT语句。可以使用DUAL表来查询系统的信息。 --dual是1行1列的表 SQL> select * from dual; D - X --查询dual返回系统时间 SQ 阅读全文

posted @ 2017-03-22 20:39 Diegoal 编辑

【SQL】ROWNUM和ROWID
摘要:一、ROWNUM ROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的。 SQL> select rownum ,deptno,dname,loc from dept; ROWNUM DEPTNO DNAM 阅读全文

posted @ 2017-03-22 20:38 Diegoal 编辑

【Oracle】重命名数据文件
摘要:1)查看当前数据文件位置 SQL> select file_id,file_name,tablespace_name from dba_data_files; FILE_ID FILE_NAME TABLESPACE_NAME 4 /u01/app/oracle/oradata/drz/users0 阅读全文

posted @ 2017-03-16 12:35 Diegoal 编辑

【Oracle】删除手工创建的数据库
摘要:众所周知,DBCA创建的数据库可以通过DBCA命令删除,但是手工创建的数据库却不能用此方式删除,下面给出删除方式: SQL> startup mount exclusive SQL> alter system enable restricted session; SQL> drop database 阅读全文

posted @ 2017-03-15 02:07 Diegoal 编辑

导航