Oracle存储过程和自定义函数

Oracle-procedure解读

Oracle存储过程和自定义函数

PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用。

相同点: 完成特定功能的程序
不同点:是否用return语句返回值。

举个例子:

create or replace procedure PrintStudents(p_staffName in xgj_test.username%type) as cursor c_testData is select t.sal, t.comm from xgj_test t where t.username = p_staffName; begin for v_info in c_testData loop DBMS_OUTPUT.PUT_LINE(v_info.sal || ' ' || v_info.comm); end loop; end PrintStudents;

一旦创建了改程序并将其存储在数据库中,就可以使用如下的方式调用该过程

begin PrintStudents('Computer Science'); PrintStudents('Match'); end; /

或者

exec PrintStudents('Computer Science'); exec PrintStudents('Match');

在命令窗口中:

这里写图片描述

在pl/sql工具的sql窗口中:

这里写图片描述

存储过程的创建和调用 基本语法 create [ or replace] procedure procedure_name [( argument [ {IN | OUT | IN OUT }] type, ...... argument [ {IN | OUT | IN OUT }] type ) ] { IS | AS} procedure_body 无参的存储过程 /** 无参数的存过 打印hello world 调用存储过程: 1. exec sayhelloworld(); 2 begin sayhelloworld(); end; / */ create or replace procedure sayhelloworld as --说明部分 begin dbms_output.put_line('hello world'); end sayhelloworld;

调用过程:

SQL> set serveroutput on ; SQL> exec sayhelloworld(); hello world PL/SQL procedure successfully completed SQL> begin 2 sayhelloworld(); 3 sayhelloworld(); 4 end; 5 / hello world hello world PL/SQL procedure successfully completed 带参数的存储过程 /** 创建一个带参数的存储过程 给指定的员工增加工资,并打印增长前后的工资 */ create or replace procedure addSalary(staffName in xgj_test.username%type ) as --定义一个变量保存调整之前的薪水 oldSalary xgj_test.sal%type; begin --查询员工涨之前的薪水 select t.sal into oldSalary from xgj_test t where t.username=staffName; --调整薪水 update xgj_test t set t.sal = sal+1000 where t.username=staffName ; --输出 dbms_output.put_line('调整之前的薪水:'|| oldSalary || ' ,调整之后的薪水:' || (oldSalary + 1000)); end addSalary;

可以看到,update语句之后并没有commit的操作。
一般来讲为了保证事务的一致性,由调用者来提交比较合适,当然了是需要区分具体的业务需求的~

begin addSalary('xiao'); addSalary('gong'); commit ; end ; / 存储函数 基本语法 create [ or replace] function function_name [( argument [ {IN | OUT | IN OUT }] type, ...... argument [ {IN | OUT | IN OUT }] type ) ] RETURN { IS | AS} function_body

其中 return子句是必须存在的,一个函数如果没有执行return就结束将发生错误,这一点和存过有说不同。

存储函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/efb321526297e9e1db6054f73eebaa52.html