过程(procedure)和函数(function):
过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。过程是作为一个独立执行语句调用的:
创建过程的语法如下:
CREATE[ OR REPLACE] PROCEDURE [schema.] procedure_name
[arg1[in | out | in out] ........]
{AS|IS}
declaration_section
BEGIN
executable_section
[ EXCEPTION
exception_section ]
END [procedure_name]
IN 表示在调用过程的时候,实际参数的取值被传递给该过程,形式参数被认为是只读的,当过程结束时,控制会返回控制环境,实际参数的值不会改变。
OUT 在调用过程时实际参数的取值都将被忽略,在过程内部形式参数只能是被赋值,而不能从中读取数据,在过程结束后形式参数的内容将被赋予实际参数。
IN OUT 这种模式是IN和OUT的组合;在过程内部实际参数的值会传递给形式参数,形势参数的值可读也可写,过程结束后,形势参数的值将赋予实际参数
eg:
CREATE OR REPLACE PROCEDURE pro_hello(
p_name OUT s_emp.first_name%TYPE,
p_id IN s_emp.id%TYPE := 1)
AS
v_fname s_emp.first_name%TYPE;
BEGIN
--p_id := 10;
SELECT first_name
INTO p_name
FROM s_emp
WHERE id = p_id;
DBMS_OUTPUT.PUT_LINE('p_name: ' || p_name);
--p_name := v_fname;
--DBMS_OUTPUT.PUT_LINE('hello, ' || v_fname);
END;
函数:
CREATE [ OR REPLACE] FINCTION [schema.]function_name
[parameter_list]
RETURN returning_datatype
{AS|IS}
declaration_section
BEGIN
executable_section
[ EXCEPTION]
exception_section ]
END [procedure_name]
在执行部分函数必须有一个或多个return语句。
在创建函数中可以调用单行函数和组函数,例如:
CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER)
RETURN NUMBER
IS
pi NUMBER=ACOS(-1);
RadiansPerDegree NUMBER;
BEGIN
RadiansPerDegree=pi/180;
RETURN(SIN(DegreesIn*RadiansPerDegree));
END
eg:
CREATE OR REPLACE FUNCTION fun_getSalary(
p_id s_emp.id%TYPE,
p_mon NUMBER)
RETURN s_emp.salary%TYPE IS
v_base s_emp.salary%TYPE;
v_pct s_emp.commission_pct%TYPE;
v_saleAmt s_ord.total%TYPE;
v_sal s_emp.salary%TYPE;
BEGIN
SELECT salary, commission_pct
INTO v_base, v_pct
FROM s_emp
WHERE id = p_id;
IF v_pct IS NULL THEN
RETURN v_base;
END IF;
SELECT SUM(total)
INTO v_saleAmt
FROM s_ord
WHERE sales_rep_id = p_id
AND to_number(to_char(date_ordered,'mm')) = p_mon;
IF v_saleAmt IS NULL THEN
RETURN v_base;
END IF;
v_sal := v_base + v_saleAmt * (v_pct/100);
RETURN v_sal;
END;
- 大小: 89.3 KB
分享到:
相关推荐
- 子程序:函数(FUNCTION)和过程(PROCEDURE),用于封装代码逻辑。 - 异常处理:通过`EXCEPTION`关键字定义异常处理逻辑,例如`WHEN OTHERS THEN`可以捕获所有未明确处理的异常。 2. PL/SQL常用算法: - 排序...
PLSQL Developer中存储过程、存储函数和触发器的编写和管理 PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将...
3. 子程序:PLSQL支持过程(PROCEDURE)和函数(FUNCTION)的定义,可以封装代码逻辑,提高代码复用性。 二、PLSQL的块结构 PLSQL代码以块的形式存在,包括声明部分、执行部分和异常处理部分。基本块结构如下: `...
实验中没有给出创建过程和函数的具体例子,但通常我们会用CREATE PROCEDURE或CREATE FUNCTION语句定义它们。 最后,包是将相关的过程、函数和其他数据库对象组合在一起的一种方式,有助于组织代码并提供封装。包...
- 它支持变量、常量、条件语句(IF-THEN-ELSE)、循环(FOR, WHILE)、子程序(PROCEDURE, FUNCTION)以及异常处理。 - PLSQL允许创建存储过程、触发器、游标,这些是数据库中的可重用代码块,能提高性能并减少...
2. **执行部分**:这是PLSQL块的主要部分,包含了各种SQL语句和过程式控制结构,如循环、条件语句等。例如: ```sql BEGIN FOR i IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE(i); END LOOP; END; ``` 3. **异常处理...
存储过程是在数据库中存储的一组预编译的 SQL 语句和 PL/SQL 块。 ```plsql CREATE OR REPLACE PROCEDURE update_salary(p_employee_id NUMBER, p_new_salary NUMBER) IS BEGIN UPDATE employees SET salary = p_...
PLSQL(Procedural Language/Structured Query Language)是Oracle数据库中的一个强大工具,它结合了SQL的查询功能和过程性编程语言的特点,使得数据库管理、数据处理和应用程序开发更为便捷。"PLSQL Developer"是一...
- 用于从过程或函数中返回值。 **7. 顺序控制语句** - 如GOTO语句,用于跳转到指定位置继续执行。 #### 五、存储过程模块 **1. 支持的参数** - 存储过程可以接受各种类型的参数,包括数值型、字符型等。 **2. ...
- 过程和函数是可重用的代码模块,过程不返回值,而函数返回一个值。 - 示例: ```plsql -- 过程 CREATE OR REPLACE PROCEDURE my_procedure (p_param IN NUMBER) IS BEGIN -- 执行代码 END my_procedure; ...
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一种编程语言,它结合了SQL的查询功能和过程式编程语言的控制结构。在PL/SQL中,存储过程是一种预编译的代码单元,可以包含SQL语句、...
Oracle PL/SQL是Oracle数据库系统中的一个强大工具,它结合了SQL的数据操作能力和...对于初学者,可以参考《Oracle PLSQL存储过程以及函数编写.pdf》和《本地规范实例详解.pdf》等资料,结合实际练习来巩固理论知识。
PLSQL的主要组件包括块(Block)、表单(Form)、触发器(Trigger)、存储过程(Stored Procedure)、函数(Function)和包(Package)。块是PLSQL的基本结构,由BEGIN、END关键字包围,可以包含声明、执行和异常...
- CREATE FUNCTION和CREATE PROCEDURE用于创建自定义函数和过程。 - RETURN语句在函数中用于返回值。 - 使用EXECUTE语句调用已定义的函数或过程。 5. **触发器**: - 触发器是一种在特定数据库事件(如INSERT、...
例如,实例2和实例3展示了如何定义一个简单的PLSQL块,包括变量声明、查询和异常处理。 2. **变量声明**: 变量在PLSQL中使用`DECLARE`关键字进行声明,如`v_ename VARCHAR2(5)`和`v_sal emp.sal%TYPE`。`emp.sal%...
此外,还有BEGIN-END块用于封装代码,PROCEDURE和FUNCTION用于创建自定义函数和过程。 5. 游标和PLSQL记录: 游标是PLSQL处理查询结果的关键工具,允许我们逐行处理查询结果。PLSQL记录则是一种自定义的数据结构,...
在Oracle数据库中,**存储过程**是一组预编译的SQL语句和过程式PL/SQL代码块,存储在数据库服务器上,并作为一个单元执行。它能够接收输入参数、执行复杂的业务逻辑,并且可以返回多个输出值或影响数据库状态。 **...
函数和过程是PLSQL中的重要概念,它们可以封装复杂的操作并重复使用。函数返回一个值,而过程不返回值,但两者都可以接受参数并有局部变量。例如: ```sql CREATE OR REPLACE FUNCTION add_numbers(a NUMBER, b ...
包是将相关的变量、常量、过程和函数组合在一起的逻辑单元,可以提高代码的组织性和复用性。例如: ```sql CREATE OR REPLACE PACKAGE pkg_name AS -- 定义常量和变量 CONSTANT const_value CONSTANT_TYPE := ...