Oracle_PLSQL教程-第十章
oraclePLSQL语法详细手册

oraclePLSQL语法详细手册oraclePLSQL语法详细手册一、CREATE TABLE 语句 (3)二、CREATE SEQUENCE 语句 (5)三、CREATE VIEW 语句 (6)四、INSERT语句: (7)五、UPDATE语句: (9)六、DELETE语句: (10)七、TRUNCATE语句: (II)八、各类FUNCTIONS: (12)1.转换函数: (12)2.日期函数. (16)3.字符函数. (20)4.数值函数. (28)5.单行函数: (33)6.多行?函数. (35)第二部分PL/SQL语法部分 (41)一、PL/SQL语言简介 (41)二、变量讲明 (48)三、PL/SQL操纵程序流 (52)四、储备过程 (54)五、储备函数 (54)六、PACKAGE (54)七、触发器 (56)八、应用实例 (58)Create table 语句语句:CREATE TABLE [schema. Jtable_name({ column datatype 'DEFAULT expr^ [co1umn_constraint J Itable_constraint}[,{ column datatype [DEFAULT expr^ [co1umn_constra i nt JI table_constraint} ]...)[[PCTFREE integer] [PCTUSED integer][INITRANS integer] [MAXTRANS integer][TABLESPACE tablespace][STORAGE storage_clause][RECOVERABLE I UNRECOVERABLE ][PARALLEL ( [ DEGREE { integer I DEFAULT }][INSTANCES { integer I DEFAULT }])I NOPARALLEL ][CACHE I NOCACHE ]I [CLUSTER cluster (column [, columrf...)]][ENABLE enable_clauseI DISABLE disable_clause ]...[AS subquery表是Oracle中最重要的数据库对象,表储备一些相似的数据集合,这些数据描述成若干列或字段.create table语句的差不多形式用来在数据库中创建容纳数据行的表.create table语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还能够指定约束条件,储备参数和该表是否是个cluster的一部分.Schema用来指定所建表的owner,如不指定则为当前登录的用户.Table_name用来指定所创建的表名,最长为30个字符,但不能够数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突.Column用来指定表中的列名,最多254个.Datatype用来指定列中储备什么类型的数据,并保证只有有效的数据才能够输入. co 1 umn_constraint用来指定列约束,如某一列不可为空,则可指定为not null.table_constraint用来指定表约束,如表的主键,外键等.Pct free用来指定表中数据增长而在Oracle块中预留的空间.DEFAULT为10%,也确实是讲该表的每个块只能使用90%, 10%给数据行的增大时使用.Pctused用来指定一个水平线,当块中使用的空间低于该水平线时才能够向该中加入新数据行.Parallel用来指定为加速该表的全表扫描能够使用的并行查询进程个数.Cache用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项.Cluster用来指定该表所储备的cluster.Tablespace用来指定用数据库的那个分区来储备该表的数据.Recoverable|Unrecoverable用来决定是否把对本表数据所作的变动写入Redo文件.以复原对数据的操作.As当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据.例:1) create table mytable(mydec decimal,myint inteter)tablespace user_data pctfree 5pctused 30;2) create table mytable2as ( select * from mytablel);create sequence 语句语句: CREATE SEQUENCE [schema. ]sequence_naine[INCREMENT BY integer][START WITH integer][MAXVALUE integer I NOMAXVALUE][MINVALUE integer I NOMINVALUE][CYCLE I NOCYCLE][CACHE integer I NOCACHE][ORDER I NOORDER] 序列用来为表的主键生成唯独的序列值.Increment by指定序列值每次增长的值Maxvalue指定产生的序列的最大值Minvalue指定产生的序列的最小值Cycle指定当序列值逵到最大或最小值时,该序列是否循环. Cache指定序列生成器一次缓存的值的个数Order指定序列中的数值是否按访咨询顺序排序.例:1)create sequence niyseqincrement by 4 start with 50 maxvalue 60 minvalue 50cycle cache 3;2)sql> create sequence new_s;sql>insert into new (new_id, last_name, first_name) values(new_s.nextval, 'daur*', 'peimit');create view 语句语句:CREATE [OR REPLACE] [FORCE I NOFORCE] VIEW [schema. ]view_name[(alias [,alias]...)]AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]]视图实际上是储备在数据库上旳select语句.每次在sql语句中使用视图时, 表示该视图的select语句就用来得到需要的数据.Or replace创建视图时假如视图已存在,有此选项,新视图会覆盖旧的视图.Force如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限时,也能够建立视图.As subquery产生视图的select査询语句With check option假如视图是基于单表的且表中所有的非空列都包含在视图中时,该视图可用于insert和update语句中,本选项保证在每次插入或更新数据后,该数据能够在视图中查到例:1) create or place view new_vasselect substr(d. d_last_nanie, 1, 3),d. d_lastname, d. d_firstname, b. b_start_date, b. b_location fromnewl d,new2 bwhere d. d_lastname=b. b_lastname;四、INSERT语句:1.语法INSERT INTO [schema. ]{table I view | subquery }[gdblinkj[(column [, column] ...)]{VALUES (expr [, exprj ...) I subquery}[WHERE condition]2.插入单行使用VALUES关键词为新行的每一列指定一个值.假如不明口某列的值,能够使用NULL关键词将其值设为空值(两个连续的逗号也能够表示空值,也可使用NULL关键词)插入一行时试图为那些NOT NULL的列提供一个NULL值,会返回错误信息.举例:插入一条记录到DEPARTMENT表中INSERT INTO DEPARTMENT(DEPARTMENT.ID, NAME, LOCATION_ID)VALUES (01,'COMPUTER', 167)3.插入多行将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.举例:INSERT INTO OR1)ER_TEMPSELECT A. OR1)ER_I1), B. ITEM,ID, C. NAME, E. FIRST_NAME| I* / 11E. LAST_NAME,A.ORDER_DATE, A. SHIP_DATE, I). DESCRIPTION,B. ACTUAL_PRICE,B.QUANTITY, B. TOTALFROM SALES_ORI)ER A, ITEM B, CUSTOMER C,PRODUCT 1), EMPLOYEE EWHERE MONTHS_BETWEEN(TO_DATE(A. ORI)ER_DATE), TO_DATE(J 01-7 月-91’ ))>0AND A. CUSTOMER.11)=C. CUSTOMER」】)AND C. SALESPERSON. I D=E. EMPLOYEE_I1)AND A. OR1)ER_ I I)=B. OR1)ER_ 11)AND B. PRODUCT 11)=D. PRODUCT ID。
PLSQL循序渐进全面学习教程(全)

PLSQL循序渐进全面学习教程(全)PL/SQL是用于Oracle数据库的编程语言,它结合了SQL语句的数据操作能力和一般编程语言的逻辑控制能力。
PL/SQL循序渐进的全面学习教程将帮助你逐步学习和掌握PL/SQL的各个方面。
1.简介和基础知识:-PL/SQL的概念和背景-PL/SQL的开发工具和环境-PL/SQL和SQL的关系-PL/SQL的基本语法和数据类型2.变量和常量:-PL/SQL变量的声明和使用-不同类型的变量和数据类型-常量的定义和使用3.控制结构:-IF-THEN语句和IF-THEN-ELSE语句-CASE语句的使用-循环语句(FOR循环、WHILE循环)4.异常处理:-异常的概念和分类-异常处理的方法和语句-自定义异常和错误处理5.子程序和函数:-PL/SQL子程序和函数的概念和用途-创建和调用子程序和函数-参数传递和返回值6.游标和结果集:-游标的概念和使用场景-游标的声明、打开、关闭和绑定-使用游标处理结果集和数据集7.触发器:-触发器的概念和作用-创建和使用触发器-触发器的触发事件和触发时机8.包和包体:-包和包体的定义和特点-创建和使用包和包体-包的封装和共享9.过程和函数:-过程和函数的概念和区别-创建和使用过程和函数-过程和函数的编写和调用10.使用PL/SQL开发应用程序:-使用PL/SQL编写数据库操作代码-使用PL/SQL开发业务逻辑-PL/SQL和其他编程语言的集成以上是PL/SQL循序渐进全面学习教程的大纲,你可以根据自己的学习进度逐步深入学习每个主题。
希望这个教程对你学习和掌握PL/SQL编程语言有所帮助!。
Oracle数据库使用-PLSQL

异常处理部分 WHERE product = '芭比娃娃'
FOR UPDATE OF quantity;
IF qty_on_hand > 0 THEN
[DUEPCDLAATERPEroducts SET quantity = quantity + 1
deWclHaEraRtEiopnrosd]uct = '芭比娃娃';
icode VARCHAR2(4); irate NUMBER; BEGIN icode := 'i203'; SELECT itemrate INTO irate FROM itemfile WHERE itemcode = icode; IF irate > 200 THEN UPDATE itemfile SET itemrate = itemrate - 200 WHERE itemcode = icode; ELSE UPDATE itemfile SET itemrate = itemrate - 50 WHERE itemcode = icode; END IF; DBMS_OUTPUT.PUT_LINE('itemrate='|| irate); 20 END;
使用 PL/SQL
回顾
同义词是现有数据库对象的别名 序列用于生成唯一、连续的序号 视图是基于一个或多个表的虚拟表 索引是与表相关的一个可选结构,用于提高 SQL
语句执行的性能 索引类型有标准索引、唯一索引、反向键索引、
位图索引和基于函数的索引 索引组织表基于主键访问数据
2
理解 PL/SQL 功能和特点 了解数据类型及其用法 理解逻辑比较 理解控制结构 掌握错误处理
ORACLEPLSQL编程详解全8篇

ORACLE PL/SQL编程详解第一章:PL/SQL 程序设计简介SQL语言只是访问、操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发。
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。
由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。
除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。
本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。
还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。
1.1 SQL与PL/SQL1.1.1 什么是PL/SQL?PL/SQL是Procedure Language & Structured Query Language 的缩写。
ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。
PL/SQL是对SQL语言存储过程语言的扩展。
从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。
它现在已经成为一种过程处理语言,简称PL/SQL。
目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。
可以将这两部分称为:数据库PL/SQL和工具PL/SQL。
两者的编程非常相似。
都具有编程结构、语法和逻辑机制。
工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。
本章主要介绍数据库PL/SQL内容。
plsql使用教程

plsql使用教程PL/SQL是Oracle数据库的过程式编程语言,它结合了SQL的强大查询能力和程序设计语言的灵活性。
以下是一个简单的PL/SQL使用教程:1. 定义变量在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREnum INTEGER;name VARCHAR2(50);2. 使用SELECT查询数据可以使用SELECT语句从表中检索数据。
例如:SELECT * INTO num, name FROM employees WHERE employee_id = 100;3. 使用IF-THEN-ELSE进行条件判断PL/SQL提供了IF-THEN-ELSE语句来进行条件判断。
例如:IF num > 0 THENDBMS_OUTPUT.PUT_LINE('Number is positive');ELSEDBMS_OUTPUT.PUT_LINE('Number is negative');END IF;4. 使用FOR循环可以使用FOR循环来对一个集合进行迭代。
例如:FOR i IN 1..10 LOOPDBMS_OUTPUT.PUT_LINE('The value of i is: ' || i);END LOOP;5. 创建存储过程可以使用CREATE PROCEDURE语句来创建存储过程。
例如:CREATE PROCEDURE get_employee_details (p_employee_idIN NUMBER) ISv_employee_name VARCHAR2(50);BEGINSELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = p_employee_id;DBMS_OUTPUT.PUT_LINE('Employee name is: ' ||v_employee_name);END;6. 调用存储过程可以使用EXECUTE语句来调用存储过程。
ORACLEPLSQL命令大全

ORACLEPLSQL命令大全ORACLE—PL/SQL命令大全第一章:日志管理1.forcing log switchessql> alter system switch logfile;2.forcing checkpointssql> alter system checkpoint;3.adding online redo log groupssql> alter database add logfile [group 4]sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;4.adding online redo log memberssql> alter database add logfile membersql> '/disk3/log1b.rdo' to group 1,sql> '/disk4/log2b.rdo' to group 2;5.changes the name of the online redo logfilesql> alter database rename file 'c:/oracle/oradata/oradb/redo01.log'sql> to 'c:/oracle/oradata/redo01.log';6.drop online redo log groupssql> alter database drop logfile group 3;7.drop online redo log memberssql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';8.clearing online redo log filessql> alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';/doc/b8157a83d4d8d15abe234e1f.ht ml ing logminer analyzing redo logfilesa. in the init.ora specify utl_file_dir = ' 'b. sql> execute dbms_logmnr_d.build('oradb.ora','c:oracleoradblog');c. sql> execute dbms_logmnr_add_logfile('c:oracleoradataoradbredo01.log',sql> dbms_logmnr.new);d. sql> execute dbms_logmnr.add_logfile('c:oracleoradataoradbredo02.log',sql> dbms_logmnr.addfile);e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>'c:oracleoradblogora db.ora');f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameterssql> v$logmnr_logs);g. sql> execute dbms_logmnr.end_logmnr;第二章:表空间管理1.create tablespacessql> create tablespace ts_name datafile 'c:oracleoradatafile1.dbf' size 100m ,sql>'c:oracleoradatafile2.dbf' size 100m minimum extent550k [logging/nologging]sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)sql> [online/offline] [permanent/temporary] [extent_management_clause]2.locally managed tablespacesql> create tablespace user_data datafile 'c:oracleoradatauser_data01.dbf'sql> size 500m extent management local uniform size 10m;3.temporary tablespacesql> create temporary tablespace temp tempfile 'c:oracleoradatatemp01.dbf'sql> size 500m extent management local uniform size 10m;4.change the storage settingsql> alter tablespace app_data minimum extent 2m;sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);5.taking tablespace offline or onlinesql> alter tablespace app_data offline;sql> alter tablespace app_data online;6.read_only tablespacesql> alter tablespace app_data read only|write;7.droping tablespacesql> drop tablespace app_data including contents;8.enableing automatic extension of data filessql> alter tablespace app_data add datafile 'c:oracleoradataapp_data01.dbf' size 200msql> autoextend on next 10m maxsize 500m;9.change the size fo data files manuallysql> alterdatabase datafile 'c:oracleoradataapp_data.dbf' resize 200m;10.Moving data files: alter tablespacesql> alter tablespace app_data rename datafile 'c:oracleoradataapp_data.dbfsql> to 'c:oracleapp_data.dbf';11.moving data files:alter databasesql> alter database rename file 'c:oracleoradataapp_data.dbf' to 'c:oracleapp_data.dbf';第三章:表1.create a tablesql> create table table_name (column datatype,column datatype]....)sql> tablespace tablespace_name [pctfree integer] [pctused integer]sql> [initrans integer] [maxtrans integer]sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)sql> [logging|nologging] [cache|nocache]2.copy an existing tablesql> create table table_name [logging|nologging] as subquery3.create temporary tablesql> create global temporary table xay_temp as select * from xay;on commit preserve rows/on commit delete rows4.pctfree = (average row size - initial row size) *100 /average row sizepctused = 100-pctfree- (average row size*100/available data space)5.change storage and block utilization parametersql> alter table table_name pctfree=30 pctused=50 storage(next 500k minextents 2 maxextents 100);6.manually allocating extentssql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');7.move tablespacesql> alter table employee move tablespace users;8.deallocate of unused spacesql> alter table table_name deallocate unused [keep integer]9.truncate a tablesql> truncate table table_name;10.drop a tablesql> drop table table_name [cascade constraints];11.drop a columnsql> alter table table_name drop column comments cascade constraints checkpoint 1000;alter table table_name drop columns continue;12.mark a column as unusedsql> alter table table_name set unused column comments cascade constraints;alter table table_name drop unused columns checkpoint 1000;alter table orders drop columns continue checkpoint 1000data_dictionary : dba_unused_col_tabs第四章:索引1.creating function-based indexessql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);2.create a B-tree indexsql> create [unique] index index_name on table_name(column,.. asc/desc) tablespacesql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0 maxextents 50);3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows4.creating reverse key indexessql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k next 200k pctincrease 0 maxextents 50) tablespace indx;5.create bitmap indexsql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k pctincrease 0 maxextents 50)tablespace indx;6.change storage parameter of indexsql> alter index xay_id storage (next 400k maxextents 100);7.allocating index spacesql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');8.alter index xay_id deallocate unused;第五章:约束1.define constraints as immediate or deferredsql> alter session set constraint[s] = immediate/deferred/default;set constraint[s] constraint_name/all immediate/deferred;2. sql> drop table table_name cascade constraintssql> drop tablespace tablespace_name including contents cascade constraints3. define constraints while create a tablesql> create table xay(id number(7) constraint xay_id primary key deferrablesql> using index storage(initial 100k next 100k) tablespace indx);primary key/unique/references table(column)/check4.enable constraintssql> alter table xay enable novalidate constraint xay_id;5.enable constraintssql> alter table xay enable validate constraint xay_id;第六章:LOAD数据1.loading data using direct_load insertsql> insert /*+append */ into emp nologgingsql> select * from emp_old;2.parallel direct-load insertsql> alter session enable parallel dml;sql> insert /*+parallel(emp,2) */ into emp nologgingsql> select * from emp_old;/doc/b8157a83d4d8d15abe234e1f.ht ml ing sql*loadersql> sqlldr scott/tigersql> control = ulcase6.ctlsql> log = ulcase6.log direct=true第七章:reorganizing data/doc/b8157a83d4d8d15abe234e1f.ht ml ing expoty$exp scott/tiger tables(dept,emp) file=c:emp.dmp log=exp.log compress=n direct=y/doc/b8157a83d4d8d15abe234e1f.ht ml ing import$imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y3.transporting a tablespacesql>alter tablespace sales_ts read only;$exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_tstriggers=n constraints=n$copy datafile$imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2/sles02.dbf)sql> alter tablespace sales_ts read write;4.checking transport setsql> DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);在表transport_set_violations 中查看sql> dbms_tts.isselfcontained 为true 是,表示自包含第八章: managing password security and resources1.controlling account lock and passwordsql> alter user juncky identified by oracle account unlock;/doc/b8157a83d4d8d15abe234e1f.ht ml er_provided password functionsql> function_name(userid in varchar2(30),password in varchar2(30),old_password in varchar2(30)) return boolean3.create a profile : password settingsql> create profile grace_5 limit failed_login_attempts 3sql> password_lock_time unlimited password_life_time 30sql>password_reuse_time 30 password_verify_function verify_functionsql> password_grace_time 5;4.altering a profilesql> alter profile default limitsql> failed_login_attempts 3sql> password_life_time 60;5.drop a profilesql> drop profile grace_5 [cascade];6.create a profile : resource limitsql> create profile developer_prof limit sessions_per_user 2 sql> cpu_per_session 10000 idle_time 60 connect_time 480;7. view => resource_cost : alter resource costdba_Users,dba_profiles8. enable resource limitssql> alter system set resource_limit=true;第九章:Managing users1.create a user: database authenticationsql> create user juncky identified by oracle default tablespace users temporary tablespace temp quota 10m/unlimited on data password expire [account lock|unlock] [profile profilename|default];2.change user quota on tablespacesql> alter user juncky quota 0 on users;3.drop a usersql> drop user juncky [cascade];4. monitor userview: dba_users , dba_ts_quotas第十章:managing privileges1.system privileges: view => system_privilege_map ,dba_sys_privs,session_privs2.grant system privilegesql> grant create session,create table to managers;sql> grant create session to scott with admin option;with admin option can grant or revoke privilege from any user or role;3.sysdba and sysoper privileges:sysoper: startup,shutdown,alter database open|mount,alterdatabase backup controlfile,alter tablespace begin/end backup,recover databasealter database archivelog,restricted sessionsysdba: sysoper privileges with admin option,create database,recover database until4.password file members: view:=> v$pwfile_users5.O7_dictionary_accessibility =true restriction access to view or tables in other schema6.revoke system privilegesql> revoke create table from karen;sql> revoke create session from scott;7.grant object privilegesql> grant execute on dbms_pipe to public;sql> grant update(first_name,salary) on employee to karen with grant option;8.display objectprivilege : view => dba_tab_privs, dba_col_privs9.revoke object privilegesql> revoke execute on dbms_pipe from scott [cascade constraints];10.audit record view :=> sys.aud$11. protecting the audit trailsql> audit delete on sys.aud$ by access;12.statement auditingsql> audit user;13.privilege auditingsql> audit select any table by summit by access;14.schema object auditingsql> audit lock on summit.employee by access whenever successful;15.view audit option : view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba _obj_audit_opts16.view audit result: view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_ses sion,dba_audit_statement第十一章: manager role1.create rolessql> create role sales_clerk;sql> create role hr_clerk identified by bonus;sql> create role hr_manager identified externally;2.modify rolesql> alter role sales_clerk identified by commission;sql> alter role hr_clerk identified externally;sql> alter role hr_manager notidentified;3.assigning rolessql> grant sales_clerk to scott;sql> grant hr_clerk to hr_manager;sql> grant hr_manager to scott with admin option;4.establish default rolesql> alter user scott default role hr_clerk,sales_clerk; sql> alter user scott default role all;sql> alter user scott default role all except hr_clerk; sql> alter user scott default role none;5.enable and disable rolessql> set role hr_clerk;sql> set role sales_clerk identified by commission; sql> set role all except sales_clerk;sql> set role none;6.remove role from usersql> revoke sales_clerk from scott;sql> revoke hr_manager from public;7.remove rolesql> drop role hr_manager;8.display role informationview:=>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sy s_privs,role_tab_privs,session_roles第十二章: BACKUP and RECOVERY1.v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v $sgastat2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size3. Monitoring Parallel Rollback> v$fast_start_servers , v$fast_start_transactions4.perform a closed database backup (noarchivelog)> shutdown immediate> cp files /backup/> startup5.restore to a different location> connect system/manager as sysdba> startup mount> alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';> alter database open;6.recover syntax--recover a mounted database>recover database;>recover datafile '/disk1/data/df2.dbf';>alter databaserecover database;--recover an opened database>recover tablespace user_data;>recover datafile 2;>alter database recover datafile 2;7.how to apply redo log files automatically>set autorecovery on>recover automatic datafile 4;/doc/b8157a83d4d8d15abe234e1f.ht ml plete recovery:--method 1(mounted databae)>copy c:"backup"user.dbf c:"oradata"user.dbf>startup mount>recover datafile 'c:"oradata"user.dbf;>alter database open;--method 2(opened database,initially opened,not system or rollback datafile)>copy c:"backup"user.dbf c:"oradata"user.dbf (alter tablespace offline)>recover datafile 'c:"oradata"user.dbf' or>recover tablespace user_data;>alter database datafile 'c:"oradata"user.dbf' online or>alter tablespace user_data online;--method 3(opened database,initially closed not system or rollback datafile)>startup mount>alter database datafile 'c:"oradata"user.dbf' offline;>alter database open>copy c:"backup"user.dbf d:"oradata"user.dbf>alter database rename file 'c:"oradata"user.dbf' to 'd:"oradata"user.dbf'>recover datafile 'e:"oradata"user.dbf' or recover tablespace user_data;>alter tablespace user_data online;--method 4(loss of data file with no backup and have all archive log)>alter tablespace user_data offline immediate;>alter database create datafile 'd:"oradata"user.dbf' as 'c:"oradata"user.dbf''>recover tablespace user_data;>alter tablespace user_data online5.perform an open database backup> alter tablespace user_data begin backup;> copy files /backup/> alter database datafile '/c:/../data.dbf' end backup;> alter system switch logfile;6.backup a control file> alter database backup controlfile to 'control1.bkp';> alter database backup controlfile to trace;7.recovery (noarchivelog mode)> shutdown abort> cp files> startup8.recovery of file in backup mode>alter database datafile 2 end backup;9.clearing redo log file>alter database clear unarchived logfile group 1;>alter database clear unarchived logfile group 1 unrecoverable datafile;10.redo log recovery>alter database add logfile group 3 'c:"oradata"redo03.log' size 1000k;>alter database drop logfile group 1;>alter database open;or >cp c:"oradata"redo02.log' c:"oradata"redo01.log>alter database clear logfile 'c:"oradata"log01.log';。
plsql 使用手册

