当前位置:首页 » 服务存储 » 存储过程函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储过程函数

发布时间: 2022-01-13 15:51:10

Ⅰ 怎样从存储过程中调用函数

一,存储过程:
1、 在oracle的 配置和移植工具 àNET MANAGER中配置连接
2、 在plsql中新建SQL窗口,编写存储过程
3、 在plsql中新建测试窗口,在begin end之间调用
4、 查看编译错误:在命令窗口中show errors procere procere_name
或者 编辑的方式打开存储过程,在编译时会有错误提示

二,存储过程基本语法
create procere <过程名>(<参数列表,无参时忽略>)
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 procere 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 procere 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;

Ⅱ 存储过程和函数有何区别

存储过程和函数目的是为了 可重复地 执行操作数据库的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 procere <过程名>(<参数列表,无参时忽略>)

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 procere 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 procere 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 al;-- 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;

/

Ⅲ 存储过程和函数的区别是什么

存储过程需要单独执行;
函数可以随处调用。

存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
也可以创建在 Microsoft® SQL Server™ 启动时自动运行的存储过程。

用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。
与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过 EXECUTE 语句执行。

http://topic.csdn.net/t/20030806/16/2116067.html

http://www.cnsdn.com.cn/blog/article.asp?id=2035这个的解释也很好。

Ⅳ Oracle 存储过程和函数的区别

过程:函数和存储过程的统称。

函数:有且仅有一个返回值,可以用于SQL语句中。 如:x := get_X(),select get_X() from al,返回值为函数调用的结果。

存储过程:无返回值。要返回结果,必须声明为out参数。
如:sp_x(x,y,z),x和y为in类型参数,z为out/in out类型参数。

在oracle中,封装工具还有自定义类型、包等。包可以封装过程和函数,包头类似JAVA中的接口,包体类似JAVA中实现接口的类。

Ⅳ SQL中存储过程和函数的区别

本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,SQL Manager会到procere cache中去取相应的查询语句,如果在procere cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
Procere cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procere cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

Ⅵ 数据库中存储过程和函数的区别是什么用自己的话回答。

存储过程:可以进行增删查改dml操作,甚至可以进行建表等ddl操作;不能return返回值,可以用out参数返回值。用exec 过程名 的方法调用。
函数,可以return返回值;一般来说,只能进行select操作,不能进行增删改,也不能进行ddl操作。可以通过赋值的方式调用,也可以在sql语句中使用。

Ⅶ 存储过程和函数在什么时候使用

这两个都是很常用的,具体看要想要什么功能,如求和 简单的统计啥的 函数就能搞定,如果想实现一些具体逻辑,比如对比两个表的结果然后取最小值表的数据,这样比较复杂的逻辑可以通过存储过程来实现,存储过程只是提供了一个实现方式,在程序里也可以实现。

Ⅷ 存储过程中如何写函数

最好在一个包里面定义函数,存储过程。然后在过程里面可以调用函数

Ⅸ SQL中存储过程与自定义函数怎么互相转换

--(1):输入一个数,返回结果为这个数加1
--存储过程:
create procere pro_test
@input int,
@output int output
as
set @output = @input+1
go

--函数:
create function f_test(@input int)
returns int
as
begin
declare @output int
set @output = @input+1
return @output
end

--(2)输入一个数,返回一个结果集
--存储过程:
create procere pro_test2
@input int
as
select * from sysobjects where id = @input
go

--函数:
create function f_test2(@input int)
returns table
as
return (select * from sysobjects where id = @input)