存儲過程參數類型
Ⅰ java調用存儲過程,Oracle自定義類型作參數怎麼寫法
1. 存儲過程以及類型定義如下:
--The array in oracle
CREATE OR REPLACE TYPE idArray AS TABLE OF VARCHAR2(20);
--package header
CREATE OR REPLACE PACKAGE Lib_Package AS
PROCEDURE Book_Check_Procere(ids IN idArray, exist OUT NUMBER);
END Lib_Package;
--package body
CREATE OR REPLACE PACKAGE BODY Lib_Package AS
PROCEDURE Book_Check_Procere( ids IN idArray, exist OUT NUMBER) AS v_Index BINARY_INTEGER; BEGIN v_Index:= ids.FIRST; LOOP SELECT COUNT(*) INTO exist FROM Lib_Duplicate WHERE status='Lent' AND book_id=ids(v_Index); EXIT WHEN v_Index=ids.LAST OR exist>0; v_Index:= ids.NEXT(v_Index); END LOOP;END Book_Check_Procere;
END Lib_Package;
2.在Java中調用上面的存儲過程
(1) 在Oracle中定義數組類型idArray (2) 在java構造數組並轉換成Oracle中定義的數組類型,調用存儲過程
/** * 當要刪除圖書時,檢查是否仍然有圖書復本處於借出狀態 */ public boolean checkBookStatus(String[] bookIds) throws DataAccessException {
boolean flag = false; Connection conn = null; OracleCallableStatement cstmt = null; ArrayDescriptor desc = null; ARRAY bookIdArray = null; int count = 0; String sql = "{call LIB_PACKAGE.Book_Check_Procere(?,?)}";
DbDriverManager dbManager = DbDriverManager.getInstance(); conn = dbManager.getConnection(Constants.DATABASE);
try { cstmt = (OracleCallableStatement) conn.prepareCall(sql);
//定義oracle中的數組類型 desc = ArrayDescriptor.createDescriptor("IDARRAY", conn); bookIdArray = new ARRAY(desc, conn, bookIds);
cstmt.setObject(1, bookIdArray, oracle.jdbc.OracleTypes.ARRAY); cstmt.registerOutParameter(2, Types.INTEGER); cstmt.execute(); count = cstmt.getInt(2);
log.info(this.getClass() + ".checkBookStatus: count = " + count);
DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); } catch (SQLException e) {
log.error(this.getClass() + ".checkBookStatus-->SQLException: " + e.getMessage()); DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); throw new DataAccessException( "When check the books, there is a SQLException: " + e.getMessage(), e.getCause()); }
if (count > 0) {
flag = true; }
return flag; }
Ⅱ 儲存過程的類型有哪些
問題一:存儲過程的種類 1系統存儲過程以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作。2本地存儲過程用戶創建的存儲過程是由用戶創建並完成某一特定功能的存儲過程,事實上一般所說的存儲過程就粗肢螞是指本地存儲過程。3臨時存儲過程分為兩種存儲過程:一是本地臨時存儲過程,以井字型大小(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程,且只有創建它的用戶才能執行它;二是全局臨時存儲過程,以兩個井字型大小(##)號開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。4遠程存儲過程在SQL Server2005中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分飢李布式查詢和EXECUTE命令執行一個遠程存儲過程。5擴展存儲過程擴展存儲過程(Extended Stored Proceres)是用戶岩埋可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。
問題二:sql,server中的存儲過程有幾種類型 》系統過程,用戶過程;
》內部過程,擴展存貯過程(外部dll)
問題三:SQL Server2005中存儲過程的類型有哪些 10分 存儲過程是指封裝了可重用代碼的模塊或常式。存儲過程可以接受輸入參數、向客戶端返回表格或標量結果和消息、調用數據定義語言 (DDL) 和數據操作語言 (DML) 語句,然後返回輸出參數。在 SQL Server 2005 中,存儲過程有兩種類型:Transact-SQL 或 CLR。
Transact-SQL
Transact-SQL 存儲過程是指保存的 Transact-SQL 語句 *** ,可以接受和返回用戶提供的參數。例如,存儲過程中可能包含根據客戶端應用程序提供的信息在一個或多個表中插入新行所需的語句。存儲過程也可能從資料庫向客戶端應用程序返回數據。
CLR
CLR 存儲過程是指對 Microsoft .NET Framework 公共語言運行時 (CLR) 方法的引用,可以接受和返回用戶提供的參數。它們在 .NET Framework 程序集中是作為類的公共靜態方法實現的。
問題四:sql server存儲過程的參數有哪些類型 int,char,nchar,nvarchar,varchar,text,date,time,datetime,bit,bool……
問題五:sql server存儲過程的參數有哪些類型 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]
,[panyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM [Northwind].[dbo].[Customers]
SET @rowcount=
rowcount
問題六:在SQL中存儲過程的一般語法是什麼? sql server存儲過程語法
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同資料庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。
在ASP中,一般通過mand對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在於講述T-SQL語法,所以存儲過程只給出代碼,不作說明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過mand對象調用該存儲過程的ASP代碼如下:
'**通過mand對象調用存儲過程**
DIM Mym,MyRst
Set Mym = Server.CreateObject(ADODB.mand)
Mym.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
Mym.mandText = getUserList '指定存儲過程名
Mym.mandType = 4 '表明這是一個存儲過程
Mym.Prepared = true '要求將SQL命令先行編譯
Set MyRst = Mym.Execute
Set Mym = Nothing
存儲嘩程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,mandType屬性表明請求的類型,取值及說明如下:
-1 表明mandText參數的類型無法確定
1 表明mandText是一般的命令類型
2 表明mandText參數是一個存在的表名稱
4 表明mandText參數是一個存儲過程的名稱
還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:
'**通過Connection對象調用存儲過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject(&qu......>>
問題七:商品在儲存過程中的變化形式有哪些 在商品交換發展的歷史過程中,隨著商品交換從偶然的行為逐步擴大成為經濟生活中的重要環節,商品的價值形式也逐步發展。從簡單的、個別的或偶然的價值形式,發展到總和的或擴大的價值形式,再發展到一般價值形式,最後發展到貨幣形式。 商品是使用價值和價值的統一。商品的使用價值是實實在在的,是看得見、摸得著的。米、布、房屋、自行車等等各種商品體的自然形態,體現著各種不同的使用價值,這是一目瞭然的。商品的價值實體是物化在商品中的一般人類勞動,與使用價值不同,商品的這種價值實體是看不見、摸不著的。即使把一件商品拆得粉碎,也找不到價值的任何影跡。這是因為,價值純粹是商品的社會屬性。價值實體雖然是已經消耗的勞動力即勞動,但並不是任何生產物質產品的勞動都會形成價值。只有當勞動產品成了供交換即供他人使用的商品,物化在商品中的勞動,才需要互相比較,才需要撇開其特殊的有用性質而把它看作無差別的一般人類勞動即抽象勞動。勞動產品轉化為商品和消耗在產品生產中的勞動轉化為價值,都是特定的社會關系的表現。價值既然純粹是商品的社會屬性,從商品體的自然形態中,當然無法找到它的影蹤,而只有從價值關系即商品與商品交換的社會關系中,才能探索它的存在。 當兩種商品互相交換,例如商品A與商品B相交換的時候,A、B兩種商品就發生了等價關系。在商品交換中,任何一方都不願吃虧。盡管在每個個別的交換行為中,由於各種各樣的原因,交換的一方吃虧、另一方佔便宜的事會經常發生;但從整體看,從長期趨勢看,商品交換必然是價值量相等的交換。例如,1件上衣同20碼麻布相交換,是因為 1件上衣和20碼麻布,在生產中耗費了等量的勞動,具有等量的價值。在這一商品交換關系中,20碼麻布是 1件上衣的交換價值。上衣的價值從上衣本身雖然看不出來,但它一旦同麻布交換,與麻布發生了價值關系,上衣的價值就可以從麻布上面表現了出來。商品的價值關系表明,價值是交換價值的內容,交換價值是商品價值的形式。在人類歷史中,隨著商品交換的發展,商品的價值形式也隨之變化和發展。
問題八:SQL的存儲過程 語法格式是什麼? ---判斷是否存在存儲過程
if exists( select name from sysobjects where name='proc_name' )
drop proc proc_name
go
---創建存儲過程
create proc proc_name
@parameter varchar(20),
@parameter2 int
as
主體語句
go
if exists:判斷是否存在
drop proc : 刪除存儲過程,後面接存儲過程名稱,名稱不用引起來
create proc: 創建存儲過程,後面接存儲過程名稱,名稱不用引起來
@parameter varchar(20): 參數,在執行存儲過程的時候需要傳入的參數,這里是字元類型,如果有多個參數的話,除了最後一個參數,其他的參數後面需要加逗號(英文狀態),如果不需要傳入,直接去掉就行了。
create proc proc_name
as
主體語句
go
as : 關鍵字
主體語句:就是你要做的操作的語句,和平時的完全一樣,存儲過程就相當把平時的sql語句在外面加了個殼的感覺。比如這里你需要查詢一個表 select * from tableName1 那麼這里就這樣寫
create proc proc_name
as
select * from tableName1
go
傳參數:
create proc proc_name
@parameter varchar(20)
as
select * from tableName where [email protected]
go
執行的時候這樣
exec proc_name '小明'
其他的操作都是這樣的。
希望對你有幫助
問題九:外存主要有哪些類型 外儲存器是指除計算機內存及CPU緩存以外的儲存器,此類儲存器一般斷電後仍然能保存數據。常見的外儲存器有硬碟、軟盤、光碟、U盤等。
問題十:存儲過程傳的參數是list,應該用什麼類型接受 看下這個吧。
bbs.csdn/topics/390094413
有代碼
Ⅲ MySQL存儲過程里怎麼定義一個參數類型和表的變數類型一樣
MySQL存儲過程中,定義變數有兩種方式:
1、使用set或select直接賦值,變數名以@開頭,可以在一個會話(即連接)的任何地方聲明,作用域是整個會話,稱為用戶變數。例如:set @var=1;
2、 以declare關鍵字聲明的變數,只能在存儲過程中使用,稱為存儲過程變數,主要用在存儲過程中,或者是給存儲傳參數中。例如: declare var1 int default 0;
兩者的區別是:
在調用存儲過程時,以declare聲明的變數都會被初始化為null。而會話變數(即@開頭的變數)則不會被再初始化,在一個會話(連接)內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全局變數。
Ⅳ 存儲過程里怎麼什麼是輸出參數什麼是輸入參數
使用輸出參數類似於使用返回值。但是輸出參數具有兩個重要的優勢。可以使用輸出參數從存儲過程傳遞出VarChar,Int,Money或任何其他數據類型的值。而返回值則只能返回整數。
輸出參數的另一個優勢就是在一個存儲過程中可以有多個輸出參數。一個存儲過程可以包含1024個參數(其中包括輸入和輸出參數),但是只能包含一個返回值。
比如下面的存儲過程根據提供的作者名來檢索該作者的姓,該存儲過程有一個名為@firstname的輸入參數和一個@lastname的輸出參數。
Create Procere GetLastName (@firstname Varchar(20),@lastname Varchar(20) Output) As
Select @lastname=au_lname From Authors Where au_fname=@firstname
程序清單使用了這個存儲過程。注意程序清單中如何創建參數,指定尺寸和設置參數方向。在執行了存儲過程後,就可以從Parameters集合中獲取輸出的參數值了。注意是如何使用IsDBNull()來 判別輸出參數是否有值。如果沒有返回任何值,則不要把它試圖賦值給字元串變數。
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<%
Dim conPubs As SqlConnection
Dim cmdLastName As SqlCommand
Dim parmLastName As SqlParameter
Dim strLastName As String
'本站為了防止在源代碼中泄露用戶名和密碼,使用通過web.config提供的資料庫連接字元串。
'你在本地使用時,將下面這三行語句刪除或注釋掉。
Dim strConString as string
strConString=ConfigurationSettings.AppSettings("conString")
conPubs=New SqlConnection(strConString)
'你本地測試時,將下面這行的注釋符去掉,並填入相應的資料庫用戶名和密碼,資料庫名和伺服器名。
'conPubs = New SqlConnection( "Server=localhost;uid=sa;pwd=secret;database=pubs" )
cmdLastName = New SqlCommand( "getLastname", conPubs )
cmdLastName.CommandType = CommandType.StoredProcere
' FirstName Input Parameter
cmdLastName.Parameters.Add( "@firstname", "Ann" )
' LastName Output Parameter
parmLastName = cmdLastName.Parameters.Add( "@lastname", SqlDbType.Varchar )
parmLastName.Size = 40
parmLastName.Direction = ParameterDirection.Output
' Execute Command
conPubs.Open()
cmdLastName.ExecuteNonQuery()
' Retrieve value of output parameter
If Not IsDBNull( cmdLastName.Parameters( "@lastname" ).Value ) Then
strLastName = cmdLastName.Parameters( "@lastname" ).Value
Else
strLastName = "Unknown"
End If
conPubs.Close()
%>
The last name is <%=strLastName%>
Ⅳ sqlserver存儲過程返回out參數類型
不知道你是什麼版本的SQL Server?SQL Server 2005支持除了table類型之外的所有數據類型作為參數;SQL Server 2008開始就支持所有數據類型了,包括table類型。 而你的需求應該需要table類型輸出,但是如果是SQL Server 2005的話就不支持了。
Ⅵ sql server存儲過程的參數有哪些類型
針對
Transact-SQL
過程的准則:
所有
Transact-SQL
數據類型都可以用作參數。
您可以使用用戶定義的表類型創建表值參數。
表值參數只能是
INPUT
參數,並且這些參數必須帶有
READONLY
關鍵字。
cursor
數據類型只能是
OUTPUT
參數,並且必須帶有
VARYING
關鍵字。
針對
CLR
過程的准則:
在託管代碼中具有等效值的所有本機
SQL
Server
數據類型都可以用作參數。有關
CLR
類型與
SQL
Server
系統數據類型之間關系的詳細信息,請參閱
映射
CLR
參數數據。
表值或
cursor
數據類型不能用作參數。
如果參數的數據類型為
CLR
用戶定義類型,則必須對此類型有
EXECUTE
許可權。
Ⅶ sql server存儲過程的參數有哪些類型
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