oracle分组排序汇总笔记

oracle分组排序汇总笔记
oracle分组排序汇总笔记

一、相关函数:

Group by、Rollup、Cube、Grouping sets、Over、Grouping_id、Grouping、Decode、lag、lead、rank、dense_rank、row_number、count

二、初始化数据:

-- Create table

create table EMPLOYEE

(

EID NUMBER not null,

ENAME V ARCHAR2(20) not null,

EADDRESS V ARCHAR2(200) not null,

E_DID NUMBER not null,

HIRE_DA TE DA TE not null,

SALARY NUMBER(8,2) not null,

BONUS NUMBER(8,2),

BOSS NUMBER

)

tablespace USERS

pctfree 10

initrans 1

maxtrans 255

storage

(

initial 64

minextents 1

maxextents unlimited

);

-- Create/Recreate primary, unique and foreign key constraints

alter table EMPLOYEE

add primary key (EID)

using index;

--insert content

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (1, '郭芙', '广东', 1, to_date('02-01-2006', 'dd-mm-yyyy'), 2000.5, 100.5, 10);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (3, '杨康', '成都', 3, to_date('14-07-2004', 'dd-mm-yyyy'), 3000, null, 10);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (9, '杨过', '广东', 1, to_date('02-03-2005', 'dd-mm-yyyy'), 2000, 1000, 10);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (10, '小龙女', '广东', 2, to_date('05-04-2000', 'dd-mm-yyyy'), 8000, null, 10);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (11, '郭襄', '广东', 3, to_date('01-12-2010', 'dd-mm-yyyy'), 5000, null, 10);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (14, '郭靖', '成都', 2, to_date('08-07-2008', 'dd-mm-yyyy'), 4300, null, 14);

insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)

values (15, '黄蓉', '成都', 3, to_date('13-05-2009', 'dd-mm-yyyy'), 1600, 200, 14);

commit;

三、具体应用:

1、group by与rollup:

select eaddress a ,ename b,sum(salary) c from employee group by rollup(eaddress, ename)

图1

分析:如图,这里不光只对第一个字段做了累计,先按(eaddress,ename)分组累计,再按(eaddress)分组累计,最后累计全部

类似于:

select * from(

select eaddress,ename,sum(salary) a from employee group by eaddress,ename

union all

select eaddress,null,sum(salary) from employee group by eaddress

union all

select null,null,sum(salary) from employee

)

2、group by 与cube;

select eaddress a ,ename b,sum(salary) c from employee group by cube(eaddress, ename) order by a,b

图2

分析:CUBE这里的使用与ROLLUP基本相同,但CUBE的合计更加详细,它能够显示次分组字段的合计信息

类似于:

select eaddress a,ename b,sum(salary) c from employee group by grouping sets((eaddress,ename),(eaddress),(ename),()) order by a,b

3、group by 与grouping sets

select eaddress a ,ename b,sum(salary) c from employee group by grouping sets((eaddress, ename),())

图3-1

select eaddress a ,ename b,sum(salary) c from employee group by grouping sets((eaddress, ename),(eaddress),())

图3-2

分析:

Group by grouping sets可以应用来指定自己感兴趣的总数组合。因为它不必计算它不需要集合。形式为:group by grouping sets((list),(list)…),这里list是圆括号中的一个列序列,这个组合生成一个总数,所以要增加一个总和,必须增加一个(null)分组集。

4、grouping结合decode的使用

GROUPING()可接受一个列值,当列值为空时,函数返回1;如果列值非空,则返回0。(注意:GROUPING只能在ROLLUP、CUBE查询中使用。还可以结合DECODE ()函数来注释使用更好)

Decode():相当于一条if语句,如:decode(A,1,’su’,2,’xiao’,3,’dong’,A)表示A如果为1则返回su,如果2就返回xiao,如果3就返回dong,否则返回A

以图1为例:

Select decode(grouping(eaddress),1,’合计’,eaddress) a,ename b,sum(salary) c from employee group by rollup(eaddress,ename)

图4

5、Grouping_id()

GROUPING_ID()函数可接受一列或多列,它返回GROUPING位向量的十进制值。GROUPING 位向量的计算方法是按照顺序对每一列调用GROUPING()函数的结果组合起来。它的作用是借助HAVING子句对记录进行过滤,将不包含小计或总计的记录除去。

