oracle从入门到精通_Oracle开发基础PL/SQL块简介

e7742195493f0a36849d1188cf689e6f.gif

---参考:《Oracle 11g SQL和PLSQL从入门到精通

一:PL/SQL块结构

二:PL/SQL块分类

三:子程序(过程、函数、包、触发器)

5d2bc928b3a35bee4cc5ca457388717b.gif

一:PL/SQL块结构

PL/SQL块结构

PL/SQL块由三个部分组成:定义部分、执行部分、异常处理部分。

定义部分:用于定义常量、变量、游标、异常、复杂数据类型等(可选)。

执行部分:用于实现应用模块功能,该部分包含了要执行PL/SQL语句和SQL语句(必选)。

异常处理部分:用于处理执行部分可能出现的运行错误(可选)。

PL/SQL块基本结构如下:

DECLARE  /*   * 定义部分   */   BEGIN     /*      *执行部分      */    EXCEPTION      /*       *异常处理部分       */    END; /*块结束标记*/

示例1:只包含执行部分的PL/SQL块

SQL> conn cjc/cjcConnected.SQL> set serveroutput onSQL> begin     2    dbms_output.put_line('Hello,everyone');  3  end;  4  /Hello,everyonePL/SQL procedure successfully completed.

示例2:包含定义部分和执行部分的PL/SQL块

SQL> set serveroutput onSQL> set verify offdeclare  v_ename varchar2(5);begin  select ename into v_ename from scott.emp where empno = &no;  dbms_output.put_line('ename is:' || v_ename);end;/Enter value for no: 7788ename is:SCOTT

示例3:包含定义部分执行部分和异常处理部分的PL/SQL块

SQL> set serveroutput onSQL> set verify offdeclare  v_ename varchar2(5);begin  select ename into v_ename from scott.emp where empno = &no;  dbms_output.put_line('ename is:' || v_ename);exception  when no_data_found then    dbms_output.put_line('Please enter the correct employee number!');end;/Enter value for no: 6666Please enter the correct employee number!

deb9567390b199121cca8c743faa2267.gif

二:PL/SQL块分类

匿名块、命名块、子程序、触发器。

1 匿名块:没有名称的PL/SQL块。

示例:

SQL> set serveroutput onSQL> set verify offdeclare  v_avgsal number(6, 2);begin  select avg(sal) into v_avgsal from emp where deptno = &no;  dbms_output.put_line('The average wage is:' || v_avgsal);end;/Enter value for no: 10The average wage is:2916.67

2.命名块指具有特定名称标识的PL/SQL块。

SQL> set serveroutput onSQL> set verify off<>declare  v_deptno number(2);  v_dname  varchar2(10);begin  <>  begin    select deptno      into v_deptno      from emp     where lower(ename) = lower('&name');  end; --<>  select dname into v_dname from dept where deptno = v_deptno;  dbms_output.put_line('New dname is:' || v_dname);end; --<>/Enter value for name: scottNew dname is:RESEARCH

3b14cce3e058e41e4263379e13c2e6d0.gif

三:子程序(过程、函数、包、触发器)

(1)过程:用于执行特定操作

示例:

create procedure update_sal(name varchar2, newsal number) isbegin  update emp set sal = newsal where lower(ename) = lower(name);end;/SQL> exec update_sal('scott',50000)SQL> commit;SQL>select sal from emp as of timestamp (systimestamp - interval '5' minute) where ename='SCOTT'unionselect sal from emp where ename='SCOTT';       SAL----------      3000     50000

(2)函数

函数用于返回特定数据。

当建立函数是,函数头部必须包含return子句,并且函数体必须包含return语句。

示例:取得雇员全年收入函数annual_income。

SQL>create function annual_income(name varchar2) return number is  annual_salary number(7, 2);begin  select sal * 12 + nvl(comm, 0)    into annual_salary    from emp   where lower(ename) = lower(name);  return annual_salary;end;  /SQL> select annual_income('scott') as Annual_salary from dual;ANNUAL_SALARY-------------36000

(3)包

包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成。

包规范用于定义公用的常量、变量、过程和函数。

包体则用于实现包规范中的过程和函数。

下面建立包含过程update_sal和函数annual_income的包emp_pkg为例。

示例:

SQL>create package emp_pkg is  procedure update_sal(name varchar2, newsal number);  function annual_income(name varchar2) return number;END;/SQL>create package body emp_pkg is  procedure update_sal(name varchar2, newsal number) is  begin    update emp set sal = newsal where lower(ename) = lower(name);  end;  function annual_income(name varchar2) return number is    annual_salary number(7, 2);  begin    select sal * 12 + nvl(comm, 0)      into annual_salary      from emp     where lower(ename) = lower(name);    return annual_salary;  end;end;/SQL> exec emp_pkg.update_sal('scott',5000);SQL> select emp_pkg.annual_income('scott') from dual;EMP_PKG.ANNUAL_INCOME('SCOTT')------------------------------ 60000SQL> rollback;

(4)触发器

触发器是指被隐含执行的PL/SQL块。

当触发了与触发器相关的事件之后,Oracle会隐含执行触发器的PL/SQL块。

SQL> create trigger update_cascade  after update of deptno on dept  for each rowbegin  update emp set deptno = :new.deptno where deptno = :old.deptno;end;/SQL> update dept set deptno=50 where dname='ACCOUNTING';SQL> select ename from emp where deptno=50;ENAME----------CLARKKINGMILLERSQL> rollback;SQL> select ename from emp where deptno=50;no rows selected

更多数据库相关学习资料,可以查看我的ITPUB博客,网名chenoracle

http://blog.itpub.net/29785807/

5cbd2a9f4571431eb612ce97b47a8231.gif

内容简介   本是专门为oracle应用开发人员提供的sqlpl/sql编程指南。通过学习本,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql的方法外,本还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本不仅适合sqlpl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sqlpl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sqlpl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案
谢谢大家的支持,我会陆续上传相关电子 由于体积较大,本分两卷压缩,请都下载完再解压! Oracle 11g SQLPL SQL从入门到精通 pdf格式电子 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQLPL SQL从入门到精通 pdf格式电子 下载(二) http://download.csdn.net/source/3268312 内容简介   本是专门为oracle应用开发人员提供的sqlpl/sql编程指南。通过学习本,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql的方法外,本还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本不仅适合sqlpl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sqlpl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sqlpl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值