随笔分类 -  Oracle

摘要:PIPELINED管道函数 从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题。 这种类型的函数,必须返回一个集合类型,且标明 pipelined; 这个oracle函数不能返回具体变量,必须以一个空 return 返回; 这个oracle函数中,通过 pipe row 阅读全文
posted @ 2020-02-03 15:12 marxist 阅读(1317) 评论(0) 推荐(0)
摘要:触发器 trigger 触发器是一种特殊的过程,它的执行是由一系列事件触发的。这些事件有用户登录注销事件,DML语句执行事件等等。我们常用的就是DML触发器,事件的精确粒度可以是表级或行级。 trigger的实际应用非常广泛,例如A表有数据DML操作,就可以在A表上做个触发器,将数据协同更新到B表。 阅读全文
posted @ 2020-02-03 08:45 marxist 阅读(481) 评论(0) 推荐(0)
摘要:包头 声明包体的内容,里面声明的变量或类型,作用范围是全局的。定义了过程或函数的时候,这个函数也可以被外界使用,如果包头中没定义包体中的函数或过程,这时函数和过程就是这个包私有的。创建时不需要写begin,即使有begin内容也只在编译是执行一次。 格式如下: create or replace p 阅读全文
posted @ 2020-02-03 00:07 marxist 阅读(195) 评论(0) 推荐(1)
摘要:函数特性:一定要返回值并且只能返回一个值。 练习1: CREATE OR REPLACE FUNCTION get_sal (p_id IN emp.empno%TYPE) RETURN NUMBER --形式参数 IS | AS v_salary emp.sal%TYPE :=0; BEGIN S 阅读全文
posted @ 2020-02-02 12:45 marxist 阅读(242) 评论(0) 推荐(0)
摘要:练习 1:导入型形式参数(in类型) CREATE OR REPLACE PROCEDURE raise_salary (p_id IN emp.empno%TYPE) IS --变量声明 BEGIN UPDATE emp SET sal = sal * 1.1 WHERE empno = p_id 阅读全文
posted @ 2020-02-01 00:37 marxist 阅读(396) 评论(0) 推荐(0)
摘要:作用: 相当于对错误作了二次处理,可以让用户看懂。 如果程序出现错误回出现回滚,加上异常处理后不会对本程序的修改回滚。 可以任何时候设置报错,从而达到中断目的。 如果程序出现错误,可以使其报错的同时完成程序其他的语句。(PL/SQL嵌套) 系统预定义异常(有名字的错误代码) TOO_MANY_ROW 阅读全文
posted @ 2020-01-31 23:48 marxist 阅读(557) 评论(0) 推荐(0)
摘要:隐式游标 隐式游标的属性: SQL%ROWCOUNT 成功操作的行的数量 SQL%FOUND 发现复合条件的行返回TRUE SQL%NOTFOUND 没有发现复合条件的行回TRUE SQL%ISOPEN 游标打开状态(boolean) 演示:打印隐式游标属性 declare v_count numb 阅读全文
posted @ 2020-01-31 23:37 marxist 阅读(215) 评论(0) 推荐(0)
摘要:使用IF语句按条件判断,控制PL/SQL执行流程 格式如下:if-then-end if;if-then-else-end if;if-then-elsif-then-else-end if; 演示: set serveroutput on declare v_hire_date date := t 阅读全文
posted @ 2020-01-31 23:16 marxist 阅读(247) 评论(0) 推荐(0)
摘要:一、变量介绍 在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有: 标量类型(scalar) 复合类型(composite) --用于操作多条记录 参照类型(reference) --用于操作多条记录,存放指针 lob(large object) 二、标量类型 变量初始化和关键 阅读全文
posted @ 2020-01-08 23:41 marxist 阅读(1334) 评论(0) 推荐(0)
摘要:PL/SQL语句以块为单位,块的基本结构为: declare 可选 ..变量 类型 begin 必选 .. exception 可选 .. end; 必选 / 语句块可以嵌套: DECLARE … 变量声明 x int; BEGIN --代码主体 … DECLARE --嵌套语句块 x int; … 阅读全文
posted @ 2020-01-05 16:57 marxist 阅读(290) 评论(0) 推荐(0)
摘要:[oracle@dba ~]$ cat a.sh #!/bin/bash TAB=emp sqlplus -s scott/password << EOF | awk 'NR != 1 && $2 ~ /S.*T/{print $2,$6}' set head off set feed off se 阅读全文
posted @ 2020-01-05 02:10 marxist 阅读(267) 评论(0) 推荐(0)
摘要:set linesize 200set term off verify off feedback off pagesize 999set markup html on entmap ON spool on preformat offspool tables.xlsselect * from renk 阅读全文
posted @ 2020-01-05 02:08 marxist 阅读(373) 评论(0) 推荐(0)
摘要:Oracle正则表达式(regularexpression) 元字符 字符含义 举例说明 ^ 匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。 ^a:匹配以a开始的字符串 [^a]:匹配不含a的字符串 - 当使用在a-m表示范围; 当使用在第一个字符时表示 连字符串,如[-abc] 阅读全文
posted @ 2020-01-05 02:04 marxist 阅读(1056) 评论(0) 推荐(0)
摘要:max()、min()、avg()、sum()、count() SQL> select deptno,ename,sal, sum(sal) over(partition by deptno order by deptno) sum_sal, round(avg(sal) over(partitio 阅读全文
posted @ 2020-01-05 01:35 marxist 阅读(678) 评论(0) 推荐(0)
摘要:row_number 和伪列rownum类似,都是产生顺序的序列号的,但这个分析函数row_number并不是为整个select数据产生序列,而是为分组后的每个组内产生序列。 比如,要取出每个部分的前两个最高工资的员工 SQL> select deptno,ename,sal from (selec 阅读全文
posted @ 2020-01-05 00:55 marxist 阅读(653) 评论(0) 推荐(0)
摘要:rollup 和 cube group by 生成数据结果时,只会生成相关列的数据统计信息,而不是生成小计和总计 group by统计结果如下(不是select直接返回格式): SQL> select deptno,job,avg(sal) from emp group by deptno,job; 阅读全文
posted @ 2020-01-04 17:45 marxist 阅读(468) 评论(0) 推荐(2)
摘要:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据。ORACLE 9i中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。 INSERT 和UPDATE 是可选的 UPDATE 和INSERT 后面可以跟WHERE 子句 在ON条件中可以 阅读全文
posted @ 2020-01-04 16:43 marxist 阅读(361) 评论(0) 推荐(0)
摘要:emp表中的职员职位都是有上下级关系的 总裁king | / \ 经理jones 经理blake | | 管理scott 职员james | 职员adams 当表有层次结构时,通过使用层次查询可以更直观的显示数据结果和层次关系。 语法: select [level],column,expr... f 阅读全文
posted @ 2020-01-04 16:26 marxist 阅读(839) 评论(0) 推荐(0)
摘要:用于多条select语句合并结果 union 并集 去重 union all 并集 不去重 intersect 交集 minus 差集 union A集合和B集合的合并,但去掉两集合重复的部分,会排序 select deptno,ename from emp where deptno in (20, 阅读全文
posted @ 2020-01-04 15:45 marxist 阅读(318) 评论(0) 推荐(0)
摘要:等连接 通过两个表具有相同意义的列,建立连接条件。查询结果只显示两个列中的值是等值条件的行数据。表中同名列被选择时必须添加表名前缀进行修饰,否则无法确定这一列是属于哪个表。 按deptno的等值关系联合两张表的所有列 idle> select * from dept,emp where dept.d 阅读全文
posted @ 2019-12-28 11:33 marxist 阅读(431) 评论(0) 推荐(0)