儲存過程中的out,output,return 的使用
return value型別的引數不需要在儲存過程的引數列表中新增。return value型別的引數就是儲存過程最後return的值。
資料庫中使用output值和return值:
-------------------------------------------------------
--數獲儲存過程中的OUTPUT引數和返回值獲取
-------------------------------------------------------
CREATE PROCEDURE
@INPUT int,
@OUTPUT int output
AS
BEGIN
SET NOCOUNT ON;
SELECT @OUTPUT=@INPUT
RETURN @INPUT+1
END
GO
--呼叫output值和return返回值
DECLARE @OUT int,@RETURN int
EXEC @RETURN=Proc_Test;1
0,
@OUT output
SELECT [返回值]=@RETURN,[OUTPUT值]=@OUT
返回值 OUTPUT
----------- -----------
1 0
-----------------------------------------------------
-- SP_EXECUTESQL中的OUTPUT引數獲取
-----------------------------------------------------
DECLARE @Para1 int,@Para2 int,@SUM int
EXECUTE SP_EXECUTESQL
N'SELECT @[email protected][email protected]
N'@Para1 INT,@Para2 INT,@SUM INT OUTPUT ',
5,5,@SUM OUTPUT
SELECT [OUTPUT值]=@SUM
OUTPUT值
-----------
10
======================================================================
下面在.net下呼叫儲存過程:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>使用儲存過程</title>
- <mce:style type="text/css"><!--
- #form1
- {
- margin-left: 206px;
- }
- --></mce:style><style type="text/css" mce_bogus="1"> #form1
- {
- margin-left: 206px;
- }
- </style>
- </head>
- <body>
- <form id="form1" runat="server" style="border-style: none; width: 339px;">
- <div>
- </div>
- <asp:Label ID="Label3" runat="server" Text=" 輸 入 參 數:"></asp:Label>
- <asp:TextBox ID="Input" runat="server" BorderStyle="NotSet"></asp:TextBox>
- <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/提交.GIF"
- onclick="ImageButton1_Click" style="height: 20px" />
- <hr width="95%" />
- <br />
- <asp:Label ID="Label1" runat="server" Text="OUTPUT引數:"></asp:Label>
- <asp:Label ID="Output" runat="server" BorderColor="#6600FF" BorderStyle="None"
- BorderWidth="1px" Width="100px">暫無</asp:Label>
- <hr width="95%" />
- <br />
- <asp:Label ID="Label4" runat="server" Text="RETURN返回:"></asp:Label>
- <asp:Label ID="Return" runat="server" BorderColor="#6600FF" BorderWidth="1px"
- Width="100px" BorderStyle="None">暫無</asp:Label>
- </form>
- </body>
- </html>
- protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
- {
- //定義資料庫連線和SqlCommand物件
- SqlConnection Conn=new SqlConnection(ConfigurationManager.ConnectionStrings["TestConnection"].ToString());
- SqlCommand Cmd=new SqlCommand("Proc_Test;1",Conn);
- Cmd.CommandType = CommandType.StoredProcedure;
- //指定引數型別
- SqlParameter input = Cmd.Parameters.Add("@INPUT", SqlDbType.Int);
- SqlParameter output = Cmd.Parameters.Add("@OUTPUT", SqlDbType.Int);
- SqlParameter return_ = Cmd.Parameters.Add("@RETURN", SqlDbType.Int);
- //指定引數方向
- input.Direction = ParameterDirection.Input;
- output.Direction = ParameterDirection.Output;
- return_.Direction = ParameterDirection.ReturnValue;
- //引數賦值
- if (Input.Text == "")
- {
- input.Value = 0;
- }
- else
- {
- input.Value = Convert.ToInt32(Input.Text);
- }
- //呼叫儲存過程
- Conn.Open();
- Cmd.ExecuteNonQuery();
- Conn.Close();
- Output.Text = output.Value.ToString();//獲取output值
- Return.Text = return_.Value.ToString();//獲取返回值
- }
CREATETABLE[dbo].[Order](
[o_id][bigint]IDENTITY(1,1) NOTFORREPLICATIONNOTNULL,
[o_buyerid][int]NOTNULL
)
1.OUPUT引數返回值
例: 向Order表插入一條記錄,返回其標識
@o_buyeridint ,
@o_idbigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERTINTO[Order](o_buyerid )
VALUES (@o_buyerid )
SET@o_id=@@IDENTITY
END
END
儲存過程中獲得方法:
DECLARE@o_buyeridint
DECLARE@o_idbigint
EXEC[nb_order_insert]@o_buyerid ,@o_id output;
2.RETURN過程返回值
CREATEPROCEDURE[dbo].[nb_order_insert](
@o_buyeridint ,
@o_idbigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT*FROM[Shop]WHERE[s_id]=@o_shopid))
BEGIN
INSERTINTO[Order](o_buyerid )
VALUES (@o_buyerid )
SET@o_id=@@IDENTITY
RETURN1 — 插入成功返回1
END
ELSE
RETURN0 — 插入失敗返回0
END
儲存過程中的獲取方法
DECLARE@o_buyeridint
DECLARE@o_idbigint
DECLARE@resultbit
EXEC@result=[nb_order_insert]@o_buyerid ,@o_id output
create
proc Proc_OutPutTest
--建立
@numA
int
,
--numA為儲存過程的引數
@numB
int
,
--numB為另一引數
@numReturn
int
output
--此為Output,也就是儲存過程的返回值
as
begin
if(@numA>@numB)
set
@[email protected]
else
set
@[email protected]
--A>B的時候返回A,否則返回B
end
go
declare
@numReceive
int
--先宣告一個變數用來接收儲存過程的返回值
exec
Proc_OutPutTest 1,2, @numReceive
output
--呼叫儲存過程並用@numReturn接收儲存過程的返回值
select
@numReceive
--將會返回(1,2)中較大的數字:2
go
create
proc Proc_OutTest
--新建儲存過程
@numC
int
,
--引數C
@numD
int
,
--引數D
@numE
int
out
--引數E用來返回
as
begin
if(@numC>@numD)
set
@[email protected]
--如果C>D,將C賦值給E
else
set
相關推薦
關於sql server 在儲存過程中建立臨時表,並往臨時表中插入資料時出現亂碼的問題
此前在客戶一個繁體系統的sql server中執行儲存過程的時候出現亂碼,經查發現建立臨時表後,往臨時表中插入資料時得到的資料是亂碼的,所以檢視建立表的sql指令碼,經查需要將變數型別設定為
儲存過程中建立臨時表,為何沒有許可權?
oracle在儲存過程中建立臨時表,執行execute immediate str;報許可權不夠,但是複製出這個sql,直接在sql視窗執行成功,原因如下:
在儲存過程中的所有操作都必須直接顯式授權,不能通過角色授權。你必須把 CREATE TABLE 許可權顯式授予建立
計算機中數值型資料二進位制形式儲存過程中的原碼,反碼與補碼
在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。
Oracle 儲存過程中執行動態SQL,動態表名
create or replace procedure mw_sys.clearrubbishdatefy2
is
type table_type is table of mw_app.mwt_ud_yscsjdl.tablename%type;
tablenameAr
儲存過程中動態拼接sql,拼接單引號問題
create or replace procedure mergerOrder(
v_ids in varchar2,
v_productCode in varchar2,
v_productCateCode in varchar2)
儲存過程中的out,output,return 的使用
output 型別的引數需要在儲存過程的引數列表中新增。output型別的引數傳入儲存過程後還會返回其執行後的值。return value型別的引數不需要在儲存過程的引數列表中新增。return value型別的引數就是儲存過程最後return的值。
資料庫中使用out
MySQL儲存過程中的IN,OUT,INOUT型別 用法
MySQL儲存過程中有IN,OUT,INOUT型別
-----------------------------------
## IN IN引數只用來向過程傳遞資訊,為預設值。
## MySQL儲存過程"in"引數:跟C語言的函式引數的值傳遞類似,MySQL儲存過程內部
Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
 