GROUPING位向量的十进制值,我们由前面的介绍已知道当GROUPING()的列值为空时它返回1,当非空时返回0;

比如:eaddress,ename两列都为非空,GROUPING()都返回0。将这两列的值组合起来,形成一个位向量00,十进制为0。即,当eaddress,ename都非空时,GROUPING_ID()返回0。(这里要特别注意eaddress与ename两列的顺序)下面以图2为例子:

select eaddress a ,ename b,sum(salary) c,grouping_id(eaddress,ename) g1g2,grouping_id(ename,eaddress) g2g1,grouping_id(eaddress) g1,grouping_id(ename) g2 from employee group by cube(eaddress, ename) order by a,b

图5

利用grouping_id有时可以作为判断根据

6、over

a.分析函数over

分析函数用于计算基于组的某种聚合值,它和聚合函数不同之处是对于每个组返回

多行,而聚合函数对于每个组返回一行

1、rank():排名

select eaddress,ename,salary,rank() over(partition by eaddress order by salary

desc) a from employee

图6-1

Rank是跳跃排名,如果有2个第一就直接跳过第二,下一位排第三

Dense_rank则不会

2、sum():合计

select eaddress,ename,salary,sum(salary) over(partition by eaddress order by salary desc) a from employee

图6-2

b.开窗函数over

开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。如:

按照salary排序进行累计,order by是个默认的开窗函数select eaddress,ename,salary,sum(salary) over( order by salary desc) a from employee

图6-3

按照地址分区

select eaddress,ename,salary,sum(salary) over( partition by eaddress) a from employee

图6-4

按照窗口值幅度

select eaddress,ename,salary,sum(salary) over( order by salary range between300 preceding and1000 following) a from employee

图6-5

以杨过为例:2000-300<=S<=2000+1000,即求在S范围内的salary的总和,所以A=2000+2000.5+3000

按照窗口行幅度

select eaddress,ename,salary,sum(salary) over( order by salary rows between2 preceding and2 following) a from employee

图6-6

https://www.360docs.net/doc/e913366845.html,g、lead结合over

LAG()和LEAD()统计函数可以在一次查询中取出同一字段的前N行的数据和后N行值

select eaddress,ename,salary,lag(salary,1) over(order by eaddress) a,lead(salary,1) over(order by eaddress) b from employee

图6-7

c.row_number结合over

可以在各个分组内从1重新排序;但是必须和开窗函数一起使用,也就是说必须分组,若有表(employee)如下

select tt.* from(select t.*,row_number()over(partition by t.ename order by t.ename) r from employee t ) tt where tt.r=1;

就把姓名相同的一行去掉了

7、综合实例(生成一个基本报表):

select decode(t1,null,eaddress,null) eaddress,ename,salary from(

select decode(grouping_id(e.eaddress,e.ename),1,e.eaddress,3,'合计',e.eaddress) eaddress,

decode(grouping_id(e.eaddress,e.ename),1,'小计',e.ename) ename,sum(e.salary) salary,

lag(sum(e.salary)) over(partition by eaddress order by eaddress) t1 from employee e

group by rollup(e.eaddress,e.ename)

)

8、附加函数

a.Count

ORACLE的,COUNT(*)是取所有的行数,COUNT(1)取第1个字段不为空

的记录条数也可以指定字段不为空的行数count(字段名)

b.…

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

oracle笔记(3)

