版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额因此,在创建对象之前,首先要分配存储空间分配存储,就要创建表空间:创建表空间示例如下:CREATE TABLESPACE "SAMPLE" LOGGING DATAFILE 'D:ORACLEORADATAORA92LUNTAN.ora' SIZE 5M EXTEN
2、T MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 上面的语句分以下几部分:第一: CREATE TABLESPACE "SAMPLE" 创建一个名为 "SAMPLE" 的表空间. 对表空间的命名,遵守Oracle 的命名规范就可了. ORACLE可以创建的表空间有三种类型:(1)TEMPORARY: 临时表空间,用于临时数据的存放;创建临时表空间的语法如下:CREATE TEMPORARY
3、TABLESPACE "SAMPLE". (2)UNDO : 还原表空间. 用于存入重做日志文件. 创建还原表空间的语法如下:CREATE UNDO TABLESPACE "SAMPLE".(3)用户表空间: 最重要,也是用于存放用户数据表空间 可以直接写成: CREATE TABLESPACE "SAMPLE"TEMPORARY 和 UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据.第二: LOGGING 有 NOLOGGI
4、NG 和 LOGGING 两个选项, NOLOGGING: 创建表空间时,不创建重做日志. LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志.用NOLOGGING时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复,但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的,所以通常不需要表空间的创建日志,因此,在创建表空间时,选择 NOLOGGING,以加快表空间的创建速度.第
5、三: DATAFILE 用于指定数据文件的具体位置和大小.如: DATAFILE 'D:ORACLEORADATAORA92LUNTAN.ora' SIZE 5M 说明文件的存放位置是 'D:ORACLEORADATAORA92LUNTAN.ora' , 文件的大小为5M.如果有多个文件,可以用逗号隔开:DATAFILE 'D:ORACLEORADATAORA92LUNTAN.ora' SIZE 5M, 'D:ORACLEORADATAORA92dd.ora' SIZE 5M 但是每个文件都需
6、要指明大小.单位以指定的单位为准如 5M 或 500K.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少IO竟争.指定文件名时,必须为绝对地址,不能使用相对地址.第四: EXTENT MANAGEMENT LOCAL 存储区管理方法在Oracle 8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL ),从9I开始,只能是本地管理方式.因为LOCAL 管理方式有很多优点.在字典中管理(DICTIONARY): 将数据文件中的每一个存储单元做为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update
7、操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片,这就是为什么要做磁盘整理的原因.本地管理(LOCAL): 用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。第五: SEGMENT SPACE MANAGEMENT 磁盘扩展管理方法:SEGMENT SPACE MANAGEMENT: 使用该选项时区大小由系统自动确定。由于 Oracle 可确定各区的最佳大小,所以区大小是可变的。UNIFORM SEGMENT SPACE MA
8、NAGEMENT:指定区大小,也可使用默认值 (1 MB)。第六: 段空间的管理方式: AUTO: 只能使用在本地管理的表空间中. 使用LOCAL管理表空间时,数据块中的空闲空间增加或减少后,其新状态都会在位图中反映出来。位图使 Oracle 管理空闲空间的行为更加自动化,并为管理空闲空间提供了更好的性,但对含有LOB字段的表不能自动管理.MANUAL: 目前已不用,主要是为向后兼容.第七: 指定块大小. 可以具体指定表空间数据块的大小.创建例子如下:1 CREATE TABLESPACE "SAMPLE"2 LO
9、GGING3 DATAFILE 'D:ORACLEORADATAORA92SAMPLE.ora' SIZE 5M,4 'D:ORACLEORADATAORA92dd.ora' SIZE 5M5 EXTENT MANAGEMENT LOCAL6 UNIFORM SEGMENT SPACE MANAGEMENT7*
10、160; AUTOSQL> /表空间已创建。要删除表空间进,可以SQL> DROP TABLESPACE SAMPLE;表空间已丢弃。oracle调整表空间文件大小1、调整表空间文件大小alter database datafile '/u01/app/oracle/oradata/rmanrep/users01.dbf' resize 15m;2、调整表空间文件自动扩展 alter database datafile '/u01/app/oracle/oradata/rmanrep/users01.dbf' autoexte
11、nd on next 20m maxsize 1g;3、新增磁盘 alter database datafile '/u01/app/oracle/oradata/rmanrep/users01.dbf' autoextend on next 20m maxsize 1g; alter tablespace users add datafile '/u03/oradata/users02.dbf' size 50m autoextend on next 10m maxsize 200mOracle创建用户/密码并授权 移除权限oracle 2011-01-21
12、16:45:38 阅读86 评论0 字号:大中小 订阅 Oracle创建用户/密码并授权(1) 创建用户Create user 用户名 identified by 密码;(如果是数字则要加双引号”111111”,如果是字母就不用)(2) 授权给某个用户Grant connect,resource to 用户名;(只有用户有了connect 和 resource后才能操作其他表)(3) 授DBA 权限Grant dba to 用户名;(4) 给用户创建会话的权限:grant create session to DB_USER (3) 授DBA 权限Grant dba to 用户名;(4) 撤权:
13、 revoke 权限. from 用户名;(5)删除用户:drop user username cascade (cascade 保证彻底删除)首先用管理员的帐户登录(要有修改用户的权限)systemalter user sys identified by 123; (sys是用户名,123是密码)如果用sys登录:connect sys/oralce as sysdba;用system登录:connect system/oracle;oracle用户权限2008-03-18 10:04Oracle系统中用户权限的赋予,查看和管理.在Oracle数据库中,用户的权限分为两种(在这里我们不讨论d
14、ba或oper的权限,只考虑普通用户的权限),分别是System Privilege系统权限 和User Table Privilege用户数据表权限.1.首先,创建用户,以下几条命令可以创建一个用户,前提是必须以DBA的身份登录(如果你不是DBA,不要看下去了):create user DB_USER identified by DB_USER_PW '创建用户DB_USER,密码为DB_USER_PWgrant create session to DB_USER '给用户创建会话的权限grant resource to DB_USER2.当用户建立后,会自动在Oracle数
15、据库系统中生成属于该用户的Scheme (可以理解为所有属于该用户的表,视图.等对象的集合).该用户可以将对这些对象的访问权限赋予其它的系统用户.3.该用户用sqlplus登录后,以下命令可以看到该用户的权限(该部分取自于CNOUG网站):本用户读取其他用户对象的权限:select * from user_tab_privs;本用户所拥有的系统权限:select * from user_sys_privs;ORACLE数据库用户与权限管理ORACLE是多用户系统,它允许许多用户共享系统资源。为了保证数据库系统的安全,数据库管理系统配置了良好的安全机制。2. 1 ORACLE数据库安全策略建立系
16、统级的安全保证系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。建立对象级的安全保证对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。建立用户级的安全保证用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相同的特权。2.2 用户管理ORACLE用户管理的内容主要包括用户的建
17、立、修改和删除用户的建立SQL>CREATE USER jxzy>IDENTIFIED BY jxzy_password>DEFAULT TABLESPACE system>QUATA 5M ON system; /供用户使用的最大空间限额用户的修改SQL>CREATE USER jxzy>IDENTIFIED BY jxzy_pw>QUATA 10M ON system;删除用户及其所建对象SQL>DROP USER jxzy CASCADE; /同时删除其建立的实体2.3系统特权管理与控制ORACLE 提供了80多种系统特权,其中每一个系统特
18、权允许用户执行一个或一类数据库操作。授予系统特权SQL>GRANT CREATE USER,ALTER USER,DROP USER>TO jxzy_new>WITH ADMIN OPTION;回收系统特权SQL>REVOKE CREATE USER,ALTER USER,DROP USER>FROM jxzy_new/但没有级联回收功能显示已被授予的系统特权(某用户的系统级特权)SQL>SELECT*FROM sys.dba_sys_privs2.4 对象特权管理与控制ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查
19、看、执行(存储过程)、引用(其它表字段作为外键)、索引等。授予对象特权SQL>GRANT SELECT,INSERT(office_num,office_name),>UPDATE(desc)ON office_organization>TO new_adminidtrator>WITH GRANT OPTION;/级联授权SQL>GRANT ALL ON office_organization>TO new_administrator回收对象特权SQL>REVOKE UPDATE ON office_orgaization>FROM new_a
20、dministrator/有级联回收功能SQL>REVOKE ALL ON office_organization>FROM new_administrator显示已被授予的全部对象特权SQL>SELECT*FROM sys.dba_tab_privs2.5 角色的管理ORACLE的角色是命名的相关特权组(包括系统特权与对象特权),ORACLE用它来简化特权管理,可把它授予用户或其它角色。ORACLE数据库系统预先定义了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具有创建表、视
21、图、序列等特权;RESOURCE具有创建过程、触发器、表、序列等特权、DBA具有全部系统特权;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的特权。通过查询sys.dba_sys_privs可以了解每种角色拥有的权利。授予用户角色SQL>GRANT DBA TO new_administractor>WITH GRANT OPTION;=Oracle 的用户根据所被授予的权限分为系统权限和对象权限。其中最高的权限是sysdba。 Sysdba具有控制Oracle一切行为的特权,诸如创建、启动、关闭、恢复数据库,使数据库归档/非归档,备份
22、表空间等关键性的动作只能通过具有sysdba权限的用户来执行。这些任务即使是普通DBA角色也不行。Sysoper是一个与sysdba相似的权限,只不过比sysdba少了SYSOPER privileges WITH ADMIN OPTION,CREATE DATABASE,RECOVER DATABASE UNTIL这几个权限而已。这两者的认证方式是相同的办法,所以下面只介绍sysdba的认证管理。一般对sysdba的管理有两种方式: * 作系统认证和密码文件认证。具体选择那一种认证方式取决于:你是想在Oracle运行的机器上维护数据库,还是在一台机器上管理分布于不同机器上的所有的Oracle
23、数据库。若选择在本机维护数据库,则选择 * 作系统认证可能是一个简单易行的办法;若有好多数据库,想进行集中管理,则可以选择password文件认证方式。下图比较直观的说明了这个选择权衡过程:使用 * 作系统认证方式的配置过程:1 在 * 作系统中建立一个合法帐户。具体来说,在NT上,首先建立一个本地用户组,取名为ORA_DBA,其中SID为该数据库实例的SID,或者建立一个ORA_DBA地组,该组不对应于任何一个单独的Oracle实例。这样当一个NT上有好几个Oracle实例时,不用分别管理。然后再NT上建立一个用户,并且把它归入该组中。但是实际上这两步在Oracle8I安装过程中已经自动完成
24、了,一般不用手动进行。第三步:在sqlnet.ora(位于$ORACLE_HOME/NETWORK/ADMIN目录中)中,把SQLNET.AUTHENTICATION _SERVICES 设置为SQLNET.AUTHENTICATION_SERVICES= (NTS),意思为使用NT认证方式。第四步,在INIT.ORA中,把REMOTE_LOGIN_PASSWORD设置为NONE,意思是不用password认证方式。完成以上步骤后,就可以在登录到NT后,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)来作为超级
25、用户登录到Oracle中,执行一些只有超级用户才能进行的 * 作。在Unix下,情况有些不同。毕竟这是两个完全不同的 * 作系统。首先,在安装Oracle之前,建立一个DBA组,这一步不用说了,不然是装不上Oracle的。一般还建立一个名为Oracle的用户,并把它加入到DBA组中。第二步, 设置REMOTE_LOGIN_PASSWORD为NONE。在Oracle8.1以后,该参数默认为EXCLUSIVE。一定要记得改过来。第三步, 用该用户名登录Unix,运行SQL*Plus 或者SERVER MANAGER,输入以下命令:CONNECT INTERNAL(CONNECT / AS SYSD
26、BA)来登录到Oracle中。使用password文件认证的具体步骤:Oracle提供orapwd实用程序来创建password 文件,运用orapwd建立该认证方式的具体步骤如下:1 使用Orapwd实用程序来创建一个PASSWORD文件。语法:orapwd file=文件名 password=internal用户密码 entried=entries.详细解释:文件名要包含完整的全路径名,如果不指定,Oracle把它默认放置$ORACLE_HOME/dbs(Unix下)或者$ORACLE_HOME/DATABASE(NT下)下。用户密码是用户internal的密码。当然后来还可以再向里边加入
27、别的超级用户。Entries表示最大允许有的超级用户数目。这个是一个可选的。前两者是必须指定的。一般会把它设置的比实际需要大一些,以免不够。2 把INIT.ORA中REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有当前INSTANCE使用这个password文件。而且允许有别的用户作为sysdba登录进系统里边,而若选择了SHARED,则表明不止一个实例使用这个密码文件,伴随着一个很强的约束:sysdba权限只能授予sys和internal这两个用户名。(其实internal不是一个实际用户,而只是sys作为sysdba登录时的一
28、个别名。)同时还要记得把sqlnet.ora文件中SQLNET.AUTHENTICATION _SERVICES设置为NONE。一般在Unix下它是默认设置。在NT下,若选择典型安装时,会使用OS认证,而自定义时会使用密码文件认证方式。在安装过程中会提示输入INTERNAL密码。这样的话,就不用在手工创建密码文件和设定INTERNAL的密码了。3 用SQL*Plus 或SERVER MANAGER运行下面命令登录进系统:CONNECT INTERNAL/密码。注意点:1在Oracle8.1.6安装在WIN2000下创建数据库时,常常会发生凭证检索失败的错误。这是由于Oracle不能应用OS认证
29、的结果。一般可以通过修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES为NONE来解决。这时,Oracle将采用密码文件认证方式。2.由于Oracle有几个系统预建的用户,所以最好在安装完成以后马上改变这些用户的密码。系统默认得密码分别为:internal/oracle , sys/change_on_install, system/manager.3.当选择密码文件认证方式时,可以再向系统中加入其他超级用户。比如用以下语句把用户SCOTT加入超级用户之中:(由具有sysdba权限的人执行)SQL>GRANT SYSDBA TO SCOTT;这样SC
30、OTT用户就具有了sysdba权限。注意,此时SCOTT用户可以以两种身份登录:SCOTT , SYS.当SCOTT在登录时没有输入AS SYSDBA时,SCOTT是作为普通用户登录的。而当登录时输入了AS SYSDBA时,此时SCOTT登录进去的用户实际上为sys。4 当前系统中的具有sysdba权限的用户名可以从数据字典视图v$pwfile_user中查询得到:SELECT * FROM V$PWFILE_USERS; 如上图所示。5 系统中最大的具有sysdba权限的用户数由创建密码文件时的ENTRIES参数决定。当需要创建更多的具有sysdba权限的用户时,就需要删除原有的密码文件,重
31、新创建一个。这需要关闭数据库,删除密码文件,重新创建一个新的密码文件,在entries中输入足够大的数目。再启动Oracle。这时,所有原来北授权的超级用户都不再存在,需要重新授权。所以在重新创建密码文件前,先要查询该视图,记下用户名,再在创建完密码文件后重新授权。6 Internal用户密码忘记的处理方法:有两种办法:1 ALTER USER SYS IDENTIFIED BY 新密码;/这同时也改变了Internal的密码,在Oracle8I中通过2 重新创建一个新的密码文件,指定一个新的密码。Oracle 添加外键 -摘抄- 创建外键约束时假如使用Oracle默认的创建方式,在删除被参照
32、的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null要害字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空。 例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为 createtabledept(deptnonumber(10)notnull,deptnamevarchar2(30)notnull,constraintpk_deptprimarykey(deptno);和createtableemp(empnonumbe
33、r(10)notnull,fnamevarchar2(20),lnamevarchar2(20),deptnumber(10),constraintpk_empprimarykey(empno); 然后我们现在分别使用这两个要害字来增加外键试一下,首先我们来试一下on delete cascade altertableempaddconstraintfk_emp_deptforeignkey(dept)referencesdept(deptno)ondeletecascade; 先增加外键。然后插入数据。 insertintodeptvalues(1,销售部);insertintodeptva
34、lues(2,财务部);insertintoempvalues(2,Mary,'Song,1);insertintoempvalues(3,Linda,'Liu,2);insertintoempvalues(4,Linlin,'Zhang,1); 然后现在我要删除销售部,会有什么后果呢? deletefromdeptwheredeptno=1; 我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很轻易理解on delete cascade了。 接下来我们再来看on delete set null,
35、顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证实on delete set null作用: 首先恢复刚才的那几条数据,然后更改约束: altertableempaddconstraintfk_emp_deptforeignkey(dept)referencesdept(deptno)ondeletesetnull; 然后我们在执行删除操作: deletefromdeptwheredeptno=1; 你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on de
36、lete set null的作用了。 使用on delete set null有一点需要注重的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,假如已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。 总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,假如你需要删除的数据被其他数据所参照,那么你应该
37、决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式: 禁止删除。这也是Oracle默认的 将那些参照本值的数据的对应列赋空,这个需要使用on delete set null要害字 将那些参照本值的数据一并删除,这个需要使用on delete cascade要害字Oracle认证考试:Oracle触发器的语法详解 I.#A4 tVAQPBm OAt/Dhr> 4*v< 触发器是一种特殊的存储过程,下面是触发器的详细说明: : g9w BA z?sUn( ORACLE 触发器 " 5+kZzy 7=qOqww1 ORACLE产生数据库触发器的
38、语法为: kB*_ Pq !#h#n create or replace trigger 触发器名 触发时间 触发事件 cc5S>f#.4P -7ILL"t on 表名 !.cJ*'C5V !HT)( for each row X c<G HwZ + d_V pl/sql 语句 v(N n> |WrAZt 其中: f$vd)I9Bn U&W #7_ 触发器名:触发器对象的名称。由于触发器是数据库自动执行 的,因此该名称只是一个名称,没有实质的用途。 M_VaJX nb%+fT|+0 触发时间:指明触发器何时执行,该值可取: PnWIK:l GuhPR
39、b*r before-表示在数据库动作之前触发器执行; /!A/Am)Nm lbg.9#! after-表示在数据库动作之后出发器执行。 2c|*Q* *,H2vHgbWL 触发事件:指明哪些数据库动作会触发此触发器:c5p69n1 M$R=4<vr_u insert:数据库插入会触发此触发器; 4lVNHji VIJ%/y update:数据库修改会触发此触发器; PaMId:W,i y$#$;+5Y delete:数据库删除会触发此触发器。 y04qy<7u 6)-X2 表 名:数据库触发器所在的表。 Bn!yc W$ iPi+K0?W for each row:对表的每一行触
40、发器执行一次。如果没有这一选项,则只对整个表执行一次。 yW %A AQbs%ONg 举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表: nS A$Vh hjXp%O create trigger auth_secure SM 0$F q"O3l before insert or update or delete file:/对整表更新前触发 HGc3QY=|m, WH%;$?= on auths M7jv q d5)|? begin 16t5=BT < 5BNtt if(to_char(sysdate,DY)=SUN>Gl&a X"
41、;p5R RAISE_APPLICATION_ERROR(-20600,不能在周末修改表auths); #+>':$ VD_KuM ( RAISE_APPLICATION_ERROR是函数,括弧内的,第一参数范围在-2000020999之间,第二个 ?VQdq6- ?d7mv3't 参数是字符串,大小在2k,超过的话,系统自动截断) wZ+ R<$ IK$6 end if; 0qLtQ"l -ygwk|w endoracle存储过程详解-游标 实现增、删、改、查的功能 收藏 游标(CURSOR)是ORACLE系统在内存中开辟的一个工作区,在其中存放SELE
42、CT语句返回的查询结果. 这个查询结果既可以是零记录,单条记录,也可以是多条记录.在游标所定义的工作区中,存在着一个指针(POINTER), 在初始状态它指向查询结果的首记录. SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它同时引入了更强的程序逻辑。 PL/SQL支持DML命令和SQL的事务控制语句。DDL在PL/SQL中不被支持,这就意味作在PL/SQL程序块中不能创建表或其他任何对象。 较好的PL/SQL程序设计是在PL/SQL块中使用象DBMS_SQL这样的内建包或执行EXECUTE IMMEDIATE命令建立动态SQL来执行DDL命令, PL/SQL
43、编译器保证对象引用以及用户的权限。 下面我们将讨论各种用于访问ORACLE数据库的DDL和TCL语句。 查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的返回值被赋予INTO子句中的变量 ,变量的声明是在DELCARE中。SELECT INTO语法如下: SELECT DISTICT|ALL*|column,column,. INTO (variable,variable,. |record) FROM table|(sub-query)alias WHERE. PL/SQL中SELECT语句只返回一行数据。如果超过一行数据
44、,那么就要使用显式游标(对游标的讨论我们将在后面进行), INTO子句中要有与SELECT子句中相同列数量的变量。INTO子句中也可以是记录变量。 %TYPE属性 在PL/SQL中可以将变量和常量声明为内建或用户定义的数据类型,以引用一个列名,同时继承他的数据类型和大小。 这种动态赋值方法是非常有用的,比如变量引用的列的数据类型和大小改变了,如果使用了%TYPE,那么用户就不必修改代码, 否则就必须修改代码。 例: v_empno SCOTT.EMP.EMPNO%TYPE; v_salary EMP.SALARY%TYPE; 不但列名可以使用%TYPE,而且变量、游标、记录,或声明的常量都可以
45、使用%TYPE。这对于定义相同数据类型的变量非常有用。 DELCARE V_A NUMBER(5):=10; V_B V_A%TYPE:=15; V_C V_A%TYPE; BEGIN DBMS_OUTPUT.PUT_LINE ('V_A='|V_A|'V_B='|V_B|'V_C='|V_C); END SQL>/ V_A=10 V_B=15 V_C= PL/SQL procedure successfully completed. SQL> 其他DML语句 其它操作数据的DML语句是:INSERT、UPDATE、DELETE和LO
46、CK TABLE,这些语句在PL/SQL中的语法与在SQL中的语法相同。 我们在前面已经讨论过DML语句的使用这里就不再重复了。在DML语句中可以使用任何在DECLARE部分声明的变量,如果是嵌套块, 那么要注意变量的作用范围。 例: CREATE OR REPLACE PROCEDURE FIRE_EMPLOYEE (pempno in number) AS v_ename EMP.ENAME%TYPE; BEGIN SELECT ename INTO v_ename FROM emp WHERE empno=p_empno; INSERT INTO FORMER_EMP(EMPNO,ENA
47、ME) VALUES (p_empno,v_ename); DELETE FROM emp WHERE empno=p_empno; UPDATE former_emp SET date_deleted=SYSDATE WHERE empno=p_empno; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee Number Not Found!'); END DML语句的结果 当执行一条DML语句后,DML语句的结果保存在四个游标属性中,这些属性用于控制程序流程或者了解程序的状态。 当运行DML语句
48、时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。 隐式游标只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性.SQL%FOUND,SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。 SQL%FOUND和SQL%NOTFOUND 在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是: . TRUE :INSERT . TRUE ELETE和UPDATE,至少有一行被DELETE或UPDATE
49、. . TRUE :SELECT INTO至少返回一行 当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。 SQL%ROWCOUNT 在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功, SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND. SQL%ISOPEN df 事务控制语句 事务是一个工作的逻辑单元可以包括一个或多个DML语句,事物控制帮助用户保证数据的一致性。 如果事务控制逻辑单元中的任何一个DML语句失败,那么整个事务都将回滚
50、, 在PL/SQL中用户可以明确地使用COMMIT、ROLLBACK、SAVEPOINT以及SET TRANSACTION语句。 COMMIT语句终止事务,永久保存数据库的变化,同时释放所有LOCK,ROLLBACK终止现行事务释放所有LOCK, 但不保存数据库的任何变化,SAVEPOINT用于设置中间点,当事务调用过多的数据库操作时,中间点是非常有用的, SET TRANSACTION用于设置事务属性,比如read-write和隔离级等。 显式游标 当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。PL/SQL管理隐式游标, 当查询开始时隐式游标打开,
51、查询结束时隐式游标自动关闭。显式游标在PL/SQL块的声明部分声明, 在执行部分或异常处理部分打开,取数据,关闭。下表显示了显式游标和隐式游标的差别: 使用游标 这里要做一个声明,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标。 要在程序中使用游标,必须首先声明游标。 声明游标 语法: CURSOR cursor_name IS select_statement; 在PL/SQL中游标名是一个未声明变量,不能给游标名赋值或用于表达式中。 例: DELCARE CURSOR C_EMP IS SELECT empno,ename,salary FRO
52、M emp WHERE salary>2000 ORDER BY ename; . BEGIN 在游标定义中SELECT语句中不一定非要表可以是视图,也可以从多个表或视图中选择的列,甚至可以使用*来选择所有的列 。 打开游标 使用游标中的值之前应该首先打开游标,打开游标初始化查询处理。打开游标的语法是: OPEN cursor_name cursor_name是在声明部分定义的游标名。 例: OPEN C_EMP; 关闭游标 语法: CLOSE cursor_name 例: CLOSE C_EMP; 从游标提取数据 从游标得到一行数据使用FETCH命令。每一次提取数据后,游标都指向结果集的下一行。语法如下: FETCH cursor_name INTO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粮油经销合同范本
- 保证工程质量合同范本
- 2022年采购部员工的个人工作计划范文样本
- 门面餐饮合同范本
- 体育用品供货安装合同范本
- 猪仔购买合同范本
- 2024年工业缝制机械项目合作计划书
- 光伏储能一体式充电基础设施项目可行性研究报告模板-立项备案
- 酒吧供货合同范本
- 开发商安装门窗的合同范本
- 2024秋国开《现代教育管理专题》平时作业1-4答案
- 【7道人教版期中】安徽省怀宁县2023-2024学年七年级上学期期中考试道德与法治试卷(含详解)
- 管理经济学学习通超星期末考试答案章节答案2024年
- 9.2提高防护能力(课件)-2024-2025学年统编版道德与法治七年级上册
- 汽车修理业务受理程序、服务承诺、用户抱怨制度
- 2025届福建省厦门市外国语学校高二数学第一学期期末考试试题含解析
- 贵阳一中2025届高三10月高考适应性月考(二) 思想政治试卷(含答案)
- 建筑垃圾消纳处置场所建设可行性研究报告
- GB/T 44670-2024殡仪馆职工安全防护通用要求
- 期中高频易错卷(试题)-2024-2025学年数学五年级上册北师大版
- 2024江苏省沿海开发集团限公司招聘23人高频500题难、易错点模拟试题附带答案详解
评论
0/150
提交评论