ORACLE笔记整理

合集下载

oracle课程笔记.

oracle课程笔记.

1.触发器创建命令 Creat trigger <触发器名称>2.before insert or update of department_id on employees 意思是当表employees执行insert操作以及针对employees表中的department_id字段做update操作地时候,发起触发器;3.referencing old as old_value new as new_value for each row 定义了触发器关键动作(insert,update,delete)的修改临时变量(new,old) insert: 此时有一个new的修改临时变量可以被后续SQL操作当为insert时,只存在new变量,存放着insert的所有记录信息 update: 当为update时,update之前的数据存放在old中, update之后的数据存放在new中;注:如果update了一个字段,那么old和new里是保存着字段值还是一个完整的记录值 delete: 当为delete时,delete之前的数据存放在old中,并且只有old;4.定义触发器限制 when (new_value.department_id<>805.if...then elseif...then6. user当前登录用户7. Raise_application_error一个oracle定义的异常对象8. Create or replace 创建或者替换触发器9. sysdate当前系统时间 10.表修改关键字alter table 11.Declare 定义触发器中的变量 12.<字段>%type 表示字段的类型 13.定义触发器生效之后的SQL句操作 begin :new_mission_pct :=0; end; 14.before....for each row表示触发器对每一行生效 15.create sequence 建立字增长的序列号。

oracle数据库整理笔记

oracle数据库整理笔记

oracle数据库整理笔记表格:infos1 infos2insert into infos1(stuid,stuname,gender,age,seat,stuaddress,classno) values(2,'张三','男',18,24,'梁山伯',13);需要注意的是:中文要带单引号'中文名'1、查看表格约束:select constraint_name,search_condition from all_constraints where table_name='表名';(注:表名一定要大写)2、查看表格约束名字(constName):select constraint_name from user_constraintsinsert语句(向表格中插入一行数据)insert into table_name(column1,column2...) values(value1,value2,...);3、查找表格(查看表格行信息)select * from tab;(查看当前创建的表名)select * from 表名;4、查看表格约束(表格列结构)describe 表名;5、创建表:create table infos(stuid varchar2(7) not null,stuname varchar(10) not null,gender varchar(2) not null,age number(2) not null,seat number(2) not null,enrolldate date,stuaddress varchar2(50) default '地址不详',classno varchar2(4) not null)6、oracle中的约束:非空约束:not null主键约束:primary key外键约束:foreign key ....references....唯一约束:unique检查约束: check默认约束:default7、查看所有用户名:select * from dba_user;(前提是以sys用户名拥有dba权限才可以用这个命令查看)删除用户名(在用户下没有任何对象的情况下可以使用这个命令):drop user 用户名;【】无法删除用户名的解决方法命令(已登录sys用户名)8、查看用户连接情况:select username,sid,serial# from v$session;9、杀掉用户进程资源:alter system kill session 'serial#, sid ';10、删除用户下的所有对象:drop user 用户名 cascade;11、关闭oracle数据库,重新启动oracle数据库原来的用户进程就会消失掉。

oracle 笔记

oracle 笔记

oracle 笔记Oracle是一种关系数据库管理系统,由Oracle Corporation开发。

以下是关于Oracle的一些笔记:1. 数据库架构:Oracle数据库有两个主要的架构:逻辑架构和物理架构。

逻辑架构包括了数据库对象(表、索引、视图等)以及用户和角色的定义。

物理架构指的是数据在磁盘上的存储方式。

2. 数据库对象:Oracle数据库中的主要对象包括表、索引、视图、触发器、存储过程等。

表是最基本的对象,用于存储数据。

索引用于加快表的查询速度。

视图是一种虚拟表,通过查询一个或多个表返回结果。

触发器是一种在表上定义的操作,当满足某些条件时触发。

存储过程是一段可重复使用的程序代码,用于完成特定的任务。

3. SQL语言:Oracle数据库使用SQL(Structured Query Language)进行数据库操作。

SQL语言包括数据查询语句(SELECT)、数据操作语句(INSERT、UPDATE、DELETE)以及数据定义语句(CREATE、ALTER、DROP)等。

4. 数据库管理:Oracle提供了一套完整的数据库管理工具,包括创建数据库、备份和恢复数据库、监控数据库性能等。

其中,Oracle Enterprise Manager是一个图形化界面的管理工具,可以通过它来管理和监控整个数据库系统。

5. 数据完整性:Oracle数据库通过约束条件来确保数据的完整性。

主键、外键、唯一约束、非空约束等都可以用于限制数据的输入。

此外,还可以使用触发器和存储过程来定义自定义的数据完整性规则。

6. 事务管理:Oracle数据库使用ACID(原子性、一致性、隔离性、持久性)模型来管理事务。

事务是一系列数据库操作的逻辑执行单元,要么全部执行成功,要么全部回滚。

这些只是Oracle数据库的一些基本概念和特点,还有很多其他的内容,如高可用性、性能优化、安全性等。

如果想要深入了解Oracle数据库,可以参考相关的文档和教程。

ORACLE学习笔记整理

ORACLE学习笔记整理

ORACLE学习笔记整理1.学习环境注意,以下涉及到的例题数据均来自于作业管理系统中“陈勇”名下的“数据库原理与应用”文件夹中的“实验数据04.xls”。

请下载使用。

1.1 SQL窗口通常用于试运行单条SQL语句。

(1)启动方式在PL/SQL Developer界面下单击新建中的第一个图标,在菜单中选“SQL窗口”。

界面如下图所示:在其中可以输入SQL语句,单击工具栏上的运行按钮“”,可得到运行结果。

如下图:1.2 命令窗口同SQL窗口,可以执行ORACLE的各种命令、SQL语句、程序等。

(1)执行SQL语句结果如下图:执行SQL语句时,要求语句以“;”结束,如果语句末尾没有“;”,表示语句还没有录入结束,后面以续行号“2,3,4”的形式等待录入后续内容。

如果不想录入“;”,也可以以“/”表示语句录入结束。

如下图(2)执行ORACLE命令如下图:命令目的是显示学生信息表的结构,对于ORACLE命令关键字,只要输入前面四个以上的字符即可。

1.3 测试窗口用于录入ORACLE程序。

如下图单击工具栏上的运行按钮,可以运行程序,程序结果在“DBMS”输出页中。

如下图所示:从这个程序我们可以看到ORACLE程序的基本结构如下:Declare/*定义部分-变量、常量、游标等*/Begin/*执行部分-PL/SQL,SQL语句*/Exception/*异常处理部分-处理运行错误*/End; /*块结束标志*/也可以看出ORACLE中的字符串连接运行符非常得单“||”。

2. 语言基础2.1 PL/SQL数据类型在PL/SQL程序中定义变量、常量和参数时,必须要为它们指定数据类型,在编写PL/SQL 时,可以使用标量类型、复合类型、参照类型和LOB(Large Object大对象类型)类型等。

如下表所示:2.1.1 标量(SCALAR)合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。

它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。

oracle 笔记

oracle 笔记

oracle 笔记摘要:一、Oracle 简介1.Oracle 的发展历程2.Oracle 的产品和服务二、Oracle 数据库的基本概念1.数据库管理系统2.关系型数据库3.Oracle 数据库的结构三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件2.安装过程及注意事项3.配置Oracle 数据库四、Oracle 数据库的管理1.数据库的启动与关闭2.数据库的备份与恢复3.用户与权限管理五、SQL 语言基础1.SQL 简介2.SELECT 查询语句3.INSERT、UPDATE 和DELETE 操作语句六、PL/SQL 编程1.PL/SQL简介2.存储过程与函数3.触发器与异常处理七、Oracle 数据库的应用1.Oracle 数据库在企业级应用中的优势2.Oracle 数据库在典型行业的应用案例正文:一、Oracle 简介Oracle(甲骨文)公司成立于1977 年,总部位于美国加州,是全球著名的数据库软件及解决方案供应商。

Oracle 的产品和服务涵盖了数据库、应用软件、中间件、云计算等领域,广泛应用于企业、政府、金融、医疗等各个行业。

二、Oracle 数据库的基本概念1.数据库管理系统:数据库管理系统(DBMS)是一种用于存储、检索和管理数据的计算机软件。

它提供了对数据的高效组织、存储、检索、更新和维护功能。

2.关系型数据库:关系型数据库是基于关系模型的数据库,采用表格形式存储数据,并通过SQL(结构化查询语言)进行操作。

Oracle 数据库是一种关系型数据库,具有强大的数据管理功能和高度的数据安全性。

3.Oracle 数据库的结构:Oracle 数据库由物理结构和逻辑结构组成。

物理结构包括数据库文件、数据块、表空间等;逻辑结构包括表、视图、索引等。

三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件:首先,需要确保计算机硬件满足Oracle 数据库的最低要求;其次,需要获取Oracle 数据库的安装文件,这些文件通常可以从Oracle 官网下载。

oracle常用笔记总结

oracle常用笔记总结

1、用dba权限的用户查看数据库都有哪些锁select ername,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sid order by t2.logon_time;2、查看有哪些对象被锁了select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,dba_objects bwhere b.object_id = a.object_id3、根据sid查找进程idselect 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下的进程pidlinux命令: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;重新收集统计信息:begindbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end;6、ORA-02064 distributed operation not supportedCause:One of the following unsupported operations was attempted:Array execute of a remote update with a subquery that references a database link, orAn update of a long column with bind variable and an update of a second column with a subquery that both references a database link and a bind variable, orA commit is issued in a coordinated session from an RPC with OUT parameters.Action:Simplify the remote update statement.问题: 数据库A ,B 通过DBlink互相访问, 数据库A 调用数据库B的存储过程pro_b , pro_b 过程中有out 输出参数,并且里面有dml语句,之后commit ,或rollback. 这时数据库A 通过DBlink 的调用pro_b@B就会产生这个错误.解决办法:a. 去掉pro_b中的commit, rollback ,统一有数据库B来控制事务.(当然也可以去掉out参数,这样也破坏是事务的完整性)b.用自制事务来控制pro_b , 在pro_b中添加.PRAGMA AUTONOMOUS_TRANSACTION; 优点:不用去修改调用的所有方法.当然这样也不能控制事务的完整.7、建表开启并行v_table_sql := 'CREATE TABLE T_MOBILE_CAP_DETA82_'||in_date||' parallel (degree 4) as '||' select /*+parallel(t1 4) */ * fromT_MOBILE_CAP_DETAIL_'||in_date||'@QAS82 t1';EXECUTE IMMEDIATE v_table_sql;8、创建dblinkCREATE DATABASE LINK CONNECT TO TRAFFICIDENTIFIED BY "pwd"USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.228.65)(PORT=1521)))(CONNECT_DATA=(SID=qas)))'9、创建临时表a.create global temporary table temp_tbl(col_a varchar2(30))on commit preserve rows(当提交后保留数据,session结束时才清除数据)b.create global temporary table temp_tbl(col_a varchar2(30))on commit delete rows (当提交后不保留数据,session结束时也清除数据)10、drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。