1.用insert语句进行行数据的迁移 Insert into 表名(列,列) select 列,列from emp where 条件 2.用update更新数据(使用子查询):希望员工scott的岗位,工资,补助与smith员工一样? update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=?SMITH?) where ename=?SCOTT?; 3.事务 (1)锁 (2)提交事务 (3)回退事务(一开始就做保存点(savepoint)) (4)事务的几个重要操作 1)设置保存点:savepoint a 2)取消部分事务:rollback to a 3)取消全部事务:rollback (5)只读事务:set transaction read only(当前用户能看到之前的操作,若其他用户进行更 新,该用户之后的操作都不能看到更新) (6)字符函数 (1)lower(char):将字符串转化为小写的格式 (2)upper(char): 将字符串转化为大写的格式 (3)length(char):返回字符串的长度 (4)substr(char,m,n):取字符串的子串,从m开始取,取n个 (5)例:以首字符大写的方式显示所有的员工的姓名: (1)完成首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写:select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并:select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp; (6)replace(char1,search_string,replace_string) (7)instr(char1,char2,[,n[,m]])—取子串在字符串的位置 (8)例:显示所有员工的姓名,用”我是A”替换所有”A”:select replace(ename,?A?,? 我是A?) from emp; (7)数学函数 (1)round(n,[m]):用于四舍五入 (2)trunc(n,[m]):用于截取数字 (3)mod(m,n):取模 (4)floor(n):返回<=n的最大整数 (5)ceil(n):返回>=n的最小整数 (6)例:显示在一个月为30天的情况所有员工的日薪金,忽略余数:select floor(sal/30),ename from emp; (8)日期函数 (1)sysdate (2)add_months(d,n) (3)last_day(d):返回指定日期所在月份的最后一天 例:返回在八个月前雇佣的员工(已经入职8个月多的员工):select * from emp where sysdate>add_months(hiredate,300); 例:对于每个员工,显示其加入公司的天数:select trunk(sysdate-hiredate) “入职天

ORACLE笔记

1.Oracle 工具:sqlplus Sqlplus / as sysdba Shutdown immediate(关闭数据库) Startup(启动数据库) 注意:数据库开启才可以进行操作 Select username,account_status from dba_users;(查询数据库中所有的用户名称与用户状态) Alter user scott identified by tiger account unlock;(scott用户解锁) Sqlplus scott/tiger(使用SCOTT 密码为tiger登陆ORACLE数据库) Connect scott/tiger (在SQL>中直接使用SCOTT用户连接数据库) Show all;(看所有变量) Set sqlprompt “_user>”(设置sqlplus环境下面的提示符用自身用户显示) 注意:如要变量下次重启生效必须把变量写入 /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql中 Host(回到系统) Help index(查看所有命令) Help+命令(类似于LINUX中的MAN,查看命令的格式与用法) Disconnect(关闭SQLPLUS工具但是不离开数据库) Describe emp(查看EMP表) Define(定义变量,常用与写脚本用) 如:DEFINE _EDITOR =”vi” (CHAR) (定义VI编辑器用于保存最后一条执行的SQL语句) Save /u01/app/oracle/aa.sql (保存SQL语句) Get /u01/app/oracle/aa.sql (调用保存的SQL语句) 2.select(select 查询语句是ORACLE中最常用的语句) DML语句包括(insert 写入,update改变,delect删除,merge两张表同步) 注意:merge常用在ETL(数据仓库)底下 DDL数据定义语句包括(create创建对象,alter修改,drop删除对象,rename改名,truncate 删除整个表) TCL事务处理语句(commit提交立刻生效,rollback回滚,savepoint保存点,savepoint(保存点) DCL权限语句(grant赋予权限,revoke(收回权限) ORACLE的表称之为堆表(keep table) SELECT (1) writing basic SQL select statemanes 1. selecting all columns SCOTT>select * from dept; SCOTT>select dname,deptno,loc from dept; Basic SELECT Statement SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

oracle学习笔记

●PLSQL控制台输出语句 SET serveroutput ON; --打开控制台输出服务 dbms_output.put_line('values2='||var_val); --输出语句 ●PLSQL动态变量 var_str := '&input'; ●创建表空间和用户 --创建表空间 CREATE TABLESPACE "BCPBS" LOGGING DATAFILE 'D:\app\E430\oradata\orcl\BCPBS_01.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, 'D:\app\E430\oradata\orcl\BCPBS_02.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; --建立用户 CREATE USER "BCPBS" PROFILE "DEFAULT" IDENTIFIED BY "bcpbs123" DEFAULT TABLESPACE "BCPBS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT "CONNECT" TO "BCPBS"; GRANT "DBA" TO "BCPBS"; GRANT "RESOURCE" TO "BCPBS"; ●删除表空间和用户 drop user bcpbs cascade ; drop tablespace BCPBS including contents and datafiles cascade constraints ; ●自定义函数 CREATE OR REPLACE FUNCTION fun_level_value(level_value number) RETURN number IS return_value number:=null; BEGIN CASE level_value WHEN 0 THEN return_value:='0'; WHEN 1 THEN return_value:='1'; WHEN 2 THEN return_value:='2'; WHEN 3 THEN return_value:='3'; WHEN 6 THEN return_value:='8'; ELSE

Oracle学习笔记

Oracle的四个主要用户 1.超级管理员sys/change_on_install 2.普通管理员system/manager 3.普通用户scott/tiger 4.大数据用户sh/sh 简单查询 1.查询表结构 DESC 表名 2.简单查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] (1)查询时也可以使用四则运算,如:SELECT (字段*x)+y FROM 表名 (2)可以使用“||”连接字段与字符串,如: select '工作与工资:' || job || sal 工作工资 from emp 执行结果: 3.限定查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] [WHERE 条件(s)] (1)Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BE TWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。 (2)多个条件可以使用AND与OR连接。 例如:select * from emp where sal>1300 and sal<4000 (3)范围判断BE TWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BE TWEEN…AND 对数字、日期都可以使用!!! 例如:select * from emp where sal between 1300 and 4000 例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981' (4)判断为空IS (NOT) NULL 例如:select * from emp where comm is null 例如:select * from emp where comm is not null 例如:select * from emp where not comm is null (5)指定范围的判断(NOT) IN 例如:select * from emp where empno in(7369,7566,7799)

