

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简介:Oracle是一个对象关系数据库管理系统(ORDBMS)。它既提供关系数据库系统的功能,又提供面向对象数据库系统的功能。每个Oracle数据库对应唯一的一个实例名SID,Oracle数据库服务器启动后,一般至少有以下几个用户:Internal,它不是一个真实的用户名, 而是具有SYSDBA优先级的Sys用户的别名, 它由DBA用户使用来完成数据库的管理任务,包括启动和关闭数据库;Sys,它是一个DBA用户名,具有最大的数据库操作权限;System, 它也是一个DBA用户名,权限仅次于Sys用户Oracle服务器是一个数据库管理系统,它提供开放、全面和综合的信息管理。Oracle服务器由O
2、racle数据库和Oracle实例组成。后台进程和内存结构的集合称为Oracle实例。每一个运行的Oracle数据库都与一个Oracle实例相联系。一安装及体系结构概述注意:环境变量的设置问题。接触oracle几个月中,经常重复出现一些问题,其原因就是我没有设置环境变量等相关的东西相关的设置:? ?安装数据库服务器时配置的名称:全局数据库名:SID:安装客服端过程中,会出现Oracle Net Con figuration Assista nt(Oracle网络配置助手)的【欢迎使用】界面:【监听程序配置】:【本地Net服务名配置】中:服务名:输入全局数据库名。网络服务名(Net服务名):自己
3、随便填!客户机怎么连接数据库?【IP地址】:192.168.100.89【IP地址儿192.168 100.89【端口号:1521【全局数据库名】:myoracle.miiet图2.40管理客八机的I.作原理【网络服务名】:myoraclelink【端口号:1.2体系结构数据库的逻辑结构Oracle9i数据库的逻辑结构主要指从数据库使用者的角度来考察的数据库的组成,如下图。 自上先下,数据库的逻辑结构共有6层。数据块(Data Block)。 数据区间(Data Extent)。 数据段(Data Segment)。逻辑对象(Logic Object)。表空间(Tablespace)注:Ora
4、cle 9i安装完毕后自动建立9个默认的表空间,如下表:名称主要作用CWMLITE用于联机分析处理(OLAP)DRSYS用于存放于工作空间设置有关的信息。EXAMPLE实例表空间,存放实例信息。INDEX索引表空间,存放数据库索引信息。SYSTEM系统表空间,存放表空间名称、所含数据文件等管理信息。TOOLS工具表空间,存放数据库工具软件所需要的数据库对象。UNDOTBS回滚表空间,存放数据库恢复信息。USERS用户表空间,存放用户私有信息。数据库(Database)2.4.4数据库的存储结构数据库的存储结构数据摩的存储结构指逻辑结构在物理上是如何实现的、氏有 M 层.如图 2一轲所示.RI2
5、.49数据阵的存储综构1. 物理块2. 物理丈件每个物理文件由若个物理块组成,主姿包括数据文件、控制乂件和日忐文件 3类.口 數据文件;用于存放所有的数据,W DBF J扩展名。日志文件记录了对数据库进行的所有操作,以LOGLOG为扩展名。控制文件;记录了数据库所有文件的控制信息.以 CTL为扩展名。以笔者的安装环境为例.【全局数为“niyor3ck.iiiyner 的数拯阳的主翌物理文 些存浪在 u。卬匚 1 弋卜,如图 Z50 听示1.3登陆【管理服务器】从【Oracle企业管理控制台】界面进入,如下所示:(只能是sysman账号,其它的好像不行图3才Oracle企业昔理撐制台】界面1.4
6、数据库的启动和关闭-SQL*PLUS 基础、实例的启动与关闭2.1登陆问题环境: 数据库实例:testdbo密码:testSql*plus连接在命令行下,sys用户登陆:sqlplus sys/test as sysdba实例没有打开,使用【sqlplus sys/test as sysdba】执行将错误ORA-12560:TNS:协议适配器错 误!所以使用【setoracle_sid=testdb】先打开实例。如果目前实例没有打开,我们可以使用nolog的形式登陆:sqlplus/nolog注意:无论如何都要先【set oracle_sid=testdb】,先选择数据库实例! 操作如下:c:
7、C:oracle_sid=testdbC:sqlplus /test a$ wysdbaSQL*Plus: Re lease 9v2.8_1.9 - Fpoduction on星期二 月16 09:23:42 2089Copyright Cc 1982, 2002, Oracle Covpoiation- A11 rights eserued.连接到1.Oracle?i Enterprise Edition Re lease 9.2 0,1.0 - Production With the Partitioning, OLAP and Oracle Data Mininoptions JServ
8、er Re Lease 9 _2,0丄_0 - Product ionSQL quit从Oracle? i Enterprise Edit Ion Re lease0.1.6 - Product ionWith the Part it ioningj. OLAP and Orac le Data Min ing opt ions JSeruet* Re lease 9 _2,0.1,3 - Produuricin中断幵C:sqlplus/nologSQL*Plus: Re lease 9 .2 0_1. B - Product ion on星期二 石月16 09:29;35 2009Copvi
9、islit Cc 1982 2002 Oraclc Corporation. All rights reserved.SQL connect sys/test a$ sysdb*已连接。SQL quit从Oracle?! Enterprise Edit ion Re lease 9*2.0.1.6 - Product ion Uitfi七he Partit oning OLAP and Orac le DataMin ing opt ions JServer Re lease 9.2.0 1-P - ProduG七ion中断幵2.1.1 ORA-12560: TNS:protocol adap
10、ter error正确的连接方式更改登录为sys:SQL conn sys/sys服务名as sysdba;演示:C:Docume nts and Setti ngsguocwsqlplus /no logSQL*Plus: Release 920.1.0 - Production on星期四6月18 09:12:17 2009Copyright (c) 1982, 2002, Oracle Corporatio n.All rights reserved.SQL connect sys/testtestdb as sysdba;已连接。SQL exit从Oracle9i Enterprise
11、 Edition Release 9.2.0.1.0 - ProductionWith the Partiti oning, OLAP and Oracle Data Mining opti onsJServer Release 9.2.0.1.0 - Production中断开C:Docume nts and Setti ngsguocwsqlplus/no logSQL*Plus: Release 9.2.0.1.0 - Production on星期四6月18 09:17:42 2009Copyright (c) 1982, 2002, Oracle Corporatio n. All
12、rights reserved.SQL conn scott/tigertestdb已连接。SQL启动实例的命令:Startup:正常的命令,分为三个环节,首先启动实例;在打开控制文件,即database mou nt;最后打开数据文件,就是database openStartup mou nt:启动数据库实例的时候,同时启动控制文件,但是不启动数据文件!我们进行热备份的时候,是不允许进行归档/非归档方式!Startup nomou nt:启动数据库实例的时候,不启动控制文件,不启动数据文件!关闭实例:Shutdown:正常关闭,要等待所有客户断开连接后,才能真正关闭。Shutdown imm
13、editale:迫使所有的用户执行完当前的sql后。Shutdow n mount:Shutdow n about:强行关闭。(有丢失数据的危险,当如火灾发生、地震的时候才使用)Sqlplus的所有的命令:SQL help in dexEn ter Help topic for help.COPYPAUSESHUTDOWNDEFINEPRINTSPOOL/(执行缓冲区)DELPROMPTSQLPLUSACCEPTDESCRIBE(desc)QUITSTARTAPPENDDISCONNECTRECOVERSTARTUPARCHIVE LOGEDITREMARKSTOREATTRIBUTEEXEC
14、UTEREPFOOTERTIMINGBREAKEXITREPHEADERTTITLEBTITLEGETRESERVED WORDS (SQL)UNDEFINECHANGE(c)HELPRESERVED WORDS (PL/SQL)VARIABLECLEARHOSTRUNWHENEVER OSERRORCOLUMN(col)INPUTSAVEWHENEVERSQLERRORCOMPUTELISTSETCONNECTPASSWORDSHOWKQL save c,Eql;己创建文件c:/test.sql B4L (?c :/test .sqlDEPTNO DHAMELOC10 ACCOUNT IMG
15、NEU VORKSQL get c:/test.gg 1* select *fron dept 2 /where deptno =10DEPTNO DNAMELOC10ACCOUNTINGNEWVORKPQL _EDIT(默认记事本打开缓冲区,可以对缓冲区的sql编辑,然后保存关闭即可!)SQL list1* select * from dept where dept no=20SQL edit已写入文件afiedt.buf1* select * from deptSQL col dept no headi ng 编号SQL /编号DNAME10 ACCOUNTING20 RESEARCH30
16、 SALES40 OPERATIONSLOCNEDESCRIBE报表:?几个相关命令Oracle数据库的几种启动和关闭方式 有以下几种启动方式:1、startup nomount非安装启动,这种方式启动下可执行:重建控制文件、重建数据库读取init.ora文件,启动instanee,即启动SGA和后台进程,这种启动只需要init.ora文件。2、startup mount dbname安装启动,这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机,重新定位数据文件、重做日志文件。执行“nomount,”然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文
17、件和日志文件进行校验检查。3、startup open dbname先执行“nomount,”然后执行“mount”再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据库中的数据。4、startup,等于以下三个命令startup nomountalter database mountalter database ope n5、startup restrict约束方式启动这种方式能够启动数据库,但只允许具有一定特权的用户访问非特权用户访问时,会出现以下提示:ERROR:ORA-01035: ORACLE只允许具有RESTRICTED SESSION权限的用户使用6、sta
18、rtup force强制启动方式当不能关闭数据库时,可以用startup force来完成数据库的关闭先关闭数据库,再执行正常启动数据库命令7、startup pfile=参数文件名带初始化参数文件的启动方式先读取参数文件,再按参数文件中的设置启动数据库例:startup pfile=E:Oracleadminoradbpfileinit.ora8、startup EXCLUSIVE有三种启动方式:1、shutdown normal正常方式关闭数据库。2、shutdown immediate立即方式关闭数据库。在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,而是
19、在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。3、shutdown abort直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。二 SQL3.1三类语言:数据定义DDL:create、alter、drop。 数据控制语言DCL:grant、revoke。数据操作语言DML:select、insert、delete、update。 演示:SQL create table abc
20、(a varchar2(10),b char(10);表已创建。SQL alter table abc add c nu mber;表已更改。SQL alter table abc drop c;alter table abc drop c*ERROR位于第1行:ORA-00905:缺少关键字SQL alter table abc drop colu mn c;表已更改。3.2 oracle常用系统函数3.2.1字符3.2 常用系统函数3.2.1 字符 length,ltrim,replace,rtrim,substr,trim演示:selectlength ( abcdef ) from d
21、ual;查询字符数如本语句结果是6selectlength ( abc好def ) from dual;7selectlengthb(abc好def ) from dual;查询字节数,为8;select ltrim ( abc好def ) from dual;去除左边空格select rtrim (abc好ef ) from dual;去除左边右边空格select trim ( abc ) from dual;去除两边的空格selectlength ( trim ( abc ) from dual; 3selectsubstr(abcdefg,2,3)from dual;从第二个开始取串取三
22、个即得bcdselectsubstr(abcdefg,1,3)from dual;取开始3个selectsubstr(abcdefg,length( abcdefg)- 3 + 1,3)from dual;取末尾3个altersessi onset NLS_ DATE_FORMAT= dd-mm-yyyy hh24:mi:ss;设定时间格式selectsysdatefrom dual;结果:2009-6-17 11:32:313.2.2 日期 sysdate, curtent_date,next_dayselectsysdatefrom dual; 2009-6-17 11:40:49sele
23、ctcurrent_datefrom dual;2009-6-17 11:41:02alteressionset nls_date_format=dd-mon-yyyy hh:mi:ss;当前时间2009-6-17 11:41:02星期三selectn ext_day(sysdate,星期四)fromdual;下个星期四2009-6-1811:43:24selectn ext_day(sysdate,星期三)fromdual;下个星期三:2009-6-2411:43:493 2 3 转换 to_char,to_date ,to_numberselect to_char(sysdate,yyyy
24、-mm-dd hh24:mi:ss) from dual;转换成字符2009-06-17 11:48:14selectlen gth(to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;19select to_date( 2009-06-17 11:48:14, yyyy-mm-dd hh24:mi:ss) fromdual;将字符串转换成日期2009-6-17 11:48:14select to_number( 123 ) from dual;将字符串转换成数字(多大溢出?)3.2.4 聚集函数 sum,avg,max,min,countsele
25、ct max(price) from book;求最大值select min( price) from book;求最小值select avg(price) from book;求平均值select coun t(price) from book;select coun t(*) from book;查询有几条记录求数据总个数select sum(price) from book;求总数select * from book where price 20;3 2 5 其他 user,decode,nvlselectuser from abc;查看用户selectsum(decode(sex,男:
26、 ,1,0)男人数,sum(decode(sex,女,1,0)女人数from e; sum(decode(sex,男,1,0)sex字段是男加1,否则加0。selecta1,nvl(a2,未输入)a2from aa;在null的地方写上未输入select* from aa wherea2isnull ;为空select* from aa wherea2isnot null ;不为空select* from aa orderbyalasc ;升序select* from aa orderby aldesc ;降序selectdisti neta1 fromaa;没个al只显示一个,不重复。sel
27、ectall al frm aa;3.3 分组语句用户汇总一些数据的时候:求合计select sum(price*qty)from books; qty数量歹U按出版社(pub)分组查询的时候:by pub,book_name;可以增加where条件:books whereprice30groupby pub;select pub,sum (price*qty)from如果这样写:selectpub,sum (price*qty)frombookswheresum(price*qty)30groupby pub就要报错了!语法上必须要求这样做。group by可以多个,但是必须与前面的sele
28、ct或sum(price*qty)from books group by pub;select pub, sum (price*qty)from booksgroup by pub;注意select显示的列一定要在groupby中,否则错误!select pub,book_ name,sum (price*qty)正确的语句应该是:select pub,book_ name,from bookssum(price*qty)group by pub;from books groupselect中得到允许。示例:select pub, count (pub) from book group by
29、pub havingcount (pub)1; selectftype from tcmo group by ftype having count (moid)10;3.4 表的连接内连接:又叫等值夺标查询?将按照等值的条件查询多个数据表中关联的数据。要求关联的多个数据表的某些字段具有相同的属性,即有相同的数据类型、宽度和取值范围。正规的写法select * from tcmo a join tcmotype b on a.ftype=b.fmotype select * from tcmo a , tcmotype bwhere a.ftype=b.fmotype;外连接有两种:左(外)连接
30、和右(外)连接左连接:正规的写法selectselect * from* from tcmo a left join tcmo a ,tcmotype btcmotypewhere a.ftypb on a.ftype=b.fmotype;=b.fmotype(+);右连接:正规的写法select* fromtcmoarightjoi ntcmotypeb ona.ftype=b.fmotype;select * fromtcmo a , tcmotype bwherea.ftype(+)=b.fmotype;还可以在查询中添加其他条件:两种写法有一些差别select * from tcmo
31、a right join tcmotype b on a.ftype=b.fmotypewherea.ftype= LINUX;select * from tcmo a , tcmotype bwhere a.ftype(+)=b.fmotypeanda.ftype= LINUX;3.5 子查询 IN、EXISTS相关子查询无关子查询为什么呢?因为聚集函数不能作为条件出现在where子句后面!要实现类似的功能,我们使用having子句去改造,group by要出现在having子句前面。select pub,sum(price*qty)from books group by pub havi
32、ngsum(price*qty)30;除此以外,我们很少使用hav ing子句。有的时候,子查询与连接查询都能得到相同的结果:谁的效率更高呢?3.6 where 与 havingwhere检查每条记录是否符合条件,having是检查分组后的各族是否满足条件。Having语句只能配合group by语句使用,没有group by时不能使用having,单可以使用where。3.7 嵌套更新语法:update数据表set字段名1=(select字段列from数据表where条件),字段名2=(select字段列from数 据表where条件),.Where更新条件;四 PL/SQLPL/SQL是O
33、racle对sql的一种扩展语言!命令行下要显示输出行:set serveroutput on size 10000 (最大可设置一万)!4.1 第一个例子declarei number := 1;x varchar2 (20):=初值;begindbms_output.put_line(打印一行.初值i= |i);dbms_output.put_li ne(x);i:=10;x:= this is .;-字符串连接II。行注释-快注释/*注释内容*/dbms_output.put_line(打印一行.i=|i);dbms_output.put_li ne(x);end ;4.2 分支语句4.
34、2.1 if 分支declarei number ;str varchar2 (20); begi ni:=2;if i=1 thenstr:=sn o001elsifi= 2 thenstr:=sn o002elsestr:=else ;endif ;dbms_output.put_li ne(str); end ;4 2 3 case 分子declarei number ;str varchar2 (20); begi ni:=2;casewhe ni= 1 thenstr:=sn o001whe ni= 2 thenstr:=sn o002elsestr:=elseendcase ;db
35、ms_output.put_li ne(str); end ;4.3 循环语句4.3.1 基本循环(loop)示例1:declarei number := 0;beginloopi:=i+1;if (i= 100) thendbms_output.put_line(loop 内 i= |i);end loop ;dbms_output.put_line(loop夕卜 i= |i);end ;示例2declarei number := 0;beginloopi:=i+1;exit when i= 3 ;dbms_output.put_line(loop 内 i= |i);end loop ;db
36、ms_output.put_line(loop夕卜 i= |i);end ;4.3.2 while 循环declarei number := 0;beginwhile i= 3 loopi:=i+1;dbms_output.put_line(loop 内 i= |i);end loop ;dbms_output.put_line(loop夕卜 i= |i);end ;4.3.3 for 循环在oracle的for循环中无论“从小到大循环”还是“从大到小的循环”,我们对应的地增量不由我们控制,oracle的for循环的递增量只能是1。但是我们可以使用goto进行跳转,需要一个 标记。Oracle
37、支持goto。实例3将给我们演示。 示例1:从小到大beginforin 1. 5 loopdbms_output.put_line(i=|i);end loop ;dbms_output.put_line(end of for loop.);end ;实例2:从大到小,我们在in后面加上一个reverseobeginforin reverse 1.5 loopdbms_output.put_line(i=|i);end loop ;dbms_output.put_line(end ;end of for loop.);实例3:用goto语句实现循环declarei number := 0;b
38、egin-_i:=i+1;dbms_output.put_line(i=l|i);if (i= 3) thengoto repeat_loop; end if ;end ;4.3 异常处理在PL/SQL中的一个告警或错误的情形都被称为异常。包括:编译时刻错误或运行时刻错误。所以异常分类为:系统异常;自定义异常。常见系统异常:预定义异常描述DUP VAL ONN DEX向有唯一约束的表中插入重复仃NO DATA FOUND在一个select into语句中无返回值TOO MANY ROWSSelect into语句返回了多行VALUE ERROR一个算法、转换、截断或大小约束发生错误ZERO D
39、IVIDE发生被零除4.3.1 一个系统异常的写法declaretest varchar2 ( 20);beginselect dname into test from dept where deptno= 90;dbms_output.put_line(test);exceptionwhen no_data_found thendbms_output.put_line(没有找到数据);end ;432自定义异常4.4 复合变量:记录复合变量(记录)是由几个相关值构成的复合变量,常用语支持select语句的返回值。使用记录可以将一行数据看成一个单元进行处理,而不必将每一列单独处理。记录的声明格
40、式:TYPE type_ name IS RECORD(Variable, name datatype,Variable, name datatype,);示例1:declare-定义复合变量(记录)TYPE myrecord IS RECORDid number ,-最后一个变量没有逗号name varchar2 ( 20 );-声明一个新类型的变量oo myrecord;into o from dept where deptno= 10;部门号:|o.id|,部门名:|o. name);then没有找到数据);end ;实例2:记录中的简单变量与表的字段的定义的类型和长度一致declare
41、-定义复合变量(记录)TYPE myrecord IS RECORDid number ,-最后一个变量没有逗号-指定 name 是和 dept.dname一样长度的声明的变量name dept.dname% typebegin-注意select intoselect deptno,dnamedbms_output.put_line(exceptionwhen no_data_founddbms_output.put_line(dbms_output.put_line( end ;);_声明一个新类型o myrecord;begin_ 注意 select intoselect deptno,d
42、nameinto o from dept where deptno= 10;dbms_output.put_line(部门号:|o.id|,部门名:|o. name);exceptionwhen no data foundthendbms_output.put_line(没有找到数据);end ;实例3:记录与表的所有字段对应declaremyrec dept% ROWTYPEbegin-注意select into:select * into myrec from dept where deptno= 10;dbms_output.put_line(部门号:|myrec.deptno|部门名:
43、|myrec.dname);exceptionwhen no data foundthenend ;五 PL/SQL 高级应用5.1 游标游标是oracle中一种PL/SQL控制结构;可以对SQL语句的处理进行显式控制,便于 对表的行数据逐条进行处理。 游标不是一个数据库对象, 而是以声明的方式在内存中开辟的 一个区域。游标可被看着两个环节的内容,由两个方面组成的:一个是游标的结果集(如sql的select语句查询得到的表的结果集)。第二个就是这个结果中对应的数据的位置。游标分类:显式游标;隐式游标。 游标的属性:6MI%FOUND%ISOPEN%NOTFOUND%ROWCOUNT重点经验:当
44、表中的数据量很大的时候,我们不建议使用游标。为什么呢?因为它的 执行效率不是很高,很耗资源。但是在有的情况下,比如逐行取数据又是很灵活的。5.1.1 显式游标示例1:-显示游标declarecursor mycursor is select* from dept;-游标的数据取来放入一个记录的变量中。myrecord dept%rowtype ;begin-将显示游标结果集打开open mycursor;-然后,把打开的游标的结果集的一条(这里是第一条)放入我们申明的变量myrecordfetch mycursor into myrecord;while mycursor% found loo
45、pdbms_output.put_line(myrecord.dname|, |myrecord.deptno);-继续取,指导取完fetch mycursor into myrecord;end loop ;-取到最近偶的时间我们要把游标关闭。close mycursor;实例2:游标参数实现对数据的控制。给游标定义一个参数(在plsql中作为参数是不需要长度的,只给出类型就可以)end if ;declarecursor cur_param(id number ) isselect dname from dept d where d.deptno=id; t_name dept.dname
46、% type ;begin-打开游标并赋一个值open cur_param(1);loopfetchcur_paramintot_name;exitwhen cur_param% notfounddbms_output.put_line(t_name);end loop ;close cur_param;end ;For循环的另外一种格式:不需要打开和关闭游标的句子。declarecursor cur_param(id number ) isselect dname from dept d where d.deptno=id;beginfor cur in cur_param( 1) loop
47、dbms_output.put_line(cur.dname|.名称);end loop ;end ;5.1.2 %isopen 属性declared_name dept.dname% type ;cursor cur(id number ) isselect dname from dept where dept.deptno=id; beginif cur% isopen thendbms_output.put_line(游标已经打开);elseopen cur( 1);end ;fetch cur into d_name;close cur;dbms_output.put_line(d_n
48、ame);end ;5.1.3 %rowcount 属性返回至今为止,已经从游标中取回的数目。declaret_name varchar2 ( 10); cursor mycur isselect dname from dept; begin open mycur;loop-下面的 fecth mycur into t_name 语句被注释掉,将是什么样的结果?没有做 fetch 的时候 mycur%notfound is null 将执行fetch mycur into t_name;exit when mycur% notfound or mycur% notfound is null ;
49、dbms_output.put_line(游标 mycur 的 rowcount 是:|mycur% rowcount );end loop ;close mycur;end ;5.1.4 使用游标修改数据declaret_name varchar2 ( 10);cursor mycur isselect dname from dept for update ;beginopen mycur;loopfetch mycur into t_name;exit when mycur% notfound or mycur% notfound is null ;- 游标的当前行:current of
50、mycurupdate dept set dname=dname| _update where current of mycur; end loop ;close mycur;注意:update dept set dname=dname| _update ,loc=loc|where current of mycur;放在5.1.5 隐式游标PL/SQL为所有SQL数据操作语句(包括返回一行的SELECT)隐式声明游标,称为隐式声明游标的原因是用户不能直接命名和控制此类游标。当用户在PL/SQL中使用数据库操作语言(DML)时,Oracle预定义一个名为SQL的隐式游标,通过检查隐式游标的属性
51、可以获取与最近执行的SQL语句相关的信息。在执行DML语句后,隐式游标属性返回信息。对于隐式游标而言,属性ISOPEN的值总是false,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。隐式游标:不需要我们declare、open、使用完了不需要我们close。beginfor cur in (select dname from dept) loopdbms_output.put_line(cur.dname);end loop ;end ;当表中的数据量很大的时候, 我们不建议使用游标。为什么呢?因为它的执行效率不是很高, 很耗资源。但是在有的情况下,比如逐行取数据又是很灵活的。5
52、.2 存储过程创建语法5.2.1一个简单的存储过程IN:输入参数create or replace procedure pro1(id in number )-is 或 as 都可以is-参数name varchar2 ( 20);beginselect dname into name from dept where deptno=id;dbms_output.put_line(name);exceptionwhen TOO_MANY_ROWS then上面的pl/sql中,将报错“字符串缓冲区太小”!游标只指向的是列dname。dbms_output.put_line(Select into
53、语句返回了多行);when no_data_foundthendbms_output.put_line(没有找到数据);-结束使用:end pro1也可以end ;上面sql块执行成功就会创建存储过程。如何调用这个存储过程呢?如下所示declarebeginbeginvar number ;for var in 1. 10pro1( 40);beginloopend ;var:= 2;pro1(var);pro1(var);end loop ;end ;end;Sql plus下还可以:execute pro1(40);522输出参数如何使用Oracle定时作业队列当数据表中数据量很大的时候,
54、我们进行查询速度会很慢,特别是上百万数据 做报表的时候体会就更深了,为此,我们采用定时执行存储过程,提取我们需 要的数据。写到这里的时候大家可能会有些疑问,这样我们的数据不就不能实时最新了吗?你的疑问是正确的,我们为什么提出这种解决方案呢,原因在于我们的数据是 生产数据,每个月的月底进行导入数据,然后制作报表。因此可以采用这种方法 提高访问数据库的效率。本帖子主要是说怎么定义“执行作业”,然后定时执行,代码如下:用管理员登陆,进行设置环境 修改可执行作业个数为20个ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20修改取消限制模式ALTER SYSTEM DIS
55、ABLE RESTRICTED SESSION;修改这个文件C:oracleora90adminsamplepfilein itsmpl.ora添力口job_queue_keep_c onn ecti ons = true-创建测试表create table test_job_table(date_test date);-创建一个带执行的存储过程,向数据库中插入数据create or replace procedure pro_test_jobasbegininsert into test_job_table(date_test) values(sysdate); en d;-创建一个定时执行
56、存储过程的任务jobvariable job1 nu mber;begindbms_job.submit(:job1,pro_test_job;,sysdate,sysdate+1/1440);en d;-运行一个定时器任务exec dbms_job.r un (1);-查询job执行的存储过程后的数据select to_char(date_test,yyyy/mm/dd hh24:mi:ss) from test_job_table;这样我们每隔几分钟执行查询,就可以看到数据每隔一分钟被插入。到这里我们定义作业,定时查询已经介绍完了,这一步就相当于,我们做 报表的提取数据,希望对大家有些启发
57、,呵呵NOte:前段时间做测试,几个测试表数据量=100W多条/小时,只是测试用,为了能跑几天看效果,在网上查了一下oracle的定时作业刚好能满足需求!一个小时清空一次表,注意清除的时候要占有锁! ! !附录 1: SQL 问题集与答案值为:date now=2004-11-30 10:30:00MA并且operation_date=离date now时间最近的一条数据!* from cntr_msd where con tai nerno =SITU4911770 AND?不知道怎么写了!cn trmsdidcontainernocn tr_status operati on _date1
58、89901SITU4911770MA2003-9-10 17:29:56491827SITU4911770MA2004-6-23 17:12:19588476SITU4911770MA2004-9-9 15:56:07700014SITU4911770MA2004-11-15 21:57:42我只想找到cntr_status=MA并且operatio门_4玄上6=离date now时间最i答:提示一一把date now转换成DATE后相减。3如我有100名学生,按成绩排序后,的只取前10名,如何写sql语句?答:select * from (select * from stude nts wh
59、ere . order by .) where row num sqlplus /no logSQL*Plus: Release 9.2.0.1.0 - Production on星期三 1 月 31 08:46:08 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL conn ect sys/oraclevassp as sysdba已连接。SQL exit 从 Oracle9i Release 9.2.0.1.0 - ProductionJServer Release 9.2.0.1.0 -
60、Production中断开C:sqlplus /no logSQL*Plus: Release 9.2.0.1.0 - Production on星期三 1 月 31 08:46:24 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL conn ect /as sysdbaERROR:ORA-12560: TNS:协议适配器错误由于这个问题也正困绕着我,一直在关注这个贴子的动态今天看到Pon dKa 的回复后,才豁然开朗我的平台: wi ndows2003+oracle9.2.0.1.0SQL s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报书课题进度
- 前台薪资合同范本模板
- 厦门 代建合同范本
- 公司顶层设计合同范本
- 伤残赔偿合同范本
- 品牌使用授权合同范本
- 保安与个人合同范本
- 厂房墙面翻新合同范例
- 乐器维修采购合同范例
- 合同范本合作期限
- 硬笔书法 社团教案
- 浙江省衢州市各县区乡镇行政村村庄村名居民村民委员会明细
- 中国脓毒症及脓毒性休克急诊治疗指南
- 工序标准工时及产能计算表
- 品德家庭小账本
- 人教版体育与健康四年级-《障碍跑》教学设计
- DB32-T 2860-2015散装液体化学品槽车装卸安全作业规范-(高清现行)
- 福利院装修改造工程施工组织设计(225页)
- 部编版六年级下册语文课后词语表(拼音)
- 现代写作教程笔记
- 环境空气中臭氧的测定
评论
0/150
提交评论