Oracle学习笔记

Oracle学习笔记

Oracle 入门学习笔记
4.3 分析函数 .................................................................................................... 17 第三章 分区表与锁 ................................................................................................ 17 1. 分区表的分类 ....................................................................................................... 17 2. 分区表的使用 ....................................................................................................... 17 3. 分区表的维护 ....................................................................................................... 20 4. 锁 ........................................................................................................................ 21 第四章 数据对象..............................................................................

oracle 笔记

oracle 笔记

关于Oracle的学习笔记,可能包括以下几个重要部分:数据库创建和管理:创建用户和表空间。

以超级管理员的身份登录,创建表空间,创建用户,给用户授权,使用新用户进行查询测试。

数据定义语言(DDL)用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP)。

例如,使用CREATE TABLE创建表,使用ALTER TABLE修改表,使用DROP TABLE删除表等。

数据库查询:数据查询语言(DQL)用于查询所需要的数据。

排序查询结果。

例如,使用SELECT语句查询员工信息,并按升序排序。

排序可使用NULLS FIRST和NULLS LAST来选择空的信息的位置。

字符串拼接。

通过“||”实现字符串的拼接。

例如,查询所有员工姓名并在后面加一个“a”。

当字符串拼接遇到空的时候,空会自动变成一个空字符串。

数据库数据操作:数据操作语言(DML)用于改变数据库数据,包括INSERT、UPDATE、DELETE三条语句。

使用DISTINCT去重。

例如,SELECT DISTINCT name, id FROM A,作用于多列。

数据库高级特性:使用PARTITION BY在保留全部数据的基础上,只对其中某些字段做分组排序。

虚拟表DUAL是一个虚表,虚拟表,是用来构成SELECT的语法规则,Oracle保证DUAL里面永远只有一条记录。

数据库控制和管理:数据控制语言(DCL)用于数据库的控制和管理。

事务控制语言(TCL)用于数据库事务的控制。

以上内容只是Oracle学习笔记的一部分,实际上Oracle数据库系统的学习还包括很多其他的内容,如索引管理、视图、存储过程、触发器等高级数据库对象的管理和使用,以及数据库性能优化、安全性管理等内容。

oracle笔记整理

oracle笔记整理

1,SGA主要有那些部分,主要作用是什么共享SQL和PLSQL的执行计划和数据字典对象等信息1.data dict cache 也叫rowcache 加速SQL的解析使用过的字典就会缓存在这里再次使用这个字典就直接从内存获取这些统计的信息在v$rowcache中记录2.library cache: 加速解析减少语句重解析SQL文本,解析树和执行计划就在这里缓冲被访问的数据块.每次从磁盘向内存缓冲数据的单位由db_block_size=8192 决定,这个区域缓冲的数据保持时间也由LRU算法决定记录数据库的每个改动向量,就是记录有顺序的SQL条目,这些SQL条目包括系统的改动和UNDO的改动,用户数据的改动,将一个人的工资由800改成1000 还没提交就断电,这时数据有可能写盘下次启动时就通过回滚段中的改前镜像和日志进行恢复,如果提交了数据有可能没写盘这时断电下次启动就通过日志重做,主要是为了数据的增删改过程记录日志的提高数据安全性4large pool(9I引入)大池存放对那些复杂的程序包分析、RMAN、UGA(共享模式)、异步IO等相关的数据5 java pool(9I引入)JAVA池存放JAVA存储过程的分析信息。

6 stream pool(10g引入)流池为流复制服务提供数据缓冲缓存2:oracle系统进程主要有哪些,作用是什么在众多实例进程中有5个必须进程1.SMON 系统监视进程1.空间管理:定期合并空间(老版本才有) 定期回收临时段2.实例恢复:(服务器掉电了实例意外终止) 恢复的方法:先前滚==>后回滚==>释放资源前滚将数据库中的SQL(包括提交的和未提交的)全部重新做一遍回滚将没提交的SQL句从数据库中将老的镜像取出覆盖释放资源将前滚和回滚中使用到的资源释放2.DBWn n指的是0-9 a-j 多个写进程的区分将脏块写盘触发写的条件1.产生检查点2.脏数据缓冲区达到阀值默认10%3.扫描整个data buffer没有空闲data buffer中包含脏的和未脏的优先写脏数据列表再写未改的4.timeout超时如果DBWR没事做会被每三秒唤醒一次去巡检写不写不一定5.集群环境的ping请求触发多实例的数据写请求6.表级别的truncate或drop也会触发数据写7.修改表空间的read only8.做表空间的offline(离线)9.热备份begin backup命令3.PMON 进程监视器1.清理与实例非法断开的server_procese残留的资源非正常终止的用户进程产生的垃圾资源2.负责重启意外死掉的调度器(网络监听中使用的)3.将实例的信息注册到监听程序4.CKPT 把新的检查点写入指定位置1.调度数据写dbwN2.将新检查点写数据文件头3.将新检查点写控制文件中的数据文件头的记录5.LGWR 只有一个进程不会向数据写进程那么多因为写要求有顺序将redo log buffer里的条目写到redo文件触发写的条件mit2.redo log buffer 1/3满3.redo log buffer 日志缓冲区达到1M4.写日志优先当DBWR要写脏数据时,要检查脏数据对应的日志是否写盘,如果日志还没写,会优先写日志5.3秒写一次简答题1解释冷备份和热备份的不同点以及各自的优点解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。