oracle数据库学习笔记心得

select* |字段表名 from 表名 where 布尔表达式【条件】 externalcandidate 职员相关信息 contractrecruiter 猎头公司 查看表里所有字段 describe[描述] contractrecruiter select cname,nperecentagecharge from contractrecruiter 不显示原来名字,显示现在名字【用AS】 select cname as "Recruiter Name",nperecentagecharge as "Hire Fees" from contractrecruiter 不显示原来名字,显示现在名字【可不用AS】 select cname "Recruiter Name",nperecentagecharge "Hire Fees" from contractrecruiter 【双引号是否写】 双引号是为了区分大小写 职位表 position select *from position 缺额运算:[想减] select VDESCRIPTION , nbudgetedstrength, NBUDGETEDSTRENGTH -NCURRENTSTRENGTH , NYEAR from position

select VDESCRIPTION "Potion", nbudgetedstrength "Budgeted Strength" , NBUDGETEDSTRENGTH -NCURRENTSTRENGTH "Vacancies", NYEAR "Year" from position 显示非重复运行 查询来源地的人数 describe externalcandidate 查看职员城市名字 select ccity from externalcandidate 查看职员城市名字【名字不重复,插入一个关键字:distinct】select distinct ccity,cstate from externalcandidate 运算符: 两列 select vfirstname,vlastname from externalcandidate 字段拼接 select vfirstname||vlastname from externalcandidate select vfirstname||' '||vlastname from externalcandidate 学校 describe college 查看所有学校 select *from college 查看只是加利福尼亚的学校 select * from college where cstate='California' 一个条件 select vfirstname,vlastname,dbirthdate,ntestscore from externalcandidate where dbirthdate>='01-1月-70'

Oracle笔记

数据库基本概念: 数据库:Database ,DB (数据) 数据库管理系统:(Database Management System,DBMS)oracle ,DB2,Sql_server 等 数据库系统:(Database System ,DBS) 关系型数据库:(Relationship Database ,RDB) SQL语言:(Structured Query Language,结构化查询语言) 数据建模: 要将现实世界中客观存在的事物以数据的形式存储到计算机中并进行处理,就需要对其进行分析,抽象,进而确定数据的结构以及数据间的内在联系,这一过程称为数据建模。 数据模型应满足三个方面的要求: 1,能够比较真实地模拟现实世界 2,容易为人所理解; 3,便于计算机实现。 数据模型三要素: 数据结构---描述事物的静态特性; 数据操作---描述事物的动态特性; 完整性约束----描述事物内部和事物间的约束性关系。 现实世界-------认识抽象-------->概念世界-------转换--------->机器世界 概念数据模型(Conceptual Database Model,CDM) CDM从用户的观点出发对信息进行建模,并不依赖于具体的计算机系统或某个DBMS系统,主要用于数据库的概念设计。 CDM以实体--关系(E-R)模型为基础,将现实世界中的客观对象抽象为实体和关系。 到机器世界中,CDM将被转化为特定DBMS所支持的物理数据模型(Physical Database Model ,PDM)。 CDM相关术语: 实体(Entity):客观存在并且可以相互区分开来的事物。 实体集(Entity Set):同一类实体的集合。 属性(Attribute):描述实体的特性。 关系(Relationship):实体集之间的对应关系(现实世界事物之间的相互关联)。 E-R图三要素: 实体:用矩形框表示

