精通 oracle 10g plsql 编程-学习笔记
- 格式:doc
- 大小:340.50 KB
- 文档页数:25
建议在PLSql Develeper 工具中查看,阅读/*Oracle学习笔记*/SQLPlus:所谓的SQLPlus,就是oracle数据库的一个客户端。
登录sqlplus的几种方式:1 命令行版的sqlplus:在dos窗口中直接输入sqlplus,则需要你输入用户名和密码,进入oracle的命令行了,即进入了oracle的客户端。
2 图形版的sqlplus:开始程序处执行。
3 浏览器模式isqlplus:http://127.0.0.1:5560/isqlplus/ --5560是oracle的端口号,通过这个方式可以访问其他ip主机的oracle4 oracle常用的客户端软件:Toad(英文意思蛤蟆)/*数据库管理的时候常用*/,PL/SQL Developer(常用)/*需要在本地的oracle客户端也装上oracle*/,相比之下,isqlplus较为好用,在客户端不需要装任何东西,只需要一个浏览器就可访问----------------------------------------dos命令:1 sqlplus sys/bjsxt AS SYSDBA; --as sysdba代表以数据库管理员的身份登录2 ALTER USER scott ACCOUNT UNLOCK; --将用户scott解锁------------------------------------------------------------------------------------------------------------------------------------------SQL语言SQL(Structured Query Language)SQL是关系数据库的标准语言,到现在为止,有两个标准:1992年定义的SQL/92和1999年定义的SQL99,SQL在大多数的数据库上通用,只是不同的数据库对于SQL语言都有那么一点小的改变。
Oracle 10G 数据库学习笔记备份exp运行-CMD EXP超级管理员:sys change_on_install普通管理员:system manager普通用户:scott tiger --------默认是锁定大数据用户:sh sh恢复IMP 运行--CMD--IMP导入文件:输入绝对物理路径如d:\.DMPOracle 10G 不同启动:服务之中,有以下两个服务是最为重要的:1、监听服务(远程的客户端要连接数据库则必须启动)Oracle ORADB10g_home1TNSListener2、数据库的实例服务:Oracle service ORACL保存数据库的具体信息的服务,每一个数据库有一个数据实例命名规则:oracle service XXX 其XXX是数据库名的(SID名称)监听问题:错误一:注册表出错:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDb10g_home1TN SListener 里面有一个ImagePath 数据不见错误二:网络环境出错(计算机名称变动)修改配置文件:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN文件1:tnsnames.ora HOST=PC计算机名NTDP =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = NTDP)(PORT = 1521))(CONNECT_DA TA =(SERVER = DEDICATED)(SERVICE_NAME = NTDP)))文件2:listener.ora HOST=PC计算机名LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))(ADDRESS = (PROTOCOL = TCP)(HOST = NTDP)(PORT = 1521))))打开ORARCLE 配置移植工具下-----NET MANAGER添加数据库:全局数据库名:NTDPORACLE主目录:SID:NTDP 监听状态检查命令:lsnrctl.exeEm启动问题:OracleDBCcnsolenNTDP 服务没有启动先删除:EM服务删除:emca -repos dropC:\Documents and Settings\Administrator>emca -repos dropEMCA 开始于2012-8-2 21:17:29EM Configuration Assistant 10.2.0.1.0 正式版版权所有(c) 2003, 2005, Oracle。
Oracle学习笔记1第一章PL/SQL简介1.1块结构(Block)DECLARE--declarative section/*声明部分,声明变量(variables)、类型(types)、游标(cursors)和局部子程序*/BEGIN--executable section/*执行部分,放置过程性语句(procedural statement)*或SQL语句(SQL statemnet)。
*这是主体,是必须的。
*/EXCTPTION--exception section/*错误处理部分*/END;//“;”很关键,不要忘记1.2变量和类型(variables and types)支持各种常用的数据库类型,还支持用户自定义类型,如表(table)、记录(record)。
还支持对象类型。
1.3注释(comment)Oracle的PL/SQL支持"--"和“/**/”的注释风格。
2第二章PL/SQL基础2.1PL/SQL块匿名块(anonymous)动态生成,只执行一次。
带名块(named)是带有标签的匿名块,动态生成,只执行一次。
子程序(subprogram)是存储在数据库内部的过程、函数和包。
可多次执行。
触发器(trigger)是存储在数据库内部的带名块,可多次执行。
由触发事件(triggering event)来触发。
2.2词法单位(lexical unit)包括标识符(identifier)、分界符(delimiter)、文字(literal)和注释(comment)2.2.1标识符(identifier)PL/SQL对大小写不敏感。
最长30位。
a)保留字(reserved word)或关键字(keyword),保留字单独使用时是保留的,但可以出现在其他标识符的内部。
如:下面的用法是合法的,尽管“Date”是保留字。
DECLAREv_BeginDate Date;b)引号标识符(quoted identifier)如果想要标识符大小写敏感,如在标识符中出现空格这样的字符或使用一个保留字,那么必须使用引号标识符。
目录目录 (1)1.Oracle安装及体系结构 (2)1.1 Oracle 安装 (2)1.2 内存结构(Oracle Memory Structures) (2)1.3 进程结构(Process Structures) (3)1.4 实例管理(Oracle Instance Management) (3)1.5 物理结构(Physical Database Structure) (4)1.6 逻辑结构 (4)2. SQL*PLUS基础 (5)2.1 数据库的启动(startup) (5)2.2 数据库的关闭(SHUTDOWN) (6)2.3 SQLPlus 常用命令 (7)3.SQL语言基础 (8)3.1语言分类 (8)3.2常用SQL命令 (8)3.3常用函数 (9)4.视图、同义词、序列 (10)4.1视图 (10)4.2同义词 (11)4.3序列 (11)5.安全管理 (12)1.Oracle安装及体系结构1.1 Oracle 安装Oracle10g 安装1.2 内存结构(Oracle Memory Structures)内存可以分为SGA(系统全局区)和PGA(程序全局区)组成系统全局区(SGA System Global Area)每个例程都只有一个SGA区,当多个用户同时链接到一个例程时,所有的用户进程、服务器进程都可以共同使用SGA区,数据库的各种操作主要都是在SGA区中进行,创建例程时ORACLE 为SGA区分配内存;终止例程时释放SGA区内存。
SGA区可以分为如下几个部分:1.数据高速缓存池(Database buffer cache):保存的是最近从数据文件中读取的数据块;或存储最近经常使用的数据,其中的数据可以被所有用户共享,其中包括3个缓存池,a)保持缓存池其中数据将长期保存在内存中直到关闭数据库为止;b)再生缓存池其中的数据一旦使用完毕就会被从内存中换出;c)默认缓存池如果没有为对象指定所使用的缓存池,就将其数据放在默认缓存池中。
pl/sql(1)上次课程内容回顾oracle 的内部结构创建表空间 create tablespace 表空间名字 datafile '数据文件的路径' size 数据文件的初始化的大小;创建用户create user 用户名 identified by 密码 default tablespace 表空间名字修改用户密码 alter user 用户名 identified by 密码授权 grant connect,reource,dba to 用户名回收权限 revoke 角色名 from 用户名创建目录 create directory 目录名 as 文件夹路径grant read,write on directory 目录名 to 用户expdp/impdp 用户名/密码 directory=目录名 dumpfile=导入或者导出文件的名称 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在数据库中写业务逻辑了。
备注:以下是个人学习笔记总结,其实是本人容易忘记,工作中碰到的一些知识点,记录下来整理成笔记了,序号之间并不是按照某种类型划分的,都是随意的标记一下,希望对大家有所帮助。
昵称:阿杜笑傲江湖(其实就是个名字而已,并不江湖…)name:杜立鸿(不要冒充,万一哪天中奖了呢?)sex:爷们---------------------------废话不多说,GO,GO,Go……1.允许修改分区建(有时候分区键更新不了,需要以下这样处理,当然了分区键本来是不允许更新的,都得根据实际情况)alter table t1 enable row movement;2. 获取某一时间最近的时间sqlselect *from t_datetime twhere t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss') =(select min(t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss'))from t_datetime t);3. 1.创建一个object类型的数据库类型对象。
表示学生实体类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
否则,函数外部代码是无法识别该类型的)。
CREATE OR REPLACE TYPE student_obj_type AS OBJECT(stu_no NUMBER, --学号stu_name VARCHAR2(255), --姓名stu_sex VARCHAR2(2),--性别score NUMBER--成绩);4.创建一个嵌套表类型的数据库类型对象。
表示学生实体集合类型。
该类型也将用作函数中定义的返回类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。
●数据操纵语言(DML):用于改变数据库数据。
包括insert,update和delete三条语句。
●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。
●数据控制语言(DDL):用于执行权限授予和收回操作。
包括grant 和revoke两条命令。
1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。
2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。
●当执行select 语句时,如果选择列表同时包含列、表达式和分组函数,那么这些列和表达式必须出现在group by 子句中。
●当使用分组函数时,在分组函数中可以指定all 和distinct 选项。
其中all默认选项,该选项表示统计所有行数据(包括重复行);如果指定distinct,则只会统计不同行值。
4.4.2.GROUP BY 和HA VING4.4.3.ROLLUP 和CUBEROLLUP和CUBE用来产出横向、纵向的统计结果。
示例一:使用ROLLUP操作符:生成横向小计SELECT deptno,job,avg(sal) FROM emp GROUP BY ROLLUP(deptno,job);示例二:使用CUBE操作符:生成数据统计、横向小计、纵向小计结果。
SELECT deptno,job,avg(sal) FROM emp GROUP BY CUBE(deptno,job);示例三:使用GROUPING函数GROUPING函数用于统计结果是否用到了特定列。
Select deptno,job,avg(sal),grouping(deptno),grouping(job)FROM emp GROUP BY cube(detpno,job);4.4.4.GROUPING SETS示例一:显示部门平均工资:SELECT deptno,avg(sal) FROM emp GROUP BY deptno;示例二:显示岗位平均工资SELECT job,avg(sal) FROM emp GROUP BY job;示例三:同时显示部门平均工资和岗位平均工资:SELECT deptno,job,avg(sal) FROM emp GROUP BY GROUPING SETS(deptno,job);4.5.连接查询4.6.子查询4.6.1.单行子查询4.6.2.多行子查询4.6.3.多列子查询SELECT ename,job,sal,deptno FROM emp WHERE (deptno,job)=SELECT deptno,job FROM emp WHERE ename=’SMITH’);4.7.合并查询操作符包括:union,union all,intersect 和minusINTERSECT 操作符用于获取两个结果集的交集。
MINUS操作符用于获取两个结果集的差集。
4.8.其他复杂查询4.8.1.层次查询4.8.2.使用CASE 表达式4.8.3.倒叙查询查看当前数据:SELECT ename,sal FROM emp WHERE ename=’CLARK’;查看历史数据:SELECT ename,sal FROM emp AS OF TIMESTAMP ot_timestamp( ‘2003-05-18 19:59:00’,’YYYY-MM-DD HH24:MI:SS’)WHERE ename=’CLARK’;使用DBMS_FLASHBACK 包获取特定SCN的数据Exec dbms_flashback.enable_at_system_change_num(717402);Select sal from emp where ename=’SCOTT’;Exec dbms_flashback..distableSelect sal from emp where ename=’SCOTT’;4.8.4.使用WITH子句重用子查询通过with 子句可以给子查询指定一个名称,并且使得在一条语句中可以完成所有任务,从而避免了使用临时表。
示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(两次使用相同子查询)SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dnameHAVING sum(sal)>(SELECT sum(sal)*1/3FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno);示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(使用with子句重用子查询)WITH summary AS (SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dname)SELECT dname,dept_total FROM summary WHERE dept_total>(SELECT sum(dept_total)*1/3FROM summary )5.SQL函数学习目标:●在SQL语句和PL/SQL 块中使用数字函数;●在SQL语句和PL/SQL 语句中使用字符函数;●在SQL语句和PL/SQL 语句中使用日期函数;●在SQL语句和PL/SQL 语句中使用转换函数;●在SQL语句和PL/SQL 语句中使用Oracle 10g 新增加的集合函数;●在SQL语句中使用分组函数;●了解并掌握Oracle 10g、Oracle 9i 新增加的SQL函数。
5.1.数字函数5.2.字符函数5.3.日期时间函数5.4.转换函数5.5.集合函数5.6.其他单行函数5.7.分组函数5.8.对象函数6.访问Oracle学习目标:●在PL/SQL块中检索单行数据;●在PL/SQL 块中嵌入DML语句;●使用SQL游标属性;●在PL/SQL块中嵌入事务控制语句。