oracle精品笔记(53节完整版)名师手书

oracle精品笔记(53节完整版)名师手书

尚学堂马士兵老师oracle笔记(2008-10-30 10:17:39)第一课:客户端1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。

2. 从开始程序运行:sqlplus,是图形版的sqlplus.3. http://localhost:5560/isqlplusToad:管理,PlSql Developer:第二课:更改用户1. sqlplus sys/密码as sysdba2. alter user scott account unlock;(解锁账号)第三课:table structure(系统自带的表有emp、salgrade、dept、bonus、dual)1. 描述某一张表:desc 表名2. select * from 表名第四课:select 语句:1.计算数据可以用空表:比如:.select 2*3 from dual2.select ename,sal*12 annual_sal from emp;与select ename,sal*12 "annual sal" from emp;区别:加双引号保持原大小写,不加全变大写。

任何含有空值的数学表达式结果都为空值。

3. select ename || ‘abcd’|| 用来连接两个字符串如果连接字符串中含有单引号,用两个单引号代替一个单引号。

第五课:distinctselect deptno from emp;select distinct deptno from emp;select distinct deptno ,job from emp去掉deptno,job两者组合的重复。

更多的项,就是这么多项的组合的不重复组合。

第六课:Whereselect * from emp where deptno =10;select * from emp where deptno <>10;不等于10select * from emp where ename ='bike';select ename,sal from emp where sal between 800 and 1500 (>=800 and <=1500)空值处理:select ename,sal,comm from emp where comm is (not) null;select ename,sal,comm from emp where ename ( not)in ('smith','king','abc');模糊查询like :%代表任意数量的任意字符_代表一个任意字符select ename from emp where ename like '_A%';如果要查询含有%的,要用转义字符\转义字符可以自定义:escape '自定义的转义字符' 比如:select ename from emp where ename like '%$a%' escape '$';第七课: order byselect * from dept;默认按升序(asc)排列,要按降序(desc)用如下语句:select * from dept order by dept desc;select ename,sal,deptno from emp order by deptno asc,ename desc;第八课: sql function1:select ename,sal*12 annual_sal from empwhere ename not like '_A%' and sal>800order by sal desc;select lower(ename) from emp;select ename from empwhere lower(ename) like '_a%';等同于select ename from emp where ename like '_a%' or ename like '_A%';select substr(ename,2,3) from emp;从第二个字符开始截,一共截三个字符.select chr(65) from dual 结果为:Aselect ascii('a') from dual 结果为:65select round(23.652,1) from dual; 结果为: 23.7(第二个参数为指定四舍五入到哪位数)select round(23.652,-1) from dual; 20select to_char(sal,'$99,999,999') from emp;(用9就可以在没有数字的地方不显示,如果用0的话一定会用0填充满)select to_char(sal,'L99_999_999') from emp; L:代表本地符号这个需要掌握牢:select hiredate from emp;显示为:BIRTHDATE----------------17-12月-80----------------改为:select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;显示:BIRTHDATE-------------------1980-12-17 12:00:00-------------------select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; //也可以改为:HH12TO_CHAR(SYSDATE,'YY-------------------2007-02-25 14:46:14to_date函数:select ename,hiredate from emp where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');如果直接写birthdate>'1981-2-20 12:34:56'会出现格式不匹配,因为表中的格式为: DD-MM月-YY.select sal from emp where sal>888.88 无错.但select sal from emp where sal>$1,250,00;会出现无效字符错误.改为:select sal from emp where sal>to_number('$1.250.00','$9,999,99');把空值改为0select ename,sal*12+nvl(comm,0) from emp;作用:把comm为空的地方用0代替,这样可以防止comm为空时,sal*12相加也为空的情况.第九课: Group function 组函数(即从多行中得到一个输出)牢记组函数:max(), min(), avg(), sum(), count()select to_char(avg(sal),'99999999,99') from emp;select round(avg(sal),2) from emp;结果:2073.21select count(*) from emp where deptno=10;select count(ename) from emp where deptno=10; count某个字段,如果这个字段不为空就算一个.select count(distinct deptno) from emp;select sum(sal) from emp;第十课: Group by语句注意:count() 是计数不是空值的数量需求:现在想求每个部门的平均薪水.select avg(sal) from emp group by deptno;select deptno, avg(sal) from emp group by deptno;select deptno,job,max(sal) from emp group by deptno,job;求薪水值最高的人的名字.select ename,max(sal) from emp;出错,因为max只有一个值,但等于max值的人可能好几个,不能匹配.应如下求:select ename from emp where sal=(select max(sal) from emp);Group by语句应注意,出现在select中的字段,如果没出现在组函数中,必须出现在Group by语句中.第十一课: Having 对分组结果筛选Where是对单条纪录进行筛选,Having是对分组结果进行筛选.select avg(sal),deptno from empgroup by deptnohaving avg(sal)>2000;查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.select avg(sal) from empwhere sal>1200group by deptnohaving avg(sal)>1500order by avg(sal) desc;第十二课:子查询谁挣的钱最多(谁:这个人的名字, 钱最多)select 语句中嵌套select 语句,可以在where,from后.问那些人工资,在平均工资之上.select ename,sal from emp where sal>(select avg(sal) from emp);查找每个部门挣钱最多的那个人的名字.select ename ,deptno from emp where sal in (select max(sal) from ename group by deptno) 查询会多值.应该如下:把select max(sal),deptno from emp group by deptno;当成一个表.语句如下:select ename, sal from emp join(select max(sal) max_sal,deptno from emp groupby deptno) t on (emp.sal=t.max_sal and emp.deptno=t.deptno);每个部门的平均薪水的等级.分析:首先求平均薪水(当成表),把平均薪水和另外一张表连接.第十四课:self_table_connection把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)分析:首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr= e2.empno.empno编号和MGR都是编号.第十15课: SQL1999_table_connectionsselect ename, dname,grade from emp e,dept d, salgrade swhere e.deptno = d.deptno and e.sal between s.losal and s.hisal andjob <> 'CLERK'有没有办法把过滤条件和连接条件分开来? 出于这样考虑,Sql1999标准推出来了.有许多人用的还是旧的语法,所以得看懂这种语句.select ename,dname from emp,dept;(旧标准).select ename,dname from emp cross join dept;(1999标准)select ename,dname from emp,dept where emp.deptno=dept.deptno (旧)select ename,dname from emp join dept on(emp.deptno = dept.deptno); 1999标准.没有Where语句.select ename,dname from emp join dept using(deptno);等同上句,但不推荐使用.select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);join 连接语句, on过滤条件。

oracle笔记总结很全很仔细

oracle笔记总结很全很仔细

玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装连接命令(1)conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/s ysoper]例如:conn system /manager当用户特权用户连接时,必须带上(例如sys的登录)as sysdba 或是as sysoper显示当前用户show user;(2)disc[onnect]说明:该命令用来断开与当前数据库的连接(3)passw[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(3)spool说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去案例:sql>spool d:\b.sql 并输入sql>spool off显示和设置环境变量概述:可以用来控制输出的格式,set show如果希望永久的保存相关的设置,可以去修改glogin.sql脚本(1)linesize说明:设置显示行的宽度,默认是80个字符Sql>show linesizeSql>set linesize 90(2)pagesize说明:设置每页显示的行数目,默认是14,用法和linesize一样至于其它环境参数的使用也是大同小异创建用户概述:在oracle中要创建一个新的用户使用create user语句,一般具有dba (数据库管理员)的权限才能使用案例:create user xiaoming identified by m123;给修改用户密码概述:如果给自己修改密码可以直接使用Sql>password 用户名如果给别人修改密码则需要具有dba的权限,或者拥有alter user的系统权限Sql>alter user 用户名identified by 新密码删除用户概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。

Oracle学习笔记

Oracle学习笔记

Oracle学习笔记Oracle学习笔记Oracle学习笔记(1) Oracle数据库编程基础文章分类:数据库这段时间出差,一直在搞需求分析和设计,每天都是写文档画UML,都有好几个月没有写代码了,只怕都快忘记了!这是我用Oracle时学习的Oracle编程做的笔记,今天也发上来与大家分享一下,一共有八章。

现在在有时间就学一下EJB3,因为在项目中会用到,等学完了把EJB3的笔记也发上来和大家分享!通过SqlPlus登录Oracle ,sqlplus 用户名/密码@数据库名建表Sql代码1.create table demo(2. id number(8),3. name varchar2(20)4.)插入数据Sql代码1.insert into demo values(1,'zhangshang');2.insert into demo values(2,'lishi');提交Sql代码/doc/fe11207420.html,mit;查询数据字典(table_name='这里的值要大写')Sql代码1.select * from dba_tab_cols a where a.table_name='DEMO';创建视图create or replace:如果该视图存在就替换,如果不存在就创建1.create or replace view myView as select id 编号,name 姓名 from demo;2.select * from myView;创建同义词(同义词相当于表的别名或逻辑名,可以通过该名称来操作相对应的物理表)在分布式Oracle数据库中,标识一个对象需要四部分:主机名、实例名、模式名、对象名。

例如********************,其中模式名是SYSTEM,对象名是auths,PX.orcl是一个数据库链,它指向服务器PX上的实例orcl,我们可以为其指定一个同义词,使所有的用户都可以通过简单的同义词来访问表********************创建公有的同义词Sql代码1.create public synonym syn1 for demo;创建私有的同义词Sql代码1.create synonym syn2 for demo;创建并使用序列创建序列的完整语法:create sequence 序列名 increment by 增量种子数 start with 起始数字maxvalue 最大值;我们可以使用序列的两个属性nextval和currval,其中nextval 是返回下一个可用的序列值,而currval用于获得当前序列的值创建序列的简单方法Sql代码1.create sequence mySeq;使用创建的序列Sql代码1.insert into demo values(mySeq.nextval,'ddd');获得当前序列的值1.select mySeq.currval from dual;删除一条记录Sql代码1.delete from demo where id=2;查询所有记录Sql代码1.select * from demo;格式化日期时间Sql代码1.select to_char(sysdate,'yyyy-MM-dd hh24:mm:ss') 格式化日期 from dual;Oracle学习笔记(2) PLSQL编程基础文章分类:数据库这是第二章的学习笔记,学习完第一章的基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from Employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE'; Sql代码1.-- 声明部分,用于定义变量2.declareconstant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变Sql代码1.n_aaa constant number(4,2) :=5.5;boolean 类型的值只能用于sqlplus语句块中,不能用在表字段的数据类型中not null 用于强制初始化变量不能为空,此时必须为变量指定值default用于指定变量或常量的默认值1.v_valid boolean not null default false;2.v_name varchar2(20);为了确保变量使用合适的数据类型和长度,可以使用%type属性定义变量,它会按照数据库列或其它变量来确定新变量的类型和长度Sql代码1.v_job Employee.Job%type;将v_job2定义为与变量v_job的数据类型和长度完全一致Sql代码1.v_job2 v_job%type;复合变量:处理单行单列数据时,用标量变量;处理单行多列时,用PL/SQL 记录;处理单列多行时,用集合;处理多行多列数据时,可以结合使用PL/SQL记录和集合PL/SQL记录(RECORD):方法一:emp_recode_type 是PL/SQL记录类型并包含有三个成员(name,salary,job)Sql代码1.type emp_recode_type is record(2. name /doc/fe11207420.html,%type,3. salary employee.salary%type,4. job employee.job%type5.);emp_recode是记录变量Sql代码1.emp_recode emp_recode_type;方法二:使用表名的%rowtype 属性定义记录变量注意:用%rowtype 属性定义记录变量时,记录成员个数、名称、类型必须与表或视图的列的个数、名称和类型完全相同Sql代码1.emp_recode2 employee%rowtype;集合类型PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限)Sql代码1.--这里的table 实指集合2.type name_table_type is table of /doc/fe11207420.html,%type index by bi nary_integer;3. name_table name_table_type;嵌套表:嵌套表的下标不能为负值,其元素的个数没有限制并可以使用表列的数据类型在使用嵌套表时必须先用create type 语句建立嵌套表类型嵌套表只是比PL/SQL 表少了 index by binary_integerSql代码1.type num_table_type is table of number(4);2.num_table num_table_type;varray(变长数组):varray的元素个数是有限制的,在使用其之前必须先建立varray 类型在此创建的varray只能存放20个varchar2类型的数据注意:嵌套表列数据需要存储在专门的存储表中,而varray数据则与其它列数据一起存放在表字段中Sql代码1.type v_varray_type is varray(20) of varchar2(10);2.n_empno employee.empno%type;Sql代码1.-- 程序开始2.begin执行部分,执行PL/SQL/和SQL语句可以用into将从表人查询出来的值赋给指定的变量将值赋给变量有两种方法,一是用 := ,二是用 into& 符号用于提示用户输入一个值,& 为sqlplus的替代变量Sql代码1.n_empno := &输入你要查询的员工编号:;2.select Name,Job into v_name,v_job from Employee where empno=n_empno;这里的 || 号与Java中的 + 号类似,表示要将两边的字符串连接起来dbms_output是Oracle所提供的系统包,用于输出数据或消息,而put_line是该包所包含的过程,用于输出字符串信息并换行当在CMD中使用dbms_output包时,必须要先将sqlplus 的环境变量serveroutput 设置为 onSql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法)注意:用sele ct……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、类型必须与记录变量的成员个数、名称、类型完全相同Sql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);2.3.emp_/doc/fe11207420.html, := '钱森';4. dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_/doc/fe11207420.html,);5.6. select name,job into emp_/doc/fe11207420.html,,emp_recode2.jobfrom employee where empno=2;7. dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_/doc/fe11207420.html, || ' 的工作是:' || emp_recode2.job);8. -- 使用PL/SQL表(索引表)9. select name into name_table(-50) from employee where empno=1;10. dbms_output.put_line('雇员名:' || name_table(-50));11. -- 使用嵌套表12. -- 必须先设置嵌套表的下标,然后才能对该集合进行赋值13. num_table := num_table_type(1,2,3,4,5);14. num_table(1) := 10;15. num_table(5) := 100;16. dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));17.18.exception19. -- 异常处理部分20. when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');21. when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');22. when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);23.-- 程序结束24.end;25./Oracle学习笔记(3) PLSQL程序控制结构文章分类:数据库这是第三章的学习笔记,学习完第二章的编程基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!这周六总算是不用加班,可以好好出去玩一下了!今天去武大看樱花了,哈哈,不错!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE';Sql代码1.declare2. n_empno employee.empno%type;3. v_name /doc/fe11207420.html,%type;4. n_salary employee.salary%type;5. v_temp varchar2(30);6. n_temp number(5) := 1;7. -- 自定义异常8. e_exception exception;exception_init 是一个编译时指令,用于将一个内部错误与异常的名称关联。