oracle GoldenGate学习笔记

Oracle GoldenGate测试文档1.Oracle GoldenGate介绍 GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate TDM 软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下: 如上图所示,GoldenGate TDM的数据复制过程如下: 利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate TDM自定义的中间格式存放在队列文件中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; 目标系统接受数据变化并缓存到GoldenGate TDM队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; GoldenGate TDM投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。 由此可见,GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通

oracle常用笔记总结

1、用dba权限的用户查看数据库都有哪些锁 select https://www.360docs.net/doc/e913366845.html,ername,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time; 2、查看有哪些对象被锁了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 3、根据sid查找进程id select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; select ses.sid from v$session ses, v$process pro where pro.spid=129 and ses.paddr=pro.addr; 4:根据这个spid对应linux下的进程pid linux命令: ps -ef | gre | 'ora' (找到所有ora开头的进程) kill -9 (pid) 5、解决delete后表的高水位的问题 初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink 清除高水位: alter table t_mobile_client_tp_prov enable row movement; alter table t_mobile_client_tp_prov shrink space; 重新收集统计信息: begin dbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end; 6、ORA-02064 distributed operation not supported

oracle笔记

Oracle笔记 一、了解oracle 二、Oracle的安装 三、启动oracle: (1)、使用oracle中自带的sql*plus工具进入oracle。 (2)、利用sqlplus和sqlplusw打开oracle。 (3)、使用sql/pl developer进入oracle. (4)、使用oracle企业管理器 四、常用sql*plus命令: (1)、连接数据库: conn (ect) 用户名/密码@网络服务名(数据库名) (as sysdba/sysoper); 例如:conn scott/tiger; (2)、退出:exit; (3)、运行sql脚本: start 脚本地址。 例如:start d:\test.sql; (4)、修改sql脚本: edit 脚本地址。 (5)、截取屏幕代码spool,例如:spool d:\demo.txt…………….spool off; (6)、创建用户(以sysoper以上权限创建):create user 用户名identified by 密码; (7)、删除用户(以sysoper以上权限删除):drop user 用户名; (8)、修改用户密码:passw(ord)或alter user 用户名identified by 密码。 (9)、显示当前用户名:show user; (11)、断开数据库连接:disc(onnect); (12)、行距与每页显示次数:set linesize(pagesize) 数目。 (13)、给予权限: grant connect(连接权限)/resource(在system中创建表权限)/dba(最高权限) to 用户名with admin(系统权限下传)/grant(对象权限下传) option ; (14)、收回权限: revoke conn(连接权限)/resource(在system中创建表权限)/dba(最高权限) from 用户名(15)、使用profile文件管理用户: 限定用户登录次数: Create profile 文件名limit failed_login_attempts 3 password_lock_time 2; Alter user 用户名profile 文件名 用户解锁: Alter user 用户名account unlock;

韩顺平.2011最新版.玩转oracle视频教程(笔记)

韩顺平—玩转ora cle视频教程笔记一:Oracle认证,与其它数据库比较,安装

Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 二: Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect] 说明: 该命令用来断开与当前数据库的连接 3.psssw[ord] 说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system登录。 4.show user 说明: 显示当前用户名 5.exit 说明: 该命令会断开与数据库的连接,同时会退出sql*plus 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ d:\a.sql或是sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开 3.spool 说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令 1.& 说明:可以替代变量,而该变量在执行时,需要用户输入。 select * from emp where job='&job'; 2.edit 说明:该命令可以编辑指定的sql脚本 案例:SQL>edit d:\a.sql

oracle学习笔记-plsql(1)

