当前位置:文档之家› oracle函数存储过程教程

oracle函数存储过程教程


declare param1 number:=25; param2 number:=35; begin swap(param1, param2); dbms_output.put_line('param1 = ' || param1); dbms_output.put_line('param2 = ' || param2); end;
名称表示法: 名称表示法:
begin update_students(in_name=>'柳青 in_age=>19); 柳青', 柳青 end;
8.2.7
存储过程的参数——参数的默认值 参数的默认值 存储过程的参数
有时,存储过程的参数有很多个。对于用户来说, 有时,存储过程的参数有很多个。对于用户来说,部 分参数并非必需,那么, 分参数并非必需,那么,在定义存储过程时应该为可选参数 设定默认值,以允许用户不为该参数传值。需要注意的是, 设定默认值,以允许用户不为该参数传值。需要注意的是, 默认值是仅对IN参数而言 参数而言, 默认值是仅对 参数而言,OUT和IN OUT参数没有默认值 和 参数没有默认值 范例8-17演示了如何使用 参数的默认值。 演示了如何使用IN参数的默认值 。范例 演示了如何使用 参数的默认值。
8.1.1 函数简介
1.函数与功能的划分 . 2.函数的参数 . 3.函数的返回值 .
8.1.2
1.创建函数 .
创建函数
create or replace function get_hello_msg return varchar2 as begin return 'hello world'; end get_hello_msg;
3.执行存储过程 .
execute update_students;
存储过程的参数——IN参数 IN参数 8.2.3 存储过程的参数 IN
IN参数,顾名思义,是指传入参数,即只进不出的参 参数,顾名思义,是指传入参数, 参数 它由调用者传递给存储过程之后, 数。它由调用者传递给存储过程之后,存储过程在执行过程 无论怎样使用该参数,都无法改变该参数的值。 中,无论怎样使用该参数,都无法改变该参数的值。该参数 对于存储过程来说,是只读的。例如, 对于存储过程来说,是只读的。例如,在更新学生信息的存 储过程update_stduents中,可以传入一个年龄参数,用以 储过程 中 可以传入一个年龄参数, 标识需要将学生年龄ቤተ መጻሕፍቲ ባይዱ改为多少岁。 标识需要将学生年龄修改为多少岁。
create or replace procedure update_students(in_age in number) as begin update students set student_age = in_age; --- in_age := in_age + 10; commit; end update_students;
8.2.5
存储过程的参数——IN OUT参数 IN OUT参数 存储过程的参数
IN OUT参数既可以作为输入参数,也可以作为输出参数。因此,IN OUT参数一 参数既可以作为输入参数, 参数既可以作为输入参数 也可以作为输出参数。因此, 参数一 般用于对参数的值进行处理,并处理结果输出。一个典型实例就是交换两个变量的值。 般用于对参数的值进行处理,并处理结果输出。一个典型实例就是交换两个变量的值。 create or replace procedure swap(in_out_param1 in out number, in_out_param2 in out number) as begin declare param number; begin param := in_out_param1; in_out_param1 := in_out_param2; in_out_param2 := param; end; end;
select object_name, object_type, status from user_objects where lower(object_name) = 'update_students' select * from user_source where lower(name) = 'update_students'
2.在数据字典中查看函数的信息 .
select object_name, object_type, status from user_objects where lower(object_name) = 'get_hello_msg'
3.查看函数的返回值 .
set serverout on; declare msg varchar2(20); begin msg := get_hello_msg; dbms_output.put_line(msg); end;
8.1.4 函数的参数
节中创建的函数get_hello_msg是无参数函数,本节将演 是无参数函数, 在8.1.2节中创建的函数 节中创建的函数 是无参数函数 示带参数函数的创建和使用。 示带参数函数的创建和使用。
create or replace function get_tax(p_salary number) return number as begin declare tax_salary number; begin tax_salary := p_salary - 2000; if tax_salary<=0 then return 0; end if; return tax_salary*5/100; end end get_tax
8.1
函数
函数是Oracle数据库中常用对象之一,与其他编程语 数据库中常用对象之一, 函数是 数据库中常用对象之一 言的函数一样, 中的函数也必须返回一个值。 言的函数一样,Oracle中的函数也必须返回一个值。这也是 中的函数也必须返回一个值 函数区别于存储过程的重要特征。 函数区别于存储过程的重要特征。
存储过程的参数——参数顺序 8.2.6 存储过程的参数 参数顺序
像其他编程语言一样, 像其他编程语言一样,存储过程的参数顺序同样重要 在以上范例中, 。在以上范例中,所有参数在调用时的值都是按照顺序分配 给存储过程。那么顺序就显得格外重要,如果顺序颠倒, 给存储过程。那么顺序就显得格外重要,如果顺序颠倒,不 仅得不到正确结果,而且有可能返回不可预知的错误。 仅得不到正确结果,而且有可能返回不可预知的错误。
8.1.6 典型函数举例
行转列问题是一个常见的问题, 行转列问题是一个常见的问题,即将多行数据转换为 一列。例如,在学生表中,存储了很多学生资料, 一列。例如,在学生表中,存储了很多学生资料,现欲获得 所有学生的姓名列表, 所有学生的姓名列表,常见做法是将所有学生姓名串联起来 即多行转一列。 范例8-7】 ,即多行转一列。【范例 】 select get_student_string() from dual
create or replace procedure update_students(in_age in number, out_age out number) as begin update students set student_age = in_age; select student_age into out_age from students where student_id = 1; commit; end update_students; declare updated_age number; begin update_students(20, updated_age); dbms_output.put_line(updated_age); end;
8.1.5
函数的确定性
每次调用函数, 总是根据传入的参数, 每次调用函数,Oracle总是根据传入的参数,执行相 总是根据传入的参数 同的步骤,并返回最终值。函数的确定性是指, 同的步骤,并返回最终值。函数的确定性是指,传入的参数 一定,无论函数被调用多少次,都会返回相同的值。例如, 一定,无论函数被调用多少次,都会返回相同的值。例如, 对于get_tax函数,每次输入相同的工资额,那么,返回值 函数, 对于 函数 每次输入相同的工资额,那么, 都不会改变。 都不会改变。 create or replace function get_tax(p_salary number) return number deterministic as begin declare tax_salary number; end get_tax; 对于具有确定性的函数,在定义时, 对于具有确定性的函数,在定义时,可以使用 deterministic选项,以告知 选项, 创建确定性函数。 选项 以告知Oracle创建确定性函数。 创建确定性函数
8.2.2
1.创建存储过程 .
创建存储过程
create or replace procedure update_students as begin update students set STUDENT_AGE = 10 commit; end update_students;
2.查看存储过程在数据字典中的信息 .
8.2
存储过程
存储过程( 存储过程(Store Procedure)对应于其他编程语言中 ) 的过程。存储过程不必返回值,但是可以有参数。 的过程。存储过程不必返回值,但是可以有参数。本节将详 细讲述存储过程的创建及使用。 细讲述存储过程的创建及使用。
8.2.1 存储过程简介
1.提高数据库执行效率 . 2.提高安全性 . 3.可复用 .
第8 章
函数与存储过程
Oracle数据库中不仅可以使用单条语句对数据库进行 数据库中不仅可以使用单条语句对数据库进行 查操作,而且可以多条语句组成一个语句块, 增、删、改、查操作,而且可以多条语句组成一个语句块, 并一起执行。这些语句块可以进行显式命名, 并一起执行。这些语句块可以进行显式命名,并被其他应用 调用。这些命名的语句块被称为函数与存储过程。 调用。这些命名的语句块被称为函数与存储过程。本章将重 点介绍函数与存储过程的使用。 点介绍函数与存储过程的使用。 Oracle中的自定义函数; 中的自定义函数; 中的自定义函数 Oracle中的存储过程; 中的存储过程; 中的存储过程 包装函数与存储存储过程——程序包。 程序包。 包装函数与存储存储过程 程序包
相关主题