MySQL儲存過程中的3種迴圈,儲存過程的基本語法,ORACLE與MYSQL的儲存過程/函式的使用區別,退出儲存過程方法
學無止境
部落格園 首頁 新隨筆 聯絡 訂閱 管理
隨筆-1968 評論-103 文章-4&
SQL Server資料庫的儲存過程中定義的臨時表,真的有必要顯式刪除(drop table #tableName)嗎?
問題背景
在寫SQL Server儲存過程中,如果儲存過程中定義了臨時表,有些人習慣在儲存過程結束的時候一個一個顯式地刪除過程中定義的臨時表(drop table #tName),有些人又沒有這個習慣,對於不明真相的群眾或者喜歡思考的人會問,儲存過程中定義的臨時表,最後要不要主動刪除,為什麼
在儲存過程中,關於出現null的問題
假設有一個表A,定義如下: create table A( id varchar2(50) primary key not null, vcount number(8) not null, bid varchar2(50) not null -- 外來鍵 );如果在儲存過程中
Sql Server中儲存過程中輸入和輸出引數(簡單例項,一看就懂)
-- ===================【建立儲存過程】=====================
USE [Message]
GO
/****** Object: StoredProcedure [dbo].[讀取外部資料庫查詢] Script Date:
SQL Server 儲存過程中處理多個查詢條件的幾種常見寫法分析,我們該用那種寫法
最近發現還有不少做開發的小夥伴,在寫儲存過程的時候,在參考已有的不同的寫法時,往往很迷茫,
不知道各種寫法孰優孰劣,該選用那種寫法,以及各種寫法優缺點,本文以一個簡單的查詢儲存過程為例,簡單說一下各種寫法的區別,以及該用那種寫法
專業DBA以及熟悉資料庫的同學請無視。
[PL/SQL] 請教大家一個問題,儲存過程中需要幾個commit?
如果中間有語句發生錯誤就不一樣了,寫了一個測試的例子,看看對你有幫助沒有
drop table aatest;
create table aatest
(nid number,nname varchar2(16))
insert into aatest(nid,nname)values(1,'00
在儲存過程中,表記錄內容之間的複製
現在有表A,表B, 要把B表中的某條記錄取出來,然後選取指定的欄位複製到表A中,SQL語法如下declare @Id int
@Id = SCOPE_IDENTITY()
insert into T
mysql儲存過程之引數(IN,OUT或INOUT)瞭解下
在現實應用中,開發的儲存過程幾乎都需要引數,就是這些引數,使得儲存過程更加靈活和有用。 在mysql中,引數有三種模式:IN,OUT或INOUT:IN - 是預設模式。在儲存過程中定義IN引數時
MySQL儲存過程中,定義變數有兩種方式
MySQL儲存過程中,定義變數有兩種方式:
1.使用set或select直接賦值,變數名以 @ 開頭.
例如:set @var=1;
可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。
測試儲存過程中中發生異常時,之前DML操作會不會rollback
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;">步驟:</span></span><span
SQLserver 在儲存過程中建立函式,建立檢視
alter PROCEDURE usp_sumgoods(@supplierid VARCHAR(50)) as
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetM
【SQLServer】 儲存過程中,使用IN函式
在儲存過程中使用IN函式,傳入多個引數時,會有問題,三種解決方案:
新增函式:
create FUNCTION [dbo].[Split2]
(
@RowData varchar(max