1.pl/sql规范

标识符号的命名规范

  1. 定义变量,用 v- 作为前缀 v-sal

    2)定义常亮, 用 c- 作为前缀 c-rate
  2. 定义游标,用 _cursor作为后缀 emp_cursor
  3. 定义例外,用 e_ 作为前缀 e_error

2.块(block)机构示意图

pl/sql 块有三部分构成,定义部分,执行部分,例外处理部分

  1. declear
  2. /*定义部分 --- 定义常量、变量、游标、例外、复杂属于类型*/
  3. begin
  4. /*执行部分 -- 要执行的pl/sql 语句 和 sql语句*/
  5. exception
  6. /*例外处理部分 --- 处理运行的各种错误*/
  7. end;

其中执行部分是必须的,定义部分和例外处理部分是可选的.

实例1-只包含执行部分的pl/sql块

  1. set serveroutput on; // on 和 off 打开与关闭内容是否输出
  2. begin
  3. dbms_output.put_line('hello world');
  4. end;

dbms_output 是oracle提供的包,包里面包含一些过程,如put_line

实例2 - 包含定义部分和执行部分的pl/sql块

  1. declare
  2. v_name varchar2(5); --定义字符串变量
  3. begin
  4. select ename into v-ename form emp where empno=&no;
  5. dbms_output.put_line('雇员名:' || v_name);
  6. end;
  7. /

&no 表示控制台输入,

into v_ename 将查出来的 ename 赋值给 v_ename

|| 类似于字符串拼接

  1. declare
  2. v_ename varchar2(5);
  3. v_sal number(7,2);
  4. begin
  5. --执行部分
  6. select ename,sal into v_ename,v_sal from emp where empno = &aa;
  7. --在控制台显示
  8. dbms_outln.put_line('用户名是:'||v_ename || '工资:' || v_sal);
  9. end;
  10. /

实例3-包含定义部分和执行部分和例外处理部分

为避免pl/sql程序的运行错误,提高健壮性,应该对可能的错误进行处理

(1) 比如在实例2中,如果输入了不存在的雇员号,应当做例外处理

(2) 有时候出现异常,希望用另外的逻辑处理

oracle 事先定义了一些异常,no_data_found 就是找不到数据的例外

  1. declare
  2. v_ename varchar2(5);
  3. v_sal number(7, 2);
  4. begin
  5. --执行部分
  6. select ename, sal into v_ename, v_sal from emp where empno = &aa;
  7. --在控制台显示
  8. dbms_outln.put_line('用户名是:' || v_ename || '工资:' || v_sal);
  9. --异常处理
  10. exception
  11. when no_data_found then
  12. dbms_output.put_line('编号输入有误');
  13. end;
  14. /

3.过程

  1. -- 案例4
  2. create procedure sp_pro3(spName, varchar, newSal number) is
  3. begin
  4. -- 执行部分,根据用户名修改工资
  5. update emp set sal = newSal where ename == spName;
  6. end;
  7. /
  8. -- 调用存储过程 exec 或者 call
  9. exec sp_pro3('jack',9899);

4.函数

用于返回特定的数据,当建立函数时,在函数头部必须包含return子句,而在函数体内必须包含return 语句返回的数据

  1. --输入雇员姓名,返回该雇员的信息
  2. create function sp_fun2(spName varchar2) return number is
  3. yearSal number(7, 2); -- 七位数两位小数
  4. begin
  5. -- 执行部分
  6. select sal * 12 + nvl(comm, 0) * 12 into yearSal from emp where ename = spName;
  7. return yearSal;
  8. end;
  9. /

在sqlplus 中调用函数:

  1. sql>val income number
  2. sql>call sp_cun2('jack') into:income
  3. sql>print income

5.包

(1) 使用 create package 来创建包

  1. create package sp_package is
  2. procedure update_sal(name varchar2, newsal number);
  3. function annual_income(name varchar2) return number;
  4. end;
  5. /

包的规范只包含了过程和函数的说明,但是没有过程和函数实现。

包体用于实现包规范

在pl/sql packages 里查看

(2) 建立包体使用 create package body 命令

  1. -- sp_package 实现包体
  2. create package body sp_package is
  3. procedure update_sal(name varchar2, newsal number) is
  4. begin
  5. update emp set sal = newsal where ename = name;
  6. end;
  7. function annual_income(name varchar2) return number is
  8. annual_salary number;
  9. begin
  10. select * sal * 12 + nvl(comm, 0)
  11. into annual_salary
  12. from emp
  13. where ename = name;
  14. return annual_salary;
  15. end;
  16. end;

然后就可以调用了:

  1. sql> exec sp_paackage.update_sal('jack',200);