pl/sql(1) 上次课程内容回顾 oracle 的内部结构 创建表空间 create tablespace 表空间名字 data?le '数据文件的路径' size 数据文件的初始化的大小; 创建用户create user 用户名 identi?ed by 密码 default tablespace 表空间名字 修改用户密码 alter user 用户名 identi?ed by 密码 授权 grant connect,reource,dba to 用户名 回收权限 revoke 角色名 from 用户名 创建目录 create directory 目录名 as 文件夹路径 grant read,write on directory 目录名 to 用户 expdp/impdp 用户名/密码 directory=目录名 dump?le=导入或者导出文件的名称 schemas=要导入的用户的名称 remap_schema=导出的用户名:导入的用户名 分页 rownum 本次课程内容 pl sql 是什么 pl sql 的块 pl sql的变量和常量 pl sql的数据类型 pl sql 条件分支 pl sql 循环 pl sql 异常处理 pl sql 事务处理 本次课程内容 pl sql 是什么 sql 是什么结构化查询语言。sql 是不是编程语言?编程语言我们学过 java ,js ,c ,c# ,c++ ,python等都是编程语言,编程语言有什么特征?编程语言都可以声明变量,都有变量类型,都能写条件判断,写循环处理。编程语言有了这些特性,才可以使用编程语言写业务逻辑。有的时候,实际上我们想把业务逻辑写到数据库中,如果只用sql是不行的,因为sql没有编程语言的特征,oracle的开发者就开发出一个pl sql 来解决这个问题。pl sql就是编程语言的特征+sql语句。这样我们就可以使用pl sql在数据库中写业务逻辑了。 这样做的好处主要就是可以提高性能,完成业务逻辑的封装。 pl sql的缺点写起来比较复杂,难以调试。 pl sql 块 pl sql 是以块的方式管理代码。块分匿名块和命名块。 匿名块类似于java中main方法,主要用来来,不保存到数据库中。

oracle学习笔记

1、decode函数: SELECT checkup_type, DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’) FROM checkup; DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值. 其具体的语法格式如下:DECODE(input_value,value,result[,value,result…][,default_result]); 其中:input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应result 是一组成序偶的结果值default_result 未能与任何一序偶匹配成功时,函数返回的默认值下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。 2、nvl函数的用法: 如果你某个字段为空,但是你想让这个字段显示0nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3…… NULL指的是空值,或者非法值。 NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致 NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型 NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1 3、oracle的查询必须是select ... from ...成对出现: 查询单行的时候可以用dual代替,dual表在系统中只有一行; 例如:获取系统时间; select sysdate from dual 4、oracle查询结果多行用逗号拼接: SELECT WM_CONCAT(GOODSTYPENAME) FROM TB_SYS_PRODUCT_FORBIDGOODSTYPE fib LEFT JOIN TB_SYS_GOODSTYPE ty ON fib.goodstypeid=ty.goodstypeid

oracle学习笔记-oracle的基本的使用

oracle的基本的使用 本次课程内容 oracle的简介和安装 oracle的服务 oralce的用户 oracle的第三方工具 pl sql developer的使用 oracle的数据类型 oracle中的sql语句 oracle的虚表 oracle中创建序列 使用java 连接oracle数据库 详细内容 oracle的简介和安装 oracle 是一个关系型数据库。常用的关系型数据库有什么?mysql ,sql server,oracle ,db2 关系型数据库指的数据库表和表之间的外键。三种数据库哪些公司开发的? db2 IBM sql server 微软 my sql oracle公司 oracle oracle 公司 三种数据库在体量上的大小的关系。 db2>oracle > sql server > my sql mysql 免费 sql server 收费的 oracle 收费的靠维护收费 版本最新 12g 11g 9i 安装的时候点以下文件,以管理员方式运行:

安装完成: 最后一步,把scott用户解锁:

oracle的服务 oracle安装好之后会在系统注册很多服务,我们只需要启动两个服务就行了。 Listener结尾的服务是oracle的监听程序,ORCL结尾的是oracle的主服务。监听程序负责监控连接orace的身份是否合法。

