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操作,這樣的話應該是支持默認值的。