Oracle_笔记

Oracle_笔记

Oracle 笔记目录绪论............................................................................................................................................................. 错误!未定义书签。

---------------------------day 01---------------------------------1.概念导论-- 1)什么是数据库-- 有组织和结构存储数据。

可以存储--字符、字节、图形、图像等类型数据-- DB(数据库):数据集合-- DBMS(数据库管理系统):对数据集合进行管理和操作的软件-- --Oracle-- --DB2-- --MySQL-- --SQLSERVER-- 2)为什么使用数据库-- 程序在运行时,对数据需要以下几点服务:-- --持久存储(文件或数据库)-- --高可靠性-- --存取方便-- --大数据量-- 3)如何使用数据库-- a.Oracle--Oracle甲骨文公司-->Oracle数据库--Larry Ellison Oracle之父CEO--1970,IBM一个研究员发布一篇数据关系模型文章。

--1977,Larry Ellison同另外两个人一起创办了公司***实验室(32岁)--1979公司改名,最终在1983年改成Oracle.--第一个员工是SCOTT/TIGER---- *b.操作语句SQL--Oracle数据库通过SQL命令操作数据。

--SQL有以下几种类型:-- --DML(Data Manipulation Language):数据操作语句。

例如存取数据。

-- --DDL(Data Definition Language):数据定义语句。

例如定义存储结构-- --DCL(Data Control Language):数据控制语句。

Oracel 内部笔记

Oracel 内部笔记

Oracel 内部笔记oracel内部笔记sql学习笔记sql、pl/sql自学笔记1.sql并行查询altersessionenableparalleldmlexecuteimmediate'altersessionenableparalleldml';--修改会话并行dmlselect/*+parallel(a,4)*/*fromtable_nameaselect/*+parallel(a,8)*/*fromtable_ nameaselect/*+parallel(a,4)parallel(b,4)parallel(c,4)*/a.*,b.*,c.*fromtable_name1a, table_name2b,table_namecinsert/*+parallel(t,4)*/intotable_nametinsert/*+parallel(t,8)*/intotable_namet/*+parallel(t,8)*/并行处理,通常为cpu的倍数例如:4,8等,在继续执行类型sql必须先运转:altersessionenableparalleldml2.删除表分区数据altertablemasamk.tb_mk_sc_user_montruncatepartitionmk_user_mon_'||trim(iv_mont h)删掉选定表中分区数据3.minus(差集)与intersect(交集)minus指令就是运用在两个sql语句上。

它先找到第一个sql语句所产生的结果,然后看看这些结果是不是在第二个sql语句的结果中,如果存有的话,那这一笔资料就被除去,而不能在最后的结果中发生;如果第二个sql语句所产生的结果并没存有于第一个sql 语句所产生的结果内,那这笔资料就被舍弃。

intersect指令是运用在两个sql语句上,如果两个sql语句的记录完全相同则显示相应记录,否则将不在结果中出现4.orderby中的nullslastorderbyarea_code,bill_monthnullslast--nullslast将排序字段为null记录放在最后面5.nvl的几个相同函数nvl(a,1)如果a为null返回1,否则返回anvl2(a,1,0)如果a为null返回0,否则返回1nullif(a,b)如果a=b返回null,否则返回a6.怎样保证最终用户在数据库中只有n个可以话(如果n为1则只有1个可以话)createprofileone_sessionlimitsessions_per_usern;--创建参数文件(n为任意整数)alteruserprofileone_session;--设置用户的参数文件altersystemsetresource_limit=true;--设置资源限定7.表的字段参考另外表的字段createtableresources(resource_namevarchar2(10)primarykey,,,,);createtablesched ules(resource_namereferencesresources,….);第1页共35页sql学习笔记8.存取变量的采用1)sql中的存取变量定义绑定变量:variableemplnovarchar2(10);给存取变量赋值:execute:emplno:=?1234567890‘;sql/plus中使用绑定变量:select*fromempwhereempno=:emplno;pl/sql中采用存取变量:executeimmediate?insertintotvalues(:x)‘usingx;游标中使用绑定变量:openc1for?select*fromempwhereempno=:empno‘usingempno;2)ddl语句中不容许采用存取变量,例如:executeimmediate?createtableaasselct*frombwherex=:x‘usingx;3)pl/sql中的批量存取变量(forall)a)foralliin1..x.countdml;--就可以存有一条语句(update,insert,delete)sql%bulk_rowcount(i):用于取得在执行批量绑定操作时的第i个元素作用的行数b)bulkcollect子句:用于取得批量数据,它只适用于selectinto、fetchinto和dml回到子句语法:…bulkcollectintocollection_name…i.select中使用bulkcollectdeclaretypeemp_table_typeistableemp%rowtypeindexbybinary_integer;emp_tableemp_table_type;beginselect*bulkcollectintoemp_tablefromempwheredeptno=& no;foriin1..emp_table.countloopdbms_output.put_line(emp_table(i).emp);endloop; foralliin1..emp.table.countupdatesalsetdeptno=emp_table(i).deptnowhereempno=emp_table(i).empno;dbms_output.put_line('第2个元素更新的行数为:'||sql%bulk_rowcount(2));end;ii.dml的返回子句中使用bulkcollectdeclaretypeename_table_typeistableofemp.ename%type;ename_tableename_table_type;begindeleteempwheredeptno=&noreturningenamebulkcollectintoename_table;foriin1..ename_table.countloopdbms_output.put_line(ename_table(i));endloop;end;第2页共35页sql自学笔记c)fetchc1bulkcollectintocollect1,collect2,…[limitrows]9.在sql中瞄准记录锁(lock)机制用于管理对共享资料的并发访问,并提供数据完整性和一致性锁的类型:dml锁、ddl锁、内部锁和闩1)dml锁a.事务门锁(tx门锁):事务发动第一个修正时会获得tx门锁,直至事务递交或初始化b.dmlenqueue门锁(tm门锁):用作保证在修正表的内容时,表的结构不能发生改变2)ddl门锁a.排他ddl锁(exclusiveddllock):这会防止其他会话得到它们自己的ddl锁或tm(dml)门锁(即为其他可以话就可以对该表中继续执行select)。

Oracle学习笔记

Oracle学习笔记

断壁残垣---Oracle学习笔记Emitter第一章关系数据库用户解锁:使用system用户登录Sql语句:SELECT username,account_status FROM dba_users;ALTER USER scott ACCOUNT_UNLOCK;//解锁ALTER UESR scott IDENTIFIED BY tiger;//设定密码CONNECT scott/tiger;SELECT * FROM emp;第二章体系结构概述体系结构Oracle数据库从存储结构上可以分为物理存储结构与逻辑存储结构,从实例结构上可以分为内存结构与进程结构。

Oracle的物理存储结构是由存储在磁盘中的操作系统文件所组成的,Oracle在运行时需要使用这些文件。

一般,Oracle数据库在物理上主要由3种类型的文件组成,分别是数据文件(*.dbf)、控制文件(*.ctl)和重做日志文件(*.log)。

数据文件数据文件(Data File)是指存储数据库数据的文件。

数据库中的所有数据最终都保存在数据文件中,例如,表中的记录和索引等。

如果数据文件中的某些数据被频繁访问,则这些数据会被存储在内存的缓冲区中。

读取数据时,Oracle系统会首先从内存的数据缓冲区中查找相关数据信息,如果找不到,则从数据库文件中把数据读取出来,存放到内存的数据缓冲区中,供查询使用;存储数据时,修改后的数据信息,也是先存放在内存的数据缓冲区中,在满足写入条件(例如执行提交操作)时,由Oracle的后台进程DBWn将数据写入数据文件。