oracle的用户 oracle 中的用户和数据库的概念和mysql中用户和数据库的概念正好相反。注意,现在oracle中的用户对应mysql中的数据库,oracle中的数据库对应mysql中用户。oracle 默认为我们创建好的数据库名orcl。oracle 以后我们常用的用户有三个。sys system scott sys 和system 都是管理员。管理员登录数据库必须制定 as sysdba后缀。 scott 是oracle 为我们提供的测试账户。scott默认的密码是tiger 如果scott账户被锁定:

Oracle从入门到精通复习笔记(一)

数据块 1)、块头; 2)、表目录; 3)、行目录; 4)、空余空间; 5)、行数据; 数据区 1)、多个数据块组成,也称为数据扩展区,数据区是Oracle储存分配的最小单位。 段 1)、由多个数据区组成; 2)、数据段:数据段中保存的是表中的数据记录; 3)、索引段:索引段中包含了用于提高系统性能的索引; 4)、回滚段(撤销段):回滚段中保存了回滚条目,oracle将修改前的旧值保存在回滚段中; 5)、临时段:当执行创建索引、查询等操作时,Oralce可能会使用一些临时储存空间,用于暂时性的保存解析过的查询语句以及在排序过程中产生的临时数据。 表空间 1)、表空间是数据库的最大逻辑划分区域; 2)、表空间(逻辑储存结构)=文件夹>数据文件(物理储存结构)=文件; Oracle默认创建的主要表空间 1)、SYSTEM表空间 2)、SYSAUX表空间:充当SYSTEM的辅助表空间; 3)、UODO表空间:撤销表空间,用于储存撤销信息的表空间; 4)、USERS表空间:用户表空间 物理储存结构 1)、数据文件; 1)、系统数据文件; 2)、撤销数据文件; 3)、用户数据文件; 2)、控制文件; 1)、控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包括数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息; 2)、只有控制文件正常,实例才能加载并打开数据库; 3)、每个数据库至少拥有一个控制文件,但一个控制文件只能属于一个数据库; 3)、日志文件; 1)、日志文件的主要功能是记录对数据所做的修改,对数据库所做的修改几乎都记录在日志文件中;

2)、重做日志文件; 1)、重做日志文件用来记录所发生过的更改信息(添加、修改、删除)及由oracle 内部行为而引起的数据库变化信息; 3)、归档日志文件; 5)、服务器参数文件; 1)、服务器参数文件是二进制文件,用来记录oracle数据库的基本参数信息(数据库名、控制文件所在路径、日志缓冲大小等)。 2)、查看服务器参数; 1)、查询v$parameter; 2)、使用SQL*PLus的SHOW PARAMETER命令显示服务器参数; 3)、修改服务器参数; 1)、通过企业管理器(OEM)修改; 2)、使用ALTER SYSTEM命令修改服务器参数; 6)、口令文件; 7)、辅助文件; 1)、密码文件; 1)、密码文件是oracle系统用于验证sysdba权限的二进制文件,当远程用户以sysdba 和sysoper连接到数据库时,一般要用到密码文件验证; 2)、警告文件(警告日志文件); 1)、警告文件是一个储存在oracle系统目录下的文本文件(通常为alert_orcl.log),它用来记录oracle系统的运行信息和错误信息; 2)、随着时间的推移,警告文件会越来越大,数据库管理员应该定期删除警告文件; 3)、跟踪文件; 1)、后台跟踪文件,用于记录后台进程的警告或错误信息; 2)、用户进程文件,用于记载与用户进程相关的信息,它主要用于跟踪SQL语句; 3)、每个后台进程都有对应的后台进程文件; Oracle服务器 1)、实例; 1)、系统全局区(SGA) 1)、SGA使用操作系统的内存资源,是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用; 2)、高速数据缓存区(Database buffer cache); 1)、高速数据缓存区中存放着Oracle系统最近访问过的数据块,数据块在高速数据缓存区中也称为缓存块;

oracle第二讲笔记

■类(对象)与表(记录)的关系图 ■创建表 基本语法 create table 表名( 列名列的数据类型, ... ) 举例说明 创建一张用户表 create table users( id number, name varchar2(32), password varchar2(32), birthday date); ■oracle的数据类型 ①char(size)