PL/SQL 是Oracle 数据库中用于存储过程、函数、触发器和包等程序的编程语言。
以下是PL/SQL 使用手册的参考指南:1、连接Oracle 数据库:在开始编写PL/SQL 程序之前,您需要先连接到Oracle 数据库。
可以通过以下步骤连接到数据库:•运行PLSQL,将弹出数据库连接对话框。
•在对话框中选择要连接的Oracle 服务名,并输入用户名和密码。
•点击“OK”按钮进行连接。
2、登录信息保存功能设置:如果设置了登录信息保存功能,可以通过以下方式连接数据库,不必每次输入用户名和密码。
•进入PLSQL 后,在菜单区点击右键,出现PLSQL 配置界面。
•将“Store with password” 选中即可。
这样,第一次通过用户名/密码登录某数据库后,下次就不用再输入用户名/密码了。
3、切换数据库连接:在PLSQL 中,可以通过以下步骤切换到不同的数据库连接:•在菜单中选择“Change Database” 选项。
•在弹出的对话框中,选择要连接的数据库。
•点击“OK” 按钮完成切换。
4、编写PL/SQL 程序:在连接到数据库后,可以开始编写PL/SQL 程序。
以下是一些常见的PL/SQL 程序示例:•存储过程:用于封装复杂的SQL 查询和数据处理逻辑。
可以使用PL/SQL 编写一个或多个SQL 语句的集合,并将其封装在一个可重用的过程中。
•函数:用于计算并返回一个值。
可以编写一个或多个SQL 语句,将其封装在一个函数中,并使用输入参数来控制计算过程。
•触发器:用于在数据库中执行自动操作。
可以在特定的数据库事件(如插入、更新或删除记录)发生时触发自动执行的操作。
•包:用于封装多个PL/SQL 程序和逻辑单元。
可以将相关的存储过程、函数和数据类型封装在一个包中,以便更好地组织和管理代码。
5、执行SQL 语句:在PLSQL 中,可以使用以下步骤执行SQL 语句:•在菜单中选择“Execute” 或“Run” 选项。
plsql教程

