Oracle学习笔记
Posted 火柴天堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle学习笔记相关的知识,希望对你有一定的参考价值。
卸载Oracle
1.以Administrators group身份登陆windows系统。
2.通过Oracle installer 卸载所有orcle产品及组件。
3.停掉Oracle Service服务。
4.删除%ORACLE_base%文件和SYSTEM_DRIVE:program files下的oracle文件。
5.删除SYSTEM_DRIVE:Documents and SettingsAll Users「开始」菜单程序中的oracle项。
6.打开注册表:
到HKEY_CLASSES_ROOT下,删除以Oracle,ORA,ORCL开头的键;
到HKEY_LOCAL_MACHINESOFTWARE下,删除ORACLE键和Apache Group键;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,删除以Oracle开头的键;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices EventlogApplication下,删除以Oracle开头的键;
到HKEY_CURRENT_USER下,删除Oracle键;
到HKEY_CURRENT_USERSOFTWAREORACLE下,删除以Oracle 或 Orcl开头的键(如果有的话);关闭注册表,重启计算机。
7.打开系统系统环境变量(我的电脑->右键->系统属性->高级->环境变量),在PATH中删除所有以%ORACLE_HOME%开始的项。
8.重启计算机。
到HKEY_LOCAL_MACHINESOFTWARE下,删除ORACLE键和Apache Group键;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,删除以Oracle开头的键;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices EventlogApplication下,删除以Oracle开头的键;
到HKEY_CURRENT_USER下,删除Oracle键;
到HKEY_CURRENT_USERSOFTWAREORACLE下,删除以Oracle 或 Orcl开头的键(如果有的话);关闭注册表,重启计算机。
7.打开系统系统环境变量(我的电脑->右键->系统属性->高级->环境变量),在PATH中删除所有以%ORACLE_HOME%开始的项。
8.重启计算机。
Oracle错误:动态执行表不可访问,本会话自动统计被禁止
grant select on v_$statname to scott;
grant select on v_$sesstat to scott;
grant select on v_$session to scott;
grant select on v_$mystat to scott;
关闭生成备份文件
选项-备份-文件-禁止
Win10下安装Oracle11g 不满足配置解决方法
在装置文件的/stage/svu文件夹上面找到文件 cvu_prereq.xml文件,添加Windows 10对应字段即可(64位选择64-bit)。
<OPERATING_SYSTEM RELEASE="6.2">
<VERSION VALUE="3"/>
<ARCHITECTURE VALUE="32-bit"/>
<NAME VALUE="Windows 10"/>
<ENV_VAR_LIST>
<ENV_VAR NAME="PATH" MAX_LENGTH="1023" />
</ENV_VAR_LIST>
</OPERATING_SYSTEM>
SQL语言基础
1.数据查询语言 DQL,select 2.数据操纵语言DML (insert,update,delete) 3.事务控制语言TCL (commit,rollback,savepoint)
4.数据定义语言DDL(create,alter,drop) 5 数据控制语言DCL(grant,revoke)
实例模式SCOTT
默认账户/密码:scott/tiger
alter user scott account unlock;
复杂查询
--检索指定的列
select job,ename,empno from emp;
--带有表达是的select子句
select sal*(1+0.2),sal from emp;
--显示不重复的记录
select distinct job from emp;
--比较筛选 <> =
select empno,ename,sal from emp where sal>1000;
select empno,ename,JOB from emp;
select empno,ename,sal from emp where sal <>all(3000,950,800);
--特殊关键字筛选
--like 模糊查询
select empno,ename,job from emp where JOB like ‘S%‘;
--IN --varchar
select empno,ename,job from emp where job in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘);
--NOT IN
select empno,ename,job from emp where job not in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘) ;
--BETWEEN -numer ,inter
select empno,ename,sal from emp where sal between 2000 and 3000;
--NOT BETWEEN
select empno,ename,sal from emp where sal NOT between 2000 and 3000;
--IS NULL/ is not null
select * from emp where comm is NOT null;
--逻辑筛选
--and ,or,not 关系 于 -或 --非
select empno,ename,sal from emp where sal>=2000 and sal<=3000 ;
select empno,ename,sal from emp where sal<2000 or sal>3000 ;
--分组查询
select deptno,job from emp group by deptno,job order by deptno ;
select deptno as 部门编号,avg(sal) as 平均工资 from emp group by deptno;
select deptno as 部门编号,avg(sal) as 平均工资 from emp group by deptno having avg(sal)>2000; --group by 子条件 having
--排序查询Order by; desc:逆序 asc默认
select deptno,empno,ename from emp order by deptno,EMPNO;
多表关联查询
--内连接
select e.empno as 员工编号, e.ename as 员工名称, d.dname as 部门
from emp e inner join dept d on e.deptno=d.deptno;
--左外连接
insert into emp(empno,ename,job) values(9527,‘EAST‘,‘SALESMAN‘);
select e.empno,e.ename,e.job,d.deptno,d.dname from emp e left join dept d
on e.deptno=d.deptno;
--右外连接
select e.empno,e.ename,e.job,d.deptno,d.dname from emp e right join dept d
on e.deptno=d.deptno;--完全连接
select e.empno,e.ename,e.job,d.deptno,d.dname from emp e full join dept d
on e.deptno=d.deptno;--自然连接(共有的属性,会去除重复列)
select empno,ename,job,dname from emp natural join dept where sal>2000;
/*自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。*/
/*交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数*/
select count(*) from dept cross join emp; Oracle常用系统函数
--ASCII(c)函数 CHR(I) 小写比大写 大32 小写a 97 小写z 122
select ascii(‘Z‘) A,ascii(‘y‘) a,ascii(‘D‘) D,ascii(‘#‘) space from dual;
select chr(90),chr(122),chr(68),chr(32) s from dual;
--CONCAT(s1,s2) 函数 字符串拼接
select concat(‘Hello‘,‘ World!‘) information from dual;
--INiTCAP(S)函数 返回每个单词的第一个字母大写,其他小写
select initcap(‘gOod lUck For yOu!‘) information from dual;
--在Oracle 11g中 ,从第三个字符开始查询字符串“1”第2次出现的位置
instr(‘s1‘,‘s2‘,‘1‘,‘1‘)
select instr(‘o1racle 11g‘,‘1‘,3,2) abc from dual; --2个参数默认值都是1
--lower(s)小写 upper(‘‘) 大写 函数
--LTRIM(s1,s2)-删除字符串s1左边的字符串s2,RTRIM(S1,S2)-删除字符串s1右边的s2,
--TRIM(s1,s2)函数
select ltrim(‘####East####‘,‘#‘),rtrim(‘East ‘),trim(‘#‘ from ‘####East###‘) from dual;
--- create or replace### DROP TABLE "SIMON"."T_LOG"; CREATE TABLE "SIMON"."T_LOG"
---除了表对象,其他都可以用functions, procedures, packages, types, synonyms, trigger and views
--REPLACE(s1,s2[,s3])函数
select replace(‘Bad Luck Bad Girl‘,‘Bad‘,‘Great‘) from dual;
--SUBSTR(s,i,[j])函数*** 字符串截取函数
select substr(‘Message-Pretty-Box‘,9,6) from dual;
--CEIL(n)函数 返回大于或等于 数值n的最小整数
select ceil(7.8),ceil(7),ceil(-7.3) from dual;
--Round(n1,n2)函数 返回该函数舍入小数点右边n2位的n1的值
select round(3.1415926,2) from dual;
--日期和时间函数
select sysdate as 系统日期 from dual;
--在当前的日期下加6个月
select ADD_MONTHS(sysdate,6) from dual;
--转化类函数 ***
select sysdate as 默认格式日期,to_char(sysdate,‘YYYY-MM-DD‘) as 转换后日期 from dual;
--转化为10进制
select to_number(‘ABC‘,‘XXX‘) as 十进制 from dual;
--聚合类函数*****
--avg()平均值,count()总记录数,max() --最大值,min() --最小值 ,sum()求和,variance()方差,STDDEV()标准差;
select count(empno) as 员工数,round(avg(sal),2) as 平均工资 from emp;
子查询
--子查询: sql语句内的另外一条select语句,也曾为内查询或内select 查询
--任何在 select、insert、update或delete命令中允许表达式的地方都
--在emp表中查询部门名称(dname)为“RESEARCH”的员工信息;
select empno,ename,job from emp where deptno=(select deptno from dept where dname =‘RESEARCH‘ );
--多表连接的方式
select empno,ename,job from emp join dept on emp.deptno=dept.deptno
where dept.dname=‘RESEARCH‘;
--相对于多表关联查询,子查询的使用更加灵活、功能更强,而且更容易理解
--但是多表连接的效率要高于子查询;
--子查询语句
select deptno from dept
where dname =‘RESEARCH‘
--外查询语句
select empno,ename,job from emp;
--一般情况下,外查询语句检索一行,子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足。
--如果条件满足,将检索的数据添加的结果集中,不满足则检索下一行的数据,所以说子查询相对于关联查询要更慢一些;
--(1)子查询必须用括号“()”括起来。(2)子查询不能包括ORDER BY子句。(3)子查询允许嵌套多层,但不能超过255层。
--(1)单行子查询 (2)多行子查询(3)关联子查询
--单行子查询 :查询emp表中既不是最高工资,也不是最低工资的员工信息;
--子查询返回的是一行数据
select empno,ename,sal from emp where sal >(select min(sal) from emp)
and sal <(select max(sal) from emp);
--多行子查询:查询不是销售部 的员工信息 (in,any,all)
--子查询返回的是多行的数据
select empno,ename,job from emp where deptno in(select deptno from dept where dname <>‘SALES‘);
--查询工资大于部门编号为10 的任意一个员工即可的其他部门的员工信息
select deptno,ename,sal from emp where sal >any (select sal from emp where deptno =10) and deptno<>10;
--查询工资大于部门编号为30的所有员工的工资信息
select deptno,ename,sal from emp where sal>all (select sal from emp where deptno =30);
--关联子查询
--检索工资大于(同职位的平均工资)的员工信息
select empno,ename,sal from emp f
where sal>(select avg(sal) from emp where job = f.job)order by job;事务处理
--事务,当使用事务修改多个数据表时,在处理过程中出现了某种错误,如系统死机或断电,返回结果所有数据都没有保存
--使用事务可以提高数据的安全性,增强数据的处理效率
--访问Oracle附带模式HR 切换DBA
ALTER USER hr ACCOUNT UNLOCK;
ALTER USER hr IDENTIFIED BY 1234;
--sql>
insert into jobs values(‘OFFICE‘,‘办公文员‘,3000,5000);
savepoint sp;
insert into jobs values(‘FINANCE‘,‘财务人员‘,4000,8000);
select * from jobs;
rollbcak to savepoint sp;PLSQL编程
/*基本数据类型 数值 number, 字符类:varchar2 40000字节、char 2000字节、long 2GB、nchar,nvarchar2 根据各国的字符集来定
日期类型DATE, 布尔类型:boolean 值:True,false,null
代码美化:工具-PLSQL美化器
*/
/*%type (1)不需要查看表中各个列的数据类型,就可以确保变量能够存储检索数据
(2)已有的列已经修改,不用考虑对已定义的变量的数据类型进行修改 ;%type 会根据实际项目自动调整自身的数据*/
declare
Num_sal emp.sal%type;
Var_ename emp.job%type;
begin
select ename,sal into Var_ename,Num_sal from emp
where empno=7369;
dbms_output.put_line(Var_ename||‘的工资是‘||Num_sal);
end;*/
/*record类型*/
declare
type emp_type is record
(
var_ename varchar2(20),
var_sal number
);
empinfo emp_type;
begin
select ename,sal into empinfo from emp
where empno=7369;
dbms_output.put_line(empinfo.var_ename||‘的工资是‘||empinfo.var_sal);
end;*/
/*rowtype*/
---PLSQL
GRANT debug any procedure, debug connect session TO scott;
--修改注释 快捷键
declare
rowVar_emp emp%rowtype;
begin
select *into rowVar_emp from emp
where empno=7369;
dbms_output.put_line(rowVar_emp.ename||‘的工资是‘||rowVar_emp.Sal);
end;
--控制文件多路复用,复制控制文件先暂停OracleServicesORCL和OracleDBConsoleOrcl服务
alter system set control_files=
‘D:\app\Administrator\oradata\orcl\CONTROL01.CTL‘,
‘D:\app\Administrator\flash_recovery_area\orcl\CONTROL02.CTL‘,
‘D:\OracleFiles\ControFiles\CONTROL03.CTL‘
scope=spfile; VX:13037231781
以上是关于Oracle学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段