存放字符串,最大2000个字符,是定长。 举例说明 create table test1(name char(32)); 这样,在name这列,最多只能存放32个字符,如果超过,就报错,如果不够’abc’,则用空格补全。 insert into test1 values(‘abc’); create table test2(name char(4000)); ②varchar2(size) 变长,最大存放4000个字符 举例说明 特别说明:如果我们的数据的长度是固定的,比如商品编号(8位),则应当使用char来存放,因为这样存放速度快,如果存放的数据长度是变化的,则使用varchar2 ③nchar(size) 1.定长 2.编码方式unicode 举例说明 create table test4(name nchar(2)); insert into test4 values(‘中国’);//ok

create table test5 (name char(2)); insert into test5 values(‘中国’);//报错 说明:一个汉字,占用nchar的一个字符空间,一个汉字,占用char的两个字符空间 3.最大字符长度2000 ④nvarchar2(size) 1.变长 2.unicode编码 3.最大字符长度4000 ⑤clob(charater large object)字符型大数据对象 1.变长 2.8Tb ⑥blob(binary large object)二进制大数据对象 1.变长 2.最大8tb 特别说明:我们在实际开发中很少把视频,图像文件存放数据库(效率问题),实际上存放记录文件的一个路径(本地或url),然后通过io/网络来操作 如果我们要求对文件安全性,可以考虑存放数据库。 ⑦number NUMBER[(precision [, scale])] NUMBER(p,s)

oracle学习笔记

1、s qlload导入数据 1.1、sql loader 的特点 oracle自己带了很多的工具可以用来进行数据的迁移、备份和恢复等工作。但是每个工具都有自己的特点。比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面。有着速度快,使用简单,快捷的优点;同时也有一些缺点,比如在不同版本数据库之间的导出、导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle公司自己产品的兼容性的问题吧。sql loader 工具却没有这方面的问题,它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。 1.2、sql loader使用例子 创建一个假日表

a、insert,为缺省方式,在数据装载开始时要求表为空 b、append,在表中追加新记录 c、replace,删除旧记录,替换成新装载的记录 d、truncate,同上 1.4、执行命令 将jrb.ctl文件和jrb0.dat文件放在e:\tem目录下 arms/arms@armsdb这里数据库用户名:arms;密码:arms;数据库:armsdb;

2、oracle对应用程序性能分析 有的时候我们发现一个应用系统运行很慢,运行很慢主要是由于跟数据库有关,致使数据很长时间没有返回数据,这个时候我们可能去查oracle到底哪里有问题,是什么原因导致他运行非常慢。其实很多时间都是由于程序人员写的sql执行效率非常低或者某个时间段访问量忽然猛增或者其他原因,那么我们如何定位到是哪一个SQL或是哪一个时间段有问题呢?因为如果我们定位到某个时间段比其他时间段cpu,内存都相当耗时,我们就可以查看我们应用系统在这个时间段做什么,从而分析出系统运行慢的原因;我们也可以分析某个sql的运行时间,有时一段sql跑上几个小时都没跑出来。如果我们能定位到这些sql,对我们改善系统性能也是有很大帮助。我们这里通个分析addmrt和awrrpt来粗略分析数据库性能。在awrrpt这个里面,我们可以得到耗时前五的事件。 调取addmrt和awrrpt文件 登录oracle服务器进行以下目录:

韩顺平玩转oracle视频教程笔记

韩顺平—玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装 ORACLE 认证 oca ocp ocm 数据库分类 小型数据库:access foxbase 中型数据库:mysql sql server informix 大型数据库:sqbase oracle db2

oracle安装和管理用户

Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database 的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 启动oracle方法和工具 1、电脑右键-管理-服务-数据库实例oracleServiceSID-监听oracleOraHome90TnsListener 2、pl\sql登录:开始-程序-oracle orachome90-application development-sql*plus 3、在运行栏中输入:sqlplusw即可 4、在开始-程序-oracle orahome90-applicaiton development-sql*plus worksheett 5、sqlplus dos 下操作oracle的工具,其功能和sql*plus相似。 在运行栏中输入 sqlplus 找到该可执行文件sqlplus.ext 在oracle主目录、ora90\bin\sqlplus.exe,鼠标双击即可。 6、oracle的企业管理器(oem oracle enterprise manager)

相关主题
相关文档
最新文档