plsql教程PL/SQL是一种与Oracle数据库一起使用的过程化编程语言。
它是操纵、定义和控制Oracle数据库对象的语言,并提供了一种编写存储过程、触发器、函数、包等数据库程序模块的方式。
PL/SQL的基本语法与SQL相似,可以执行SQL语句和存储过程的调用。
以下是一些常用的PL/SQL代码示例:1. 声明变量和常量:```DECLAREnum1 NUMBER := 10;text1 VARCHAR2(20) := 'Hello';constant1 CONSTANT NUMBER := 5;BEGIN-- 执行代码END;```2. 条件语句:```IF num1 > 0 THENNULL;ELSIF num1 = 0 THENNULL;ELSENULL;END IF;```3. 循环语句:```FOR i IN 1..5 LOOPNULL;END LOOP;WHILE num1 > 0 LOOP NULL;num1 := num1 - 1; END LOOP;LOOPNULL;EXIT WHEN num1 = 0; num1 := num1 - 1; END LOOP;```4. 异常处理:```BEGIN-- 执行代码EXCEPTIONWHEN OTHERS THEN -- 处理异常END;```5. 创建存储过程:```CREATE OR REPLACE PROCEDURE procedure_name (param1 IN NUMBER, param2 OUT VARCHAR2) IS-- 变量声明BEGIN-- 执行代码param2 := 'Hello';END;```这些只是PL/SQL语言的一部分功能和用法。
通过学习和实践,您可以掌握更多PL/SQL的知识和技巧,提高数据库编程的效率和质量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
翻译:陈拓 chentuo@2006 年 6 月16 日更多触发器概念Copyright © Oracle Corporation, 2001. All rights reserved.进度表: 时间 主题80 分钟 讲演40 分钟 练习120 分钟 总共目标完成本课程后, 您应当能够:• 创建附加的数据库触发器• 解释触发器管理规则• 实现触发器102 Copyright © Oracle Corporation, 2001. All rights reserved.本课目标在本课中,你将学习怎样创建更多地数据库触发器并学习规则触发器。
你还将学习许多应用程序触发器。
创建数据库触发器• 触发用户事件:– CREATE, ALTER 或 DROP– Logging on 或 off• 触发数据库或系统事件:– Shutting down 或 starting up 数据库– 一个指定的错误 (或任何错误) 出现103 Copyright © Oracle Corporation, 2001. All rights reserved.创建数据库触发器在编码触发器体之前,确定触发器的组建。
在系统事件上的触发器可以被定义在数据库或方案级别。
例如,一个数据库 shutdown 触发器 被定义在数据库级别。
在数据定义语言 (DDL) 语句上的触发器,或一个用户登录登出,即可以被 定义为数据库级别也可以被定义为方案级别。
在 DML 语句上的触发器被定义在指定的表或一个视图上。
一个定义在数据库级别的触发器对所有用户触发, 一个定义在方案或表级别的触发器只有当触 发级别包括该方案或表时才触发。
触发事件可能引起触发器触发:· 在数据库或方案中的一个对象上一个数据定义语句· 一个指定的用户 (或任何用户) 登录或登出· 一个数据库关闭或启动· 一个指定的或任何错误出现在 DDL 语句上创建触发器• 语法:CREATE [OR REPLACE] TRIGGER trigger_nametiming[ddl_event1 [OR ddl_event2 OR ...]]ON {DATABASE|SCHEMA}trigger_body104 Copyright © Oracle Corporation, 2001. All rights reserved.创建触发器语法DDL 事件 可能的值CREATE无论何时一个 CREATE 语句添加一个新的数据库对象到数据字典中时,引起 Oracle 服务器激发触发器ALTER无论何时一个 ALTER 语句修改一个在数据字典中的数据库对象时,引起 Oracle 服务器激发触发器DROP无论何时一个 DROP 语句删除一个在数据字典中的数据库对象时,引起Oracle 服务器激发触发器触发器体代表一个完整的 PL/SQL 块。
你可以为在 DA TABASE 或 SCHEMA 上的那些事件创建触发器。
你也可以为触发器的时机指定 BEFORE 或 AFTER。
如果创建的对象是簇、函数、索引、包、过程、角色、序列、同义词、表、表空间、触发器、类型、 视图或用户,DDL 触发器触发。
105 Copyright © Oracle Corporation, 2001. All rights reserved.在系统事件上创建触发器CREATE [OR REPLACE] TRIGGER trigger_nametiming[database_event1 [OR database_event2 OR ...]]ON {DATABASE|SCHEMA}trigger_body 创建触发器语法数据库事件 可能的值AFTER SERVERERROR 无论何时一个服务器错误信息被记入日志时,引起 Oracle 服务器激发触发器AFTER LOGON 无论何时一个用户登录到数据库时,引起 Oracle 服务器激发触发器BEFORE LOGOFF 无论何时一个用户登出数据库时,引起 Oracle 服务器激发触发器AFTER STARTUP 无论何时数据库被打开时,引起 Oracle 服务器激发触发器BEFORESHUTDOWN无论何时数据库被关闭时,引起 Oracle 服务器激发触发器 除了 SHUTDOWN 和 STARTUP ,你可以为在 DA TABASE 或 SCHEMA 上的这些事件创建触发 器,这些触发器只用于数据库。
LOGON和 LOGOFF触发器例子CREATE OR REPLACE TRIGGER logon_trigAFTER LOGON ON SCHEMABEGININSERT INTO log_trig_table(user_id, log_date, action)VALUES (USER, SYSDATE, ’Logging on’);END;/CREATE OR REPLACE TRIGGER logoff_trigBEFORE LOGOFF ON SCHEMABEGININSERT INTO log_trig_table(user_id, log_date, action)VALUES (USER, SYSDATE, ’Logging off’);END;/106 Copyright © Oracle Corporation, 2001. All rights reserved.LOGON 和 LOGOFF 触发器例子你可以创建该触发器用来监视你通常怎样登录和登出, 或你想要写一个监视你登录时间长度的 报告。
当你指定 ON SCHEMA 时,触发器对于指定的用户触发。
如果你指定 ON DA TABASE, 触发器对于所有的用户触发。
CALL语句CREATE [OR REPLACE] TRIGGER trigger_nametimingevent1 [OR event2 OR event3]ON table_name[REFERENCING OLD AS old | NEW AS new][FOR EACH ROW][WHEN condition]CALL procedure_nameCREATE OR REPLACE TRIGGER log_employeeBEFORE INSERT ON EMPLOYEESCALL log_execution/107 Copyright © Oracle Corporation, 2001. All rights reserved.CALL 语句一个 CALL 语句使得你能够调用一个存储过程,而不是在触发器中调用一个它自己的 PL/SQL 体。
该过程可以在 PL/SQL、C 或 Java 中实现。
该调用可以引用触发器属性 :NEW 和 :OLD 作为参数,如下面的例子:CREATE TRIGGER salary_checkBEFORE UPDATE OF salary, job_id ON employeesFOR EACH ROWWHEN (NEW.job_id <> ’AD_PRES’)CALL check_sal(:NEW.job_id, :NEW.salary)/注:在 CALL 语句的末尾没有分号。
在上面的例子中,触发器调用过程 check_sal。
该过程用 JOBS 表中的用于新 job ID 的薪金 范围比较新的薪金。
108 Copyright © Oracle Corporation, 2001. All rights reserved.从变化的表中读数据……触发器事件 被触发的表/变化的表 3400 EMPLOYEES 表 UPDATE employeesSET salary = 3400WHERE last_name = ’Stiles’;BEFORE UPDATE 行CHECK_SALARY触发器 失败规则管理触发器用触发器读和写对于特定的规则是对象。
该限制只用于行触发器,除非一个语句触发器作为 ON DELETE CASCADE 的结果被触发变化的表 (Mutating Table)一个变化的表是当前正在被 UPDA TE 、DELETE 或 INSERT 语句修改的表。
或者是一个可能 需要由一个声明 DELETE CASCADE 引用完整性动作的影响被更新的表。
不考虑表对于 STA TEMENT 触发器的变化。
被触发的表本身是一个变化中的表,以及任何用 FOREIGN KEY 约束引用它的表也是变化中 的。
该约束防止一个行触发器看到数据集的不一致。
109Copyright © Oracle Corporation, 2001. All rights reserved. 变化中的表:例子CREATE OR REPLACE TRIGGER check_salaryBEFORE INSERT OR UPDATE OF salary, job_idON employeesFOR EACH ROWWHEN (NEW.job_id <> ’AD_PRES’)DECLARE v_minsalary employees.salary%TYPE;v_maxsalary employees.salary%TYPE;BEGINSELECT MIN(salary), MAX(salary)INTO v_minsalary, v_maxsalaryFROM employeesWHERE job_id = :NEW.job_id; IF :NEW.salary < v_minsalary OR:NEW.salary > v_maxsalary THENRAISE_APPLICATION_ERROR(20505,’Out of range’);END IF;END;/变化的表:例在例子中 CHECK_SALARY 触发器,参与保证无论何时一个新雇员被添加到 EMPLOYEES 表中或一个现有雇员的薪金或 job ID 改变时,雇员的薪金落在对于雇员的工作已建立的薪金范围 之中。
当一个雇员的记录被更新时, CHECK_SALARY 触发器对于被更新的每一行被触发。
触发器 代码查询的表与被更新的相同的表。
因此可以说,EMPLOYEES 表是变化的表。
变化中的表:例子UPDATE employeesSET salary = 3400WHERE last_name = ’Stiles’;1010 Copyright © Oracle Corporation, 2001. All rights reserved.变化的表:例 (续)尝试从变化的表读取数据。