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

存储函数可以带参数吗

发布时间: 2022-12-23 18:14:11

A. sql存储过程参数可省略吗 存储过程中参数都有默认值,调用时可不可以不传参数呢

可以省略参数
create function 拥有者.函数名(参数名 类型)
这是创建函数的SQL Server句头 可省略括号中的参数 但不可省略括号

在sql server中 执行带参数的存储过程
exec+空格+存储过程名+空格+参数
多个参数的话用逗号分隔 传出参数要加output
例如:
exec P_GetIntegratedFluxOneMoment @StartTableName,@ColName,@StartTime,@StartValue output
其中@StartTableName,@ColName,@StartTime,@StartValue都是前面已经定义好的变量 传入参数也可以不用变量 直接写值也行

程序中调用的话看你用什么语言了 各个语言的调用方法不一样

B. oracle 存储过程调用函数传变量参数

首先,请单独调试一下max_int这个函数,确保这个函数是正确的后,看一下调用时,name是否为其他类型的。从而导致异常的出现。

C. oracle中函数和存储过程的区别和联系

在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点。刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别。
一、存储过程

1.定义

存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procere。

2.创建存储过程

create [or replace] procere 存储过程名

[(参数1 类型,参数2 out 类型……)]

as

变量名类型;

begin

程序代码体

end;

示例一:无参无返

create or replace procere p1
--or replace代表创建该存储过程时,若存储名存在,则替换原存储过程,重新创建
--无参数列表时,不需要写()
as
begin
dbms_output.put_line('hello world');
end;

--执行存储过程方式1
set serveroutput on;
begin
p1();
end;
--执行存储过程方式2
set serveroutput on;
execute p1();

示例二:有参有返

create or replace procere p2
(name in varchar2,age int,msg out varchar2)
--参数列表中,声明变量类型时切记不能写大小,只写类型名即可,例如参数列表中的name变量的声明
--参数列表中,输入参数用in表示,输出参数用out表示,不写时默认为输入参数。
------------输入参数不能携带值出去,输出参数不能携带值进来,当既想携带值进来,又想携带值出去,可以用in out
as
begin
msg:='姓名'||name||',年龄'||age;
--赋值时除了可以使用:=,还可以用into来实现
--上面子句等价于select '姓名'||name||',年龄'||age into msg from al;
end;
--执行存储过程
set serveroutput on;
declare
msg varchar2(100);
begin
p2('张三',23,msg);
dbms_output.put_line(msg);
end;

示例三:参数列表中有in out参数

create or replace procere p3
(msg in out varchar2)
--当既想携带值进来,又想携带值出去,可以用in out
as
begin
dbms_output.put_line(msg); --输出的为携带进来的值
msg:='我是从存储过程中携带出来的值';
end;

--执行存储过程
set serveroutput on;
declare
msg varchar2(100):='我是从携带进去的值';
begin
p3(msg);
dbms_output.put_line(msg);
end;

示例四:存储过程中定义参数

create or replace procere p4
as
--存储过程中定义的参数列表
name varchar(50);
begin
name := 'hello world';
dbms_output.put_line(name);
end;
---执行存储过程
set serveroutput on;
execute p4();

总结:1.创建存储过程的关键字为procere。

2.传参列表中的参数可以用in,out,in out修饰,参数类型一定不能写大小。列表中可以有多个输入输出参数。

3.存储过程中定义的参数列表不需要用declare声明,声明参数类型时需要写大小的一定要带上大小。

4.as可以用is替换。

5.调用带输出参数的过程必须要声明变量来接收输出参数值。

6.执行存储过程有两种方式,一种是使用execute,另一种是用begin和end包住。

存储过程虽然有很多优点,但是它却不能使用return返回值。当需要使用return返回值时,我们可以使用函数。

二、存储函数

1.函数与存储过程的结构类似,但是函数必须有一个return子句,用于返回函数值。

create or replace function f1
return varchar--必须有返回值,且声明返回值类型时不需要加大小
as
msg varchar(50);
begin
msg := 'hello world';
return msg;
end;

--执行函数方式1
select f1() from al;
--执行函数方式2
set serveroutput on;
begin
dbms_output.put_line(f1());
end;

三、存储过程与存储函数的区别和联系

相同点:1.创建语法结构相似,都可以携带多个传入参数和传出参数。

2.都是一次编译,多次执行。

不同点:1.存储过程定义关键字用procere,函数定义用function。

2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。

3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form al;)。

总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。

D. SQL存储函数

create proc stu_proc2
@no varchar(50)
as
begin
select 学生,sum(成绩),sum(成绩)/count(1) from 表 group by 学生
end

E. oracle函数和存储过程有什么区别

一、主体不同

1、函数:当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。

2、存储过程:是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,一次编译后永久有效。

二、特点不同

1、函数:只能返回一个变量,可以嵌入sql中和存储过程中使用。

2、存储过程:用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。


三、功能不同

1、函数:不能用临时表,只能用表变量,函数不能执行一组修改全局数据库状态的操作。可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,所以在查询中位于from关键字后面。

2、存储过程:存储过程需要让sql的query可以执行,存储过程可以返回参数,如记录集。sql语句中不可以含有存储过程。


F. 存储过程中调用带返回值的函数

如果是ACCESS、MySQL、SQL 2000 数据库

SELECT * FROM tabel_ WHERE date < (now()-30)

数据库都自带很多函数的

G. 存储函数有零个或多个运行参数吗

存储函数有零个或多个运行参数参考以下内容
过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out 参数,
在过程和函数中实现返回多个值

1)存储过程和存储函数都可以有out参数
2)存储过程和存储函数都可以有多个out参数
3)存储过程可以通过out参数来实现返回值

H. 107 ORACLE 创建存储过程,存储函数

基本概念

存储过程和存储函数相当于一个东西。

存储过程在Oracle里叫procere。

存储过程没有返回值。

存储函数在Oracle里叫function。

存储函数有返回值。

基本语法

create or replace procere 名字

--create or replace 意思是创建或者替换

as

--可以在此定义参数

begin

语句;

end;

例:

create  or  replace   procere   sayhello

as

--说明 相当与declare

begin

dbms_output.put_line('Hello World');

end;

基本调用

begin

-- Call the procere

  sayhello;

  sayhello;

  sayhello;

   end;

带参数的存储过程--查询某个员工的年收入

create or replace procere upmoney(testname in test_procere.name%type) 

as

begin 

update test_procere t set t.money = t.money + 1000

 where t.name = testname; 

end 

upmoney;

特别的地方,参数要指明是输入参数还是输出参数。

存储函数

create or replace function Fupmoney(tname in varchar2)    return number

as     --定义月薪参数

tmoney test_procere.money%type;

begin

  --得到月薪

  select t.money

    into tmoney

    from test_procere t

  where t.name = tname;

  dbms_output.put_line(tmoney*12);

  return(tmoney*12);

end;

创建一个多输出参数的存储函数例子

create or replace procere manyparm(tname in varchar2,

                                    tjob out varchar2,

                                    tmoney out number,

                                    tdept out varchar2)

is

begin

    select t.job,t.money,t.dept

      into tjob,tmoney,tdept

      from test_procere t

      where t.name = tname;

end manyparm;

I. 存储函数和存储过程如何将运算结果返回给外界

存储函数可以通过return语句返回函数值,存储过程通过out inout 参数将结果带出
存储函数和存储过程如何将运算结果返回给外界?通过return语句返回函数值,和通过out inout 参数将结果带出。

J. mysql 存储过程可以设置参数默认值吗

创建过程也是一种DDL操作,这样的话应该是支持默认值的。