首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

坐公交车,美丽女警亲自去抓坏人

最下方

PL/SQL块分为匿名块与命名块,命名块又包含子程序、包和触发器。

过程和函数统称为PL/SQL子程序,我们可以将商业逻辑、企业规则写成过程或函数保存到数据库中,以便共享。

过程和函数均存储在数据库中,并通过参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据。

1. 存储过程概念

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中。经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

2. 创建过程

语法:

1 CREATE [ OR REPLACE ] PROCEDURE [ schema. ] procedure_name

2 [ ( parameter_declaration [, parameter_declaration ]... ) ]

3 [ invoker_rights_clause ]

4 { IS AS }

5 { [ declare_section ] body call_spec EXTERNAL} ;

说明:

procedure_name:过程名称。

parameter_declaration:参数声明,格式如下:

parameter_name [ [ IN ] datatype [ { := DEFAULT } expression ]

{ OUT IN OUT } [ NOCOPY ] datatype IN:输入参数。

OUT:输出参数。

IN OUT:输入输出参数。

invoker_rights_clause:这个过程使用谁的权限运行,格式:

AUTHID { CURRENT_USER DEFINER }declare_section:声明部分。

body:过程块主体,执行部分。

一般只有在确认procedure_name过程是新过程或是要更新的过程时,才使用OR REPALCE关键字,否则容易删除有用的过程。

示例1:

1 CREATE PROCEDURE remove_emp (employee_id NUMBER) AS

2 tot_emps NUMBER;

3 BEGIN

4 DELETE FROM employees

5 WHERE employees.employee_id = remove_emp.employee_id;

6 tot_emps := tot_emps - 1;

7 END;

示例2:

1 CREATE OR REPLACE PROCEDURE insert_emp(

2 v_empno in employees.employee_id%TYPE,

3 v_firstname in employees.first_name%TYPE,

4 v_lastname in employees.last_name%TYPE,

5 v_deptno in employees.department_id%TYPE

6 )

7 AS

8 empno_remaining EXCEPTION;

9 PRAGMA EXCEPTION_INIT(empno_remaining, -1);

10 BEGIN

11 INSERT INTO EMPLOYEES(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE,DEPARTMENT_ID)

12 VALUES(v_empno, v_firstname,v_lastname, sysdate, v_deptno);

13 DBMS_OUTPUT.PUT_LINE(\\\\'插入成功!\\\\');

14 EXCEPTION

15 WHEN empno_remaining THEN

16 DBMS_OUTPUT.PUT_LINE(\\\\'违反数据完整性约束!\\\\');

17 DBMS_OUTPUT.PUT_LINE(SQLCODE\\\\'---\\\\'SQLERRM);

18 WHEN OTHERS THEN

19 DBMS_OUTPUT.PUT_LINE(SQLCODE\\\\'---\\\\'SQLERRM);

20 END;

3. 使用过程参数

当建立过程时,既可以指定过程参数,也可以不提供任何参数。

过程参数包括输入参数、输出参数和输入输出参数,其中输入参数(IN)用于接收调用环境的输入数据,输出参数(OUT)用于将输

本号回复:公交车

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180112G0WORR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券