使用Navicat for MySQL工具创建存储过程步骤:
1. 新建函数(选择函数标签 ->点击新建函数):
2、输入函数的参数个数、参数名、参数类型等:
3、编写存储过程:
4、保存(请输入合法名称):
5、运行存储过程(在结果1,2,3...中可以查询输出信息):
存储过程和函数目的是为了 可重复地 执行 *** 作数据库的sql语句的集合。区别是写法和调用上。
写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;
函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。
返回值上:
存储过程的返回值,可以有多个值,
函数的返回值,只有一个值。
调用方式上:
存储过程的调用方式有:
1)、exec <过程名>
2)、execute <过程名>
3)、在PL/SQL语句块中直接调用。
函数的调用方式有:
在PL/SQL语句块中直接调用。
具体分为:
----调用FUNCTION add_three_numbers
----1. 位置表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(2,4,5))
END
----2. 命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2))
END
----3. 混合使用位置表示法和命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(3, b=>4,c=>2))
END
----4. 排除表示法
BEGIN
dbms_output.put_line(add_three_numbers(12,c=>2))
END
----5. sql调用表示法 --混合表示法
SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL
----1. 该函数接受3个可选参数,返回3个数字的和
CREATE OR REPLACE FUNCTION add_three_numbers
(
a NUMBER:=0, b NUMBER:=0, c NUMBER:=0
)
RETURN NUMBER IS
BEGIN
RETURN a+b+c
END
存储过程:
基本语法:
create procedure <过程名>(<参数列表,无参时忽略>)
as|is
变量声明、初始化
begin
业务处理、逻辑代码
exception
异常捕获、容错处理
end <过程名>
参数:<参数名>in|out|in out <参数类型,无长度说明>,如:v_name varchar2
in:入参
out:出参
in out:出入参
注:as|is表示as或is
调用语法:
1)、exec <过程名>
2)、execute <过程名>
3)、在PL/SQL语句块中直接调用。
例:
create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)
is
v_temp varchar2(20)
begin
dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2)
v_temp:=v_param1
v_param1:=v_param2
v_param2:=v_temp
dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2)
exception
when others then dbms_output.put_line('There is a error when the procedure up_wap executing!')
end up_wap
/
-- 调用存储过程
declare
v_param1 varchar2(20):='param1'
v_param2 varchar2(20):='param2'
begin
up_wap(v_param1 =>v_param1,v_param2 =>v_param2)
end
/
自定义函数(function)
基本语法:
create function <函数名>(<参数列表,无参时忽略>)
return <返回值类型,无长度说明>
as|is
变量声明、初始化
begin
业务处理、逻辑代码
return <返回的值>
exception
异常捕获、容错处理
end <函数名>
参数:in 入参
注:只有入参的类型。
在存储过程和自定义函数中的参数的传递(入参和出参)不能使用%type或%rowtype匹配,不能使用空值null,但是存储过程可以返回空值。
例:
create function uf_select_name_by_id_test(v_id in number)
return varchar2
is
v_name t_test.t_name%type
begin
select t_name into v_name from t_test where t_id=v_id
return v_name
exception
when others then dbms_output.put_line('error')
end uf_select_name_by_id_test
/
select uf_select_name_by_id_test(1) 姓名 from dual-- select调用
declare --pl/sql语句块调用
v_name varchar2(20)
begin
v_name:=uf_select_name_by_id_test(1)
dbms_output.put_line('name = '||v_name)
end
/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)