創建存儲過程輸出參數
1)過程名
存儲過程的名稱,默認在當前資料庫中創建。若需要在特定資料庫中創建存儲過程,則要在名稱前面加上資料庫的名稱,即db_name.sp_name。
需要注意的是,名稱應當盡量避免選取與MySQL內置函數相同的名稱,否則會發生錯誤。
2)過程參數
存儲過程的參數列表。其中,<參數名>為參數名,<類型>為參數的類型(可以是任何有效的MySQL數據類型)。當有多個參數時,參數列表中彼此間用逗號分隔。存儲過程可以沒有參數(此時存儲過程的名稱後仍需加上一對括弧),也可以有1個或多個參數。
MySQL存儲過程支持三種類型的參數,即輸入參數、輸出參數和輸入/輸出參數,分別用IN、OUT和INOUT三個關鍵字標識。其中,輸入參數可以傳遞給一個存儲過程,輸出參數用於存儲過程需要返回一個操作結果的情形,而輸入/輸出參數既可以充當輸入參數也可以充當輸出參數。
⑵ 在MySQL中如何創建一個帶輸出參數為一個表類型的存儲過程
在MySQL中如何創建一個帶輸出參數為一個表類型的存儲過程
首先需要知道「另一個存儲過程」的結果集的所有列的類型。
假設「另一個存儲過程」的名字是
sp1
,沒有參數,返回的結果集共3列,全部為int型,那麼「存儲過程」里添加一個與結果集列數相同的臨時表或表變數用於接收「另一個存儲過程」的結果集
如下
CREATE
PROCEDURE
sp2
AS
DECLARE
@t
table(a
int,b
int,c
int)
INSERT
INTO
@t(a,b,c)
EXEC
sp1
SELECT
*
FROM
@t
使用
SQLSERVER
存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:
引用:
Create
PROC
存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL
語句
例:
引用:
Create
PROC
upGetUserName
@intUserId
INT,
@ostrUserName
NVARCHAR(20)
OUTPUT
--
要輸出的參數
AS
BEGIN
--
將uName的值賦給
@ostrUserName
變數,即要輸出的參數
Select
@ostrUserName=uName
FROM
uUser
Where
uId=@intUserId
END
其中
Create
PROC
語句(完整語句為Create
PROCEDURE)的意思就是告訴SQL
SERVER,現在需要建立一個存儲過程,upGetUserName
就是存儲過程名稱,@intUserId
和
@ostrUserName
分別是該存儲過程的兩個參數,注意,在SQL
SERVER中,所有用戶定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在「查詢分析器」里執行一次,SQL
SERVER就會在當前資料庫中創建一個名為「upGetUserName」的存儲過程。你可以打開「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「存儲過程」,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
二、存儲過程的調用
之前已經創建了一個名為「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程建立好了,接下來就是要在應用程序里調用了,下面看一下在ASP程序里的調用。
⑶ sql server 中 一個要輸入參數和輸出參數的存儲過程。
1、首先我們需要打開SQL Server Managment管理工具,新建一個表。
⑷ SQL 創建存儲過程 輸出對比參數
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[proc_return]
@貨物編號 nvarchar(50),--不清楚你的這個貨物編號是要傳進來還是要 在存儲過程獲取
@ReturnCount Int OutPut
AS
Begin
Begin TransacTion trans
Set @ReturnCount = 3 --這里先默認為3或者其他 ,如果要檢測其他錯誤的話 會要用到 食物
--執行取得 貨物編號 語句或者 存儲過程
if(@貨物編號='') --這里可以看成判斷沒有給出 貨物編號
begin
select @ReturnCount=1
end
If Exists(Select * From 貨物表 Where 貨物編號 = @貨物編號)--判斷是否存在
Begin
select @ReturnCount=0
End
Else
Begin
select @ReturnCount=2
End
if @@error<>0 --判斷如果以上執行有任何一條出現錯誤
begin
rollback tran --開始執行事務的回滾,恢復的轉賬開始之前狀態
select @ReturnCount=3
end
else
begin
commit tran
end
End
呵呵 希望對你有所幫助。
⑸ 創建一個帶輸入參數和輸出參數的存儲過程
create proc Tproc
@id nchar(10),
@name nchar(20),
@sex nchar(10)
as
begin
declare @hasData nchar(10)
select @hasData=id from S where id=@id
if @hasData!=''
begin
print '學號重復'
return
end
if @name=''
begin
print '名字不能為空'
return
end
if(@sex!='男' and @sex!='女')
begin
print '性別只能是男或女'
return
end
else
begin
insert into S values(@id,@name,case @sex when '男' then 1 when '女' then 0 end)
if(@@ROWCOUNT>0)
print '記錄成功插入!'
else
print '記錄未成功插入!'
end
end
不知道是否符合你的要求,歡迎討論!
⑹ sql server 中 一個要輸入參數和輸出參數的存儲過程。
1、創建存儲過程,包含入參、出參,返回入參除以的數據;
create or replace procere test_proc(in_num number, out_num out number)
as
begin
out_num := in_num/2;
end;
⑺ sql server 中 一個要輸入參數和輸出參數的存儲過程。
第一步:點擊資料庫下的「可編程性」,選擇「存儲過程」,點擊滑鼠右鍵,選擇「新建存儲過程」
第二步:在create
PROCEDURE
後輸入存儲過程的名字,緊跟著的就是定義存儲過程的參數,接下來就可以去編寫自己所需要組裝的存儲過程語句了
注意,怕寫的不對,可以執行下,想驗證sql語句是否正確,就使用print輸出下
第三步:點擊上面的執行,存儲過程就寫好了,要怎麼調用呢,在sqlserver的語句查詢框中,輸入exec
存儲過程名
參數,執行就可以了。
⑻ sql存儲過程 輸出參數
SQL存儲過程輸出參數:
--===================【創建存儲過程】=====================
USE[Message]
GO
/******Object:StoredProcere[dbo].[讀取外部資料庫查詢]ScriptDate:10/24/201205:39:16******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--=============================================\Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱
createPROCEDURE[dbo].[資料庫查詢]
@SmsContentvarchar(20)='1231',--輸入參數
@bj1intout--輸入出參數
AS
BEGIN
SELECT@bj1=count(Id)fromsss
END
--===============【調用】==================
USE[Message]
DECLARE@return_valueint
EXEC[dbo].[資料庫查詢]'1231',@return_valueoutput
SELECT@return_value
⑼ 我創建了一個存儲過程,輸出參數我想弄成數組,數組怎麼創建,pl/sql測試這個存儲過程的時候怎麼測試,謝謝
測試存儲過程的話,只要右鍵選擇要測試的存儲過程,然後點"test"就可以了。
至於輸出參數弄成數組,下面是一個實例,你可以參考下。
create or replace package test_pkg
as
type empRec is record
(
emp_id employees.employee_id%type,
emp_sal employees.employee_id%type
);
type sal_ty is table of empRec index by binary_integer;
end;
create or replace function test_p
return test_pkg.sal_ty
as
retval test_pkg.sal_ty;
begin
select * bulk collect into retval from employees;
return retval;
end;
SQL> l
1 declare
2 ret test_pkg.sal_ty;
3 begin
4 ret:=test_p;
5 for i in 1..ret.count
6 loop
7 dbms_output.put_line(ret(i).emp_id||' '||ret(i).emp_sal);
8 end loop;
9* end;
SQL> /
100 24000
101 17000
102 30000
101 30000