SELECT file_name FROM dba_data_files;控制文件控制文件(Control File)是一个很小的二进制文件,用于描述和维护数据库的物理结构。

在Oracle数据库中,控制文件相当重要,它存放有数据库中数据文件和日志文件的信息。

Oracle数据库在启动时需要访问控制文件,在数据库的使用过程中,数据库需要不断更新控制文件,由此可见,一旦控制文件受损,那么数据库将无法正常工作。

Oracle基础知识学习笔记(自己整理的)

Oracle基础知识学习笔记(自己整理的)

基本概念:数据:描述事物的符号;数据库:数据存放的地方,数据库是由数据和数据库对象组成的;数据库管理系统(DBMS):用于管理数据的计算机软件,使用户能方便的定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和数据库恢复。

关系数据库(RDB):基于关系模型的数据库。

ORACLE数据库的体系结构是由一个实例和若干个数据库文件组成。

SQL语句分为:数据定义语句(DDL):create、drop、alter、truncate(不能回滚)数据操作语句(DML):insert、select、update、delete、merge数据控制语句(DCL):grant、revoke事物控制语句:commit、rollback、savepointORACLE数据库的核心组件:数据字典(DD)动态性能表(DPT)触发器PL/SQL包用户与角色:角色是一些权限的集合,分为dba、connect、resource、exp_full_database、imp_full_database。

用户分为sys、system。

用户权限包括两种:是指执行某一SQL语句或访问另一用户对象的权限。

它分为系统权限和对象权限。

(Dba_roles/dba_roles_privs/dba_sys_privs/dba_tab_pri vs/dba_col_privs/role_role_privs/role_sys_privs/role_ta b_privs)创建用户:Create user username identified by password;修改用户:Alter user username identified by newpassword; 创建角色:Create role rolename identified by password;修改角色:Alter role rolename identified by new password; ORACLE数据库的物理结构:1.数据文件:用于存放所有的数据库数据,若干个数据文件组成表空间;它包括系统数据(数据字典)、用户数据(表、索引、簇等)、undo数据等。

Oracle学习笔记

Oracle学习笔记

Oracle学习笔记⼀、创建表空间 表空间是ORACLE数据库的逻辑单元。

数据库--表空间 ⼀个表空间可以与多个数据⽂件(物理结构)关联⼀个数据库下可以建⽴多个表空间,⼀个表空间可以建⽴多个⽤户个⽤户下可以建⽴多个表。

create tablespace kevindatadatafile 'd:\kevindata.dbf'size 100mautoextend onnext 10m kevindata为表空间名称 datafile指定表空间对应的数据⽂件 size后定义的是表空间的初始⼤⼩ autoextend on⾃动增长,当表空间存储都占满时,⾃动增长 next后指定的是⼀次⾃动增长的⼤⼩。

⼆、⽤户2.1 创建⽤户create user kevinuseridentified by kevindefault tablespace kevindata identified by后边是⽤户的密码 default tablespace后边是表空间名称 oracle数据库与其它数据库产品的区别在于,表和其它的数据库对象都是存储在⽤户下的。

2.2 ⽤户赋权限新创建的⽤户没有任何权限,登陆后会提⽰Oracle中已存在三个重要的⾓⾊: connect⾓⾊, resource⾓⾊,dba⾓⾊。

