當前位置:首頁 » 服務存儲 » 存儲函數可以帶參數嗎
擴展閱讀
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操作,這樣的話應該是支持默認值的。