存儲過程的輸出參數
SQL Server存儲過程是SQL資料庫的重要組成部分,其中可以用到許多參數。在SQL Server存儲過程中,支持輸入(Input)、輸出參數(Output),也支持返回值參數(ReturnValue)。
返回值參數不是一個形參,而類似於編程中的返回值類型。它都是通過Return語句來返回的,而且在SQL Server中,必須返回INT型的數據,而且很顯然,只能有一個返回值,因為RETURN語句其實是會終止SQL Server存儲過程的。
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ALTER PROCEDURE [dbo].[GetCustomers]
(@rowcount INT OUTPUT)
AS
SELECT [CustomerID]
,[CompanyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM [Northwind].[dbo].[Customers]
SET @rowcount=@@rowcount
『貳』 Sql Server中存儲過程中輸入和輸出參數(簡單實例 一看就懂)
[sql]
--
===================【創建存儲過程】=====================
USE
[Message]
GO
/******
Object:
StoredProcere
[dbo].[讀取外部資料庫查詢]
Script
Date:
10/24/2012
05:39:16
******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
--
=============================================
\\
Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱
create
PROCEDURE
[dbo].[資料庫查詢]
@SmsContent
varchar(20)='1231',
--
輸入參數
@bj1
int
out
--
輸入出參數
AS
BEGIN
SELECT
@bj1=count(Id)
from
sss
END
--
===============【調用】==================
USE
[Message]
DECLARE
@return_value
int
EXEC
[dbo].[資料庫查詢]
'1231',@return_value
output
SELECT
@return_value
『叄』 存儲過程參數輸入和輸出參數有什麼作用
無論是輸入的參數還是輸出的參數,在此過程中都視為一個參數,所以一般情況下對應你定義的參數類型和個數帶入,便可調用。
存儲過程後面的是參數列表,其實存儲過程就是個方法,通過傳遞參數來指導方法完成。輸出參數相當於返回值,會帶output關鍵字。
其它參數要提前賦值,而output不需要提前賦值,只需要提供一個變數,在存儲過程執行完的時候,output類型的變數值就會修改,獲得返回值,只能通過這個方法獲得返回值,而不能像函數一樣直接返回結果。因為存儲過程是沒有返回值的。
(3)存儲過程的輸出參數擴展閱讀
1、存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2、當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3、存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4、安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權。
『肆』 在PLSQL中,存儲過程的輸出參數最大支持多大
在PLSQL中,存儲過程的輸出參數(varchar2)最大支持多大?
用的資料庫是 Oracle 10.2. , PLSQL 7.1 。
我自己做了個測試
create or replace procere te1(ResBuff out Varchar2) is
begin
ResBuff := LPAD('a',2001,'b');
end ;
執行結果報錯:
ORA-06502:PL/SQL:number or value error:character string buffer too small
長度2000的時候正常,配置默認的NLS_LANGUAGE = AMERICAN;NLS_CHARACTERSET = ZHS16GBK;
補充,這個輸出參數Varchar2最大支持長度能修改嗎?
------解決的方法--------------------------------------------------------
最大支持4000,我完全沒發現你說的問題
create or replace procere te1(ResBuff out Varchar2) is
begin
ResBuff := LPAD('a',2001,'b');
end ;
DECLARE
a varchar2(3000);
BEGIN
te1(a);
dbms_output.put_line(a);
END;
------解決的方法--------------------------------------------------------
你是不是在DECLARE變數的時候,只定義了2000的長度。最長可以是4000
------解決的方法--------------------------------------------------------
存儲過程中varchar2類型的變數,最大長度可以達到緩沖區的最大長度,即32767
而對於欄位來說varchar2類型的最大長度是4000
例:
SQL codeSQL> create or replace procere testproc(
2 p_len int,
3 p_var out varchar2)
4 is
5 begin
6 p_var := lpad('a',p_len,'b');
7 end ;
8 /
過程已創建。
SQL> declare
2 v_var varchar2(32767);
3 v_len int := 32767;
4 begin
5 testproc (v_len,v_var);
6 dbms_output.put_line(length(v_var));
7 end;
8 /
32767
PL/SQL 過程已成功完成。
『伍』 存儲過程中輸出參數為游標的時候怎麼處理
你的意思是不是要獲取到「當前用戶:user_id」這個的內容,如果是,兩個方式可以解決:
1.通過存儲過程的出參,將「當前用戶:user_id」連接串返回;
比如:
假設你的過程叫,prc_test,在參數列表中增加出參。
create or replace procere prc_test(入參 in 類型, 出參 out 類型) is
begin
-- 邏輯實現
end;
出參就是你要把內容放進去,用來傳值的變數。
2.在過程中保存一張臨時表,然後在java中查出這個臨時表中保存的數據。
定義臨時表table_temp
在過程中
insert into table_temp(msg) values ('當前用戶:' || user_id);
『陸』 sql 存儲過程裡面輸出參數是什麼意思就是後面加個output 那種參數,和其他參數有什麼不一樣
其他參數要提前賦值,而output不需要提前賦值,只需要提供一個變數,在存儲過程執行完的時候,output類型的變數值就會修改,獲得返回值,只能通過這個方法獲得返回值,而不能像函數一樣直接返回結果。因為存儲過程是沒有返回值的。
『柒』 存儲過程的輸出參數是什麼,幫我句子例子解釋一下
隨便什麼數據類型都能做為參數的,之前寫過一個,希望你能有用.
drop proc sp_stu
create proc sp_stu
@notpassSum int output,
@writtenpass int = 60
as
declare @writtenAvg float
select @writtenAvg=@writtenpass from stuMarks
print '本班成績:' + convert(varchar(5),@writtenAvg)
print '------------------------------------'
select stuName,stuInfo.stuNo,writtenExam
from stuInfo inner join stuMarks
on stuInfo.stuNo = stuMarks.stuNo
where writtenExam < 60
select @notpassSum=count(stuNo) from stuMarks where writtenExam < @writtenpass
go
接下來是調用
declare @sum int
exec sp_stu @sum output,34
『捌』 oracle中怎麼執行帶有輸出參數的存儲過程,在程序中我知道怎麼調用,
1、新建一個存儲過程(Procere)。
『玖』 oracle存儲過程如何輸出信息
可用DBMS_OUTPUT.PUT_LINE()對存儲過程的進行輸出。
編寫存儲過程:
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('輸出SQL語句1');
elsif M < 3 then
dbms_output.put_line('輸出SQL語句2');
else
dbms_output.put_line('nothing');
end if;
end;
(9)存儲過程的輸出參數擴展閱讀;
存儲在資料庫的數據字典中,存儲在當前的應用中安全性由資料庫提供安全保證,必須通過授權才能使用存儲子程序,安全性靠應用程序來保證,如果能執行應用程序,就能執行該子程序。模式描述IN參數用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。
『拾』 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