当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其他方案的包,还需要在包名前加方案名。

如:

  1. SQL> call sp_package.update_sal('jack',200)

6.触发器

触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件包括insert,update,delete语句,而触发的操作实际就是一个 pl/sql块.

可以使用 create trigger 来建立触发器。

可以用来维护数据库的安全和一致性。

PL/SQL规范、块、过程、函数、包、触发器的更多相关文章

  1. Oracle基础(五)pl/sql进阶(分页过程)

    编写分页过程         通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标.怎样在java中调用等内容的学习. 1.无返回值 ...

  2. SQLPLUS执行PL/SQL语句块

    1.首先登录Oracle HR schema: 2.对于PL/SQL程序,分号表示语句的结束:而使用 "."  号表示整个语句块的结束,也可以省略.按回车键后,该语句块不会执行,即 ...

  3. 同样的一句SQL语句在pl/sql 代码块中count 没有数据,但是直接用SQl 执行却可以count 得到结果

    pl/sql 代码块: SELECT count(distinct t2.so_nbr) INTO v_count2 FROM KFGL_YW_STEP_qd t2 WHERE t2.partitio ...

  4. PL/SQL编程-块编程

    (1). 简单分类                           |————过程(存储过程)                           |                        ...

  5. PL/SQL之存储过程和函数

    1.创建存储过程 .1语法: CREATE[OR REPLACE] PROCEDURE [schema.] procedure_name[(argument[{IN|OUT|IN OUT}] data ...

  6. oracle 中使用 pl/sql代码块

    1.写匿名块,输入三角形三个表的长度.在控制台打印三角形的面积. declare -- (p=(a+b+c)/2) --声明三角形的面积 三条边 的 v_a number (10,2):=&n ...

  7. oracle pl/sql远程连接过程

    之前没用过oracle,现在公司用到就记录下安装过程吧.安装PL/SQL工具,安装oracle11G工具.打开PL/SQL 进行配置.

  8. pl/sql基础知识—过程快速入门

    n  过程 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数可以将执行部分的数据传递 ...

  9. PL/SQL学习笔记之函数

    一:函数 函数与过程的最大不同就是,函数有返回值.适用于需要返回结果的场景. 二:创建函数 CREATE [OR REPLACE] FUNCTION function_name [(parameter ...

随机推荐

  1. Win10新建分区

    今天忽然觉得将系统分为四个盘,有点无法将分类分开,所以增加了几个分区: 1.windows+X键在弹出的对话框中选择磁盘管理,进入如下界面: 2.如果你想从某个盘分出一些内存建立一个新的分区,就在这个 ...

  2. jquery监控input输入框的变化

    (function($) { $.fn.watch = function(callback) { return this.each(function() { //缓存以前的值 $.data(this, ...

  3. linux服务器时间自动同步

    最常用的是 rdate 服务 安装(centOs为例): yum install -y rdate 用法: rdate -s time-b.nist.gov 执行完以上方法时间就同步了.有的服务器隔一 ...

  4. js数组与字符串相互转换

    一.数组转字符串(将数组元素用某个字符连接成字符串) var a, b;a = new Array(0,1,2,3,4);b = a.join("-"); 二.字符串转数组(将字符 ...

  5. java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)

    倒计时程序 涉及到的东西: javafx简单的界面,布局,按钮,文本框,事件响应 java.util.Timer,用于定时 SimpleDateFormat用于在String和Date之间转换. ja ...

  6. 亲测,很有效的忽略SSL证书方法

    1.在httpclient发起请求时,有时会出现下面这种情况 你的日志中出现有关SSL的异常,javax.net.ssl.SSLPeerUnverifiedException: peer not au ...

  7. hdu 1394 逆序数(线段树)

    http://acm.hust.edu.cn/vjudge/problem/15764 http://blog.csdn.net/libin56842/article/details/8531117 ...

  8. FTP FileZilla Server 本地加密C# 实现

    最近公司要做一个资料管理模块,因系统是C/S架构,原来小文件都是直接使用7Z压缩后保存到SQL Server数据库 而资料管理模块也就是文件上传,下载加权限管理,考虑文件较多,还可能比较大,所以打算在 ...

  9. 前端之CSS——CSS选择器

    一.CSS介绍 为什么需要CSS(CSS的作用)? 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当HTML内容非常多时,就会定义很多重复的样式属性,并且修改 ...

  10. 【代码笔记】JTable 、TableModel的使用3

    在java中插入Table,并通过TableModel插入表格初始化状态后,如果需要第一行标题栏进行重命名,直接利用TableModel接口去实现列名修改,在图形显示中是无法实现的. 这里需要用到 J ...