CONNECT⾓⾊:-是授予最终⽤户的典型权利,最基本的 ALTER SESSION-修改会话 CREATE CLUSTER-建⽴聚簇 CREATE DATABASE LINK-建⽴数据库链接 CREATE SEQUENCE-建⽴序列 CREATE SESSION-建⽴会话 CREATE SYNONYM-建⽴同义词 CREATE VIEW-建⽴视图RESOURCE⾓⾊:--是授予开发⼈员的 CREATE CLUSTER-建⽴聚簇 CREATE PROCEDURE-建⽴过程 CREATE SEQUENCE-建⽴序列 CREATE TABLE-建表 CREATE TRIGGER-建⽴触发器 CREATE TYPE-建⽴类型DBA⾓⾊:拥有全部特权,是系统最⾼权限,只有DBA才可以创建数据库结构,并且系统权限也需要DBA授出,且DBA⽤户可以操作全体⽤户的任意基表,包括删除grant dba to kevinuser进⼊system⽤户下给⽤户赋予dba权限,否则⽆法正常登录三、创建表语法:CREATE TABLE tablename (column datatype [DEFAULT expr][...])数据的类型:创建表范例:创建person表create table person(pid number(10) ,name varchar2(10),gender number(1) default 1,birthday date);Insert into person(pid,name,gender,birthday)values(1,”Kevin”,1,to_date(‘2018-08-14’,’yyyy-MM-dd’));四、修改表在sq中使⽤ater可以修改表添加语法:ALTER TABLE 表名称 ADD(列名1 类型 [DEFAULT默认值],列名1类型[ DEFAULT默认值].)修改语法:ALTER TABLE表名称 MODIFY(列名1类型 [DEFAULT默认值],列名1类型DEFAULT默认值])修改列名:ALTER TABLE表名称 RENAME COLUMN列名1T0列名2范例:在 person表中增加列 addressalter table person add(address varchar2 (10))范例:把 person表的 addres列的长度修改成20长度alter table person modify(address varchar 2(20)五、删除表语法:DROP TABLE 表名六、约束在数据库开发中,约束是必不可少,使⽤约束可以更好的保证数据的完整性。

oracle经典笔记

oracle经典笔记
例如:imp userid=scott/triger@myorcl tables=(emp) file=d:\emp.dmp
imp userid=scott/triger@myorcl file=d:\emp.dmp //导入自己的方案
imp userid=scott/triger@myorcl tables=(emp,dept) file=d:\emp.dmp touser=scott
5.查询当前用户拥有哪些系统权限:select * from user_sys_privs;
6.设置控制台窗口的行宽: set linesize 400;
7. 权限的传递:A用户拥有的权限可以授予给B用户
系统权限:grant alert any table to 用户名 with admin option
alter tablespace 表空间名 read only、alter tablespace 表空间名 read write
4.查询指定表空间所有的表
select * from all_tables where tablespace_name='表空间名'
对象权限:grant select on 表名 to 用户名 with grant option
8.角色:权限的集合
创建角色:create role 角色名;
授予角色create session权限:grant create session to 角色名;
给用户授予角色: grant 角色名 to 用户名;
11.查询表结构用 desc[ribe] 表名;
12.decode 函数的使用 decode(字段,'值','真的时候','假的时候');

Oracle笔记

Oracle笔记

存储过程 (3)先说说 (3)学习 (3)第一个小程序 (3)程序如下: (3)在设置后将会显示结果 (3)变量声明 (3)常用变量类型 (4)变量声明 (4)使用%type (4)Table变量: (4)Record变量类型 (5)使用%rowtype声明record变量 (5)语句块的组成 (5)SQL语句的运用 (6)select (6)create table (6)判断、选择、循环 (6)判断 (6)循环 (7)简单循环 (7)while (8)for (8)Exception (9)too_many_rows (9)no_data_found (9)记录错误 (10)记录用表 (10)设置表为递增记录 (10)尝试删除 (10)游标cursor (11)游标的定义 (11)简单循环输出 (11)错误的输出做法 (12)while循环输出 (13)for循环输出(最佳方式) (13)带参数的游标 (13)可更新的游标(了解) (14)存储过程produce (14)创建存储过程 (14)执行存储过程 (14)方式一: (14)方式二: (14)带参数的存储过程 (15)调用上述过程 (15)编译错误 (15)删除存储过程 (16)函数 (16)创建函数 (16)函数调用 (16)触发器 (16)使用到的表emp2_log (16)创建触发器 (16)测试 (16)更新数据 (16)查看emp2_log表 (17)删除触发器 (17)触发器的副作用(很少用) (17)存储过程先说说1.Oracle中有PL-SQL(用来补充SQL语言)2.SQLserver中有T-SQL3.DML是第四代语言学习第一个小程序程序如下:在设置后将会显示结果变量声明常用变量类型变量声明使用%typev_empno2将随emp表中的empno的变化Table变量:Record变量类型使用%rowtype声明record变量适应表结构的变化语句块的组成“--”开头为PL-SQL的单行注释在PL-SQL语句中有且只有一条记录。

Oracle 笔记整理

Oracle 笔记整理

Oracle笔记整理简单目录:1.--------------->数据库2.--------------->表的创建3.--------------->表的修改和约束4.--------------->事务控制语言5.--------------->联合查询(UNION)6.--------------->日期函数7.--------------->where相关查询8.--------------->表分区9.--------------->同义词、序列、视图10.-------------->PL\SQL11.-------------->动态SQL12.-------------->游标13.-------------->存储过程、函数14.-------------->包1)数据库:DB:数据库DBMS:数据库管理系统DBS:数据库系统1:组成1)数据库:指的是oracle数据库文件a:数据文件b:日志文件c:控制文件2)数据库实例:看做是管理数据库文件的一组进程分类:SGA :系统全局区PGA:程序全局区2:应用连接oracle数据库服务器1)services.msc开启oracleserviceId(orcl),oracleTNSListener必须启动2)C:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\tnsnames.ora和listener.ora 将HOST = 本机(服务器)ip地址3)cmd->tnsping 服务器IP地址4)sqlplus/nolog 匿名登录oracle服务器5)conn /as sysdba 默认管理员登录----------------------------------------------------------------------------------------------------------------------2)常用命令及相关权限1:演示创建用户和赋权限的过程1)conn /as sysdba ——》默认管理员登录2)create user wk identified by a123 ——》创建用户wk密码:a1233)conn wk/a123 显示无法登录(没有登录和使用资源权限)4)切换到管理员1.grant connect to 用户名授权用户登录2.grant resource to 用户名授权用户操作表5) 切换到scott用户,grant delete,update,insert on emp to wk ——》示范用表6)revoke all on emp from wk(解除授予的权限)备注:alter user scott account unlock ——》解锁指令------------------------------------------------------------------------------------------------3)表的创建---->创建表create table student(sID int primary key ,---->建主键sName char(8))--或者create table student(sID int ,sName char(8),primary key (sID)---->建主键)--或者create table student(sID int ,sName char(8)constraint PK primary key (sID) ---->建主键);----------建立外键create table project(proID int primary key ,sID int references student ,score int);--或者create table project(proID int primary key ,sID int references student (sID),score int) ;-----或者create table project(proID int primary key ,sID int constraint FK references student (sID),score int)-----或者create table project(proID int primary key ,sID int ,score int ,constraint FKforeign key (sID)references student (sID))---------------------------------------4)创建表时添加约束--修改表字段--添加字段alter table student add ( address varchar2(50) ); ------>添加新的列--修改字段alter table student modify ( address varchar2(60) ); ------->修改列的类型--删除字段alter table student drop ( address ); ---------->删除表中的列--------------------------------------------------------------------------------------------------------------添加主键alter table project add primary key ( proid );--删除表Drop table student ;--截取表记录Truncate table student ;--创建表的副本create table emp_tempasselect * from scott.emp--distinct的使用select distinct ename as lename from emp_ted<=5 (去除重复行)select nvl(comm,0) from emp; ------>(填充空格)-----------------------------------------------------------------------------------------------5)事务控制语言(TCL)事务提交:insert into student values( 1 , 'hujun' , '男' , 32 , 'wuhan' , 'wgd' , 595 , 'zhongxiang');然后用另一个用户登录Select * from student;发现无法看见插入的记录Commit;提交后查看Select * from student;事务回滚:insert into student values( 1 , 'hujun' , '男' , 32 , 'wuhan' , 'wgd' , 595 , 'zhongxiang');Select * from student;可以查询到数据Rollback;Select * from student;发现数据不存在了事务保存点:insert into student values( 1 , 'hujun' , '男' , 32 , 'wuhan' , 'wgd' , 595 , 'zhongxiang');commit;update student set sname = 'abcde';savepoint p1 ;update student set sname = 'abcd';savepoint p2;update student set sname = 'abc';rollback to savepoint p2 ;最后的结果是address = ‘abcd’;--伪列的用法,实现自定义分页select * from (select rownum id,ename from emp) where id>0 and id<=5---------------------------------------------------------------------------------------------6)运算符运算符号select sal*comm as scomm from scott.empwhere empno=7521比较运算符--like查询-----------------》like模糊查询select * from scott.emp where ename like 'S%';select * from scott.emp where ename like 'S____';7)联合查询--UNION(联合)select * from emp where deptno = 20unionselect * from emp where sal < 1000;UNION ALLselect * from emp where deptno = 20union allselect * from emp where sal < 1000;INTERSECT(交集)select * from emp where deptno = 20intersectselect * from emp where sal < 1000;MINUS(割集)select * from emp where deptno = 20minusselect * from emp where sal < 1000;8)转换函数select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual;select to_char(sysdate,'YYYY-fmMM-fmDD HH24:MI:SS') from dual;select to_number('22') from dual9)日期函数select add_months(sysdate,2) from dual;--注意round和trunc的区别select round(current_date,'mm') from dualselect trunc(current_date,'mm') from dualselect extract(year from sysdate) from dual;10)单行函数四舍五入:select round( 12.3456 , 2 ) from dual;大写转换:select upper('abc') from dual;字符串剪切:select trim(' abc ') from dual;使用指定的字符剪切:select ltrim('abbcccccdef' , 'abc') from dual;翻译:select translate('123456abc','123456','dfg') from dual字符串填充:select lpad('12',6,'0') from dual;11)字符函数select substr('hello',0,2) from dual;select upper('hello') from dual;select chr('67') from dual;select ascii('A') from dual;select sysdate from dual;--数学select sin(90) from dual;12)转换函数select sysdate from dual;select to_char(sysdate,'yyyy')||'年'||to_char(sysdate,'mm')||'月' from dual;select to_number('10') from dual;13)聚合\分组函数select ename,sal from scott.empwhere sal in (select max(sal) from scott.empgroup by deptno)--连接语句select a.ename,b.dname from emp a,dept b where a.deptno(+)=b.deptno14)where查询Where 语句的运算符where <条件1>AND<条件2> --两个条件都满足示例:select * from emp where deptno=10 and sal>1000;where <条件1>OR<条件2> --两个条件中有一个满足即可示例:select * from emp where deptno=10 OR sal>2000;where NOT <条件> --不满足条件的示例:select * from emp where not deptno=10;where IN(条件列表) --所有满足在条件列表中的记录示例:select * from emp where empno in(7788,7369,7499);where BETWEEN .. AND.. --按范围查找示例:select * from emp where sal between 1000 and 3000;where 字段LIKE --主要用与字符类型的字段示例1:select * from emp where ename like '_C%'; --查询姓名中第二个字母是'C'的人'-' 表示任意字符;'%' 表示多字符的序列;where 字段IS [NOT] NULL --查找该字段是[不是]空的记录15)创建表空间\用户1>创建表空间create tablespace <表空间名称>datafile <表空间路径>size [表空间数据文件初始大小(K|M)][autoextend off\on]示例:Create tablespace HopeMSDatafuke ‘E:\oracle\HopeMS.dbf’Size 50MAutoextend on;2>创建分区【按编号数字来分区】create table jobs ——》创建表(job_id integer primary key,job_desc varchar2(100) not null,job_date date not null, -------->工作时间(时间类型)min_lvl number(8) not null,max_lvl number(8) not null)partition by range(job_id) ——》创建范围分区(partition jobs_p1 values less than(10),partition jobs_p2 values less than(20),partition jobs_p3 values less than(50));select * from jobs partition (jobs_p1);------→查询分区alter table jobs(表名) add partition p4 values less than(maxvalue);→添加新分区alter table jobs(表名)drop partition jobs_p2; ---→删除表分区---------------------------------------------------------------------------------------------【按时间范围分区】create table jobs ——》创建表(job_id integer primary key,job_desc varchar2(100) not null,job_date date not null, -------->工作时间(时间类型)min_lvl number(8) not null,max_lvl number(8) not null)partition by range(job_date) ---------→根据字段创建分区(partition jobs_d1 values less than (to_date('2007-12-31','yyyy-mm-dd'));partition jobs_d2 values less than (to_date('2008-12-31','yyyy-mm-dd'));partition jobs_d3 values less than (to_date('2009-12-31','yyyy-mm-dd'));)select * from jobs partition (jobs_d1);---------→查询分区alter table jobs(表名) add partition d4 values less than(maxvalue);→添加新分区alter table jobs(表名)drop partition jobs_d2; ---→删除表分区---------------------------------------------------------------------------------------------------【按列表值来分区】create table Department ----------》创建表(Dept_id varchar2(20) primary key,Dept_name varchar2(20))partition by list(Dept_name) ---------》根据姓名值来分区(partition p1 values('会计部'),partition p2 values('管理部'),partition p3 values('人力资源部'))insert into Department values('b001','会计部'); ——》插入测试数据select * from Department partition(p1); ——》查询分区alter table jobs(表名) add partition p4 values less than(maxvalue);→添加新分区alter table jobs(表名)drop partition p2;---→删除表分区------------------------------------------------------------------------------------------------【哈希散列分区】partition by hash(job_id) ------→分区字段(编号散列分区)(partition p1,partition p2,partition p3)partition by list(job_id)(partition p1 values(1),partition p2 values(3),partition p3 values(5))select * from (表名)partition(p1); ——》查询分区alter table (表名) add partition p4 values less than(maxvalue);→添加新分区alter table(表名)drop partition p2; ---→删除表分区------------------------------------------------------------------------------------------------------------17)同义词分类:a:私有同义词create synonym 同义词名称for 对象(表)----→创建同义词drop synonym 同义词名称---→删除同义词b:公有同义词create public synonym 同义词名称for 对象(表)备注:创建共有同义词需要管理员授权例如:grant create public synonym to scott --→授权grant drop public synonym to scott --→解权示例:Create synonym dept for soctt.dept; 私有的、创建者才能用) →私有同义词Drop synonym dept; ----→删除私有同义词Create public synonym dept for soctt.dept; ---》创建公有同义词Drop public synonym dept; -----》删除公有同义词--------------------------------------------------------------------------------------------------------- 18) 序列a:语法create sequence (序列名)start with 1 --起始值不能被更改increment by 1 --自增长值minvalue 1 --最小值maxvalue 999 --最大值cycle [nocycle] ----是否循环序列cache 5 ----设置缓存大小b:应用nextval --获取一个新的序列值currval --获取序列的当前值备注:必须先有nextval,才能有currval----------------------------------------------------------------------------------------------------------------------19)视图1.创建视图create [or replace] [force] view emp_vuasselect * from empwith check option ---->检查视图with read only ---->只读视图备注:or replace ---->替换掉原来的视图(不需删除)force ----->强行创建视图,不论视图的基表是否存在或拥有者是否有权限,但是: 执行select insert update delete前条件必须为真。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORACLE笔记整理
5.1 ORACLE体系结构
5.1.1 ORACLE服务器
5.1.2 ORACLE 例程
5.1.3 ORACLE 数据库
5.2 SQL语言
5.2.1 SQL语言分类
>数据检索语言:SELECT
>数据操纵语言(DML):INSERT UPDA TE DELETE MERGE
>数据定于语言(DDL):CREATE DROP ALTER RENAME TRUNCATE
>数据控制语言(DCL):GRANT REVOKE
>事物处理控制:COMMIT ROLLBACK SA VEPOINT
5.2.2 部分SQL语言
(1)Select * from table :查询表中所有数据
(2)Select col1,col2 from table :查询表中特定的列
(3)创建表
Create table tablename(col1 type,col2 type);
(4)往表里添加数据
Insert into tablename values(‘value’,’value’);
Commit;
(5)往表里添加列
Alter table tablename add(col3 type,col4 type);
从表里删除列
Alter table tablename drop(column);
修改列的数据类型
Alter table tablename modify(col type);
(6)更新表内容
Update tablename set col=newvalue where col=’xxx’;
Commit;
(7)删除表里的行
Delete tablename where clo=’xxx’;
Commit;
(8)创建索引
Create index indexname on tablename(col);
(9)查看表中的索引
Select index_name from user_index where table_name=’xxx’;
(10)删除表
Drop table tablename;
(11)创建用户
Create user username identified by password default tablespace tablespacename;
(12)创建表空间
Create tablespace tablespacename datafile ‘d:\ …\test.dbf’size 100m autoextend off;
(13) 添加数据文件到表空间
Alter tablespace tablespacename add datafile ‘d:\....\xxx.dbf’ size 200m autoextend off;
(14) 更改表空间中数据文件的大小
Alter database datafile ‘d:….\xxx.dbf’resize 120m;
(15)查看表空间中有哪些数据文件
Select tablespace_name,file_name from dba_data_files where tablespace_name=’TEST’;
(16)查看日志文件位置
Show parameter dump
(17)查看数据库状态
Select status from v$instance;
(18)更改数据库归档模式步骤
1)shutdown immediate
2)startup mount
3)alter database archivelog/noarchivelog;
4)alter database open;
5)alter system set log_archive_start=true/fale scope=spfile;
6)shutdown immediate;
7)startup
(19)改变显示的列长度
set linesize 200
(20)显示所有SQLPLUS的所有参数
Show all
(21)显示当前用户下所有的表
Select table_name from user_tables;
(22)把检索的数据导出到文件中
spool d:\...\xxx.txt
select * from tablename;
spool off
(23)设置表中列的显示宽度(字符)
Col colname format a8(显示8个字符的宽度)
(24)设置表中列的显示宽度(数字)
Col colname format 9999 :要显示几个就写几个9,也可以显示小数点,如
999.99
(25)查看用户中有哪些表空间
Select tablespace_name form dba_data_files;
(26)查看数据库参数文件位置
Show parameter pfile
(27)查看数据库控制文件位置
Show parameter control_file
Select name from v$controlfile;
(28)查看数据文件位置
Select name from v$datafile;
查看日志文件
Select member from v$logfile;
5.3 数据库备份
5.3.1 冷备
5.3.1.1 条件
(1)停止监听# lsnrctl stop
(2)停止数据库:SQL>shutdown immediate
5.3.1.2 数据库启动过程
(1)startup nomount
>读取参数文件(pfile)
>读取密码文件()
(2)alter database mount
>读取控制文件
(3)alter database open
>读取数据文件
5.3.1.3 冷备份时需要备份的文件
>参数文件
>密码文件
>控制文件
>数据文件
>日志文件
5.3.1.4 冷备份恢复步骤
(1)把参数文件放到数据库默认目录下
(2)把数据库启动到NOMOUNT状态
Startup nomount
(3)修改参数文件中控制文件的位置(修改的是参数文件)
Alter system set control_files=’d:\...\xx.ctl’,’d:\...\ccc.ctl’ scope=spfile;
(4)把数据库停止后启动到MOUNT状态
Shutdown immediate
Startup mount
(5)修改数据文件的位置(修改的是控制文件)
Alter database rename file ‘oldcontrlopath’ to ‘newcontrolpath’;
(6)修改日志文件的位置
Alter database rename file ‘’oldlogpath to ‘newlogpath’;
(7)启动数据库到OPEN状态
Alter database open。

相关文档
最新文档