mssql執行存儲過程
如果是函數,那麼返回值可以作為結果返回,那麼就是類似這樣的調用:
c=B(a,b),
update A set c=B(a,b);
如果是存儲過程,那麼返回值必然是使用out 參數返回的,那麼只能類似這樣調用:
B(a,b,out c)
顯然是無法像上面的函數式的調用,只能用游標一行一行調用。
或者
在這個存儲過程外面在加一個函數,在函數裡面調用B,然後再像上面直接在sql理解直接調用。
大概意思:
function B1(a,b) return as int
is
c int;
call B(a,b,c);
return c;
end
❷ 如何在oracle 觸發器中執行mssql資料庫中的存儲過程的相關推薦
1:什麼叫存儲過程?
在oracle中,可以在資料庫中定義子程序,這種程序塊叫存儲過程(procere),它存放在數據字典中,可以在不同用戶和應用程序中共享,並可以實現程序的優化和重用。
2:存儲過程的有點?
過程運行在伺服器端,執行速度快
過程執行一次後代碼就駐留在高速緩存中,在以後的操作中,直接調用緩存數據。
確保資料庫的安全性,可以不授權用戶直接訪問應用程序中的一些表,而是授權用戶執行訪問資料庫的過程。
自動完成需要預先執行的任務,過程可以在系統啟動時自動運行。、
3:存儲過程的創建和執行
用戶存儲過程只能定義在當前資料庫中,可以使用sql語句或OEM創建。
默認情況下,用戶創建的存儲過程歸登錄資料庫的用戶所擁有,DBA可以把許可授權給其他用戶。
Sql命令創建存儲過程
CREATE procere 過程名
【(parameter parameter_mode date_type,….n)】
IS| AS
BEGIN
SQL_STATEMENT
END 過程名
其中
Parameter表示過程的參數。
parameter_mode:參數的類型,過程參數和函數參數一樣,有三種類型IN,OUT,IN OUT
IN 表示參數是輸入給過程的。
OUT表示採納數載過程中被賦值,可以傳給過程的外部。
IN OUT表示可以傳內,可以傳外。
調用存儲過程
直接輸入存儲過程的名字可以執行一個已經定義的存儲過程。
存儲過程的編輯修改
修改存儲過程雖然可以和修改視圖一樣,用ALTER procere,但是他是用來重新編譯和驗證用的,如果要修改過程定義,建議還是用create or replace。
存儲過程的刪除
當某個過程不再需要的時候,應該將其從內存中刪除,以釋放它佔用的資源。
Drop procere 存儲過程名。
Drop procere update_info.
觸發器
觸發器(trigger)是一些過程,與表聯系緊密,用於保護表中的數據,當一個基表被修改時,觸發器自動就會執行。例如出入其可以實現多個表間數據的一致性和完整性。
一般情況下,對表數據的操作有增刪查改,維護數據的觸發器也可以分為多種,每張基表最多可以建立12個觸發器。
1:Before insert 2:before insert fo each row; 3:after inert
4:after insert for each row 5:before update 6:before update for each row
7:after update 8:after update for each row; 9:before delete;
10:before delete for each row 11:after delete 12:after delete for each row.
利用sql語句創建觸發器
語法規則
Create or replace trigger 觸發器名
{before| after| instead of}
{delete 【or insert】【or update】【of column ….n 】}
On 表名|視圖名
【for each row 】[]where condition]]
Sql_statement[,,,n]
參數說明
Instead of :指定在創建替代觸發器。
Of column 指定在哪些列上進行觸發。。。
創建觸發器的限制
1:觸發器中有效的語句可以包括DML語句,但是不能包括DDL,rollback,commit
,savepoint都不適用。
❸ MSSQL存儲過程新手請教
CREATE PROCEDURE [sp_update] --存儲過程名稱
(
@param1 nvarchar(50),
@param2 nvarchar(50),
@param3 nvarchar(50),
@param4 nvarchar(50)--這是你傳入的參數
)
AS
--更新
UPDATE [你的表名]
SET [表中的欄位名1] = @param1,
[表中的欄位名2] = @param2 --要更新的欄位
WHERE [表中的欄位名3] = @param3 and
[表中的欄位名4] = @param4 --更新的條件
--返回更新的記錄
SELECT * FROM [你的表名]
WHERE [表中的欄位名3] = @param3 and
[表中的欄位名4] = @param4 --已更新的記錄
將以上[]的內容改為你自己的表和欄位名, 復制到SQL企業管理器的查詢窗口, F5運行即可生成一個存儲過程. 同樣在SQL企業管理器的查詢窗口輸入 exec [你的存儲過程名稱] '參數1', '參數2', '參數3', '參數4'即可執行上面的那條存儲過程.
❹ PHP怎樣調用MSSQL的存儲過程
//執行存儲過程 for($i=0;$i<$ses_basket_items;$i++) { $query="exec add_ddxx @p_account=\"$session_account\", @p_name=\"$name[$i]\", @p_num=\"$num[$i]\", @p_marketPRice=\"$marketprice[$i]\", @p_memberprice=\"$memberprice[$i]\", @p_priceoftax=\"$notaxprice[$i]\", @p_priceoflast=\"$lastprice[$i]\", @p_sumprice=\"$price[$i]\", @p_buy_date=\"$date\", @p_flag=\"$p_flag\""; $result=mssql_query($query,$connection) or die("存儲過程執行錯誤,無法執行該SQL:$query"); }
❺ 關於MSSQL存儲過程
使用參數方式調用存儲過程就行了
<%
var Command1 = Server.CreateObject("ADODB.Command");
Command1.ActiveConnection = GetConn(); '資料庫連接
Command1.CommandText = "dbo.xp_dgdb_Service"; '存儲過程名
Command1.CommandType = 4;
Command1.CommandTimeout = 0;
Command1.Prepared = true;
Command1.Parameters.Append(Command1.CreateParameter("@RETURN_VALUE", 3, 4)); '以下添加參數
Command1.Parameters.Append(Command1.CreateParameter("@P_orgAddr", 200, 1,21,Command1__P_orgAddr));
Command1.Parameters.Append(Command1.CreateParameter("@p_destAddr", 200, 1,21,Command1__p_destAddr));
Command1.Parameters.Append(Command1.CreateParameter("@p_servicecode", 200, 1,20,Command1__p_servicecode));
Command1.Parameters.Append(Command1.CreateParameter("@p_msg", 200, 1,200,Command1__p_msg));
Command1.Parameters.Append(Command1.CreateParameter("@LinkId", 200, 1,20,Command1__LinkId));
Command1.Parameters.Append(Command1.CreateParameter("@p_ret", 3, 2));
Command1.Execute(); '執行存儲過程
%>
具體的可以在網路網頁找一下,很多的
❻ mssql 存儲過程
MS SQL基礎教程:創建存儲過程
在MS SQL Server 2000 中,創建一個存儲過程有兩種方法:一種是使用Transaction-SQL 命令Create Procere, 另一種是使用圖形化管理工具Enterprise Manager。 用Transaction- SQL 創建存儲過程是一種較為快速的方法,但對於初學者,使用Enterprise Manager 更易理解,更為簡單。
當創建存儲過程時,需要確定存儲過程的三個組成部分;
所有的輸入參數以及傳給調用者的輸出參數。 被執行的針對資料庫的操作語句,包括調用其它存儲過程的語句; 返回給調用者的狀態值,以指明調用是成功還是失敗。 12.2.1 使用Enterprise Manager 創建存儲過程
按照下述步驟用Enterprise Manager 創建一個存儲過程:
啟動Enterprise Manager, 登錄到要使用的伺服器。 選擇要創建存儲過程的資料庫,在左窗格中單擊Stored Procere 文件夾,此時在右窗格中顯示該資料庫的所有存儲過程,如圖12-1 所示。 右擊Stored Procere 文件夾,在彈出菜單中選擇New Stored Procere, 此時打開創建存儲過程對話框,
輸入存儲過程正文。 單擊Check Syntax, 檢查語法是否正確。 單擊OK, 保存。 在右窗格中,右擊該存儲過程,在彈出菜單中選擇All task, 選擇
ManagePermissions, 設置許可權,
12.2.2 用CREATE PROCEDURE 命令創建存儲過程
通過運用Create Procere 命令能夠創建存儲過程,在創建存儲過程之前,應該考慮到以下幾個方面:
在一個批處理中,Create Procere 語句不能與其它SQL 語句合並在一起; 資料庫所有者具有默認的創建存儲過程的許可權,它可把該許可權傳遞給其它的用戶; 存儲過程作為資料庫對象其命名必須符合命名規則; 只能在當前資料庫中創建屬於當前資料庫的存儲過程。 用Create Procere 創建存儲過程的語法規則如下:
CREATE PROC [ EDURE ] procere_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
❼ PHP得到mssql的存儲過程的輸出參數功能實現
在開發過程中可能會遇到無法取得MSSQL存儲過程的輸出參數,很多朋友都不知道該怎麼辦,本文將詳細介紹PHP得到mssql的存儲過程的輸出參數功能實現,需要了解的朋友可以參考下
復制代碼
代碼如下:
<?
$conn=mssql_connect("127.0.0.1","user","passwd");
mssql_select_db("mydb");
$stmt=mssql_init("pr_name",$conn);//
$a=50001;
mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR);
//用於直接返回return
-103此類的值。
mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//用於返回在存儲過程中定義的輸出參數
mssql_bind($stmt,"@invar",$a,SQLINT4);
$result
=
mssql_execute($stmt,true);//不能返回結果集,只能得到輸出參數
//$result
=
mssql_execute($stmt,false);
//返回結果集
//$records=mssql_fetch_array($result);
//print_r($records);
//mssql_next_result($result);下一個結果集,當等於FALSE的時候下一個就是輸出參數
echo
$b;
echo
$val;
?>
下面這些是從別的地方看到的。
小麻煩:
我們按照慣例使用了一個MS
Sql
Server的存儲過程procA,它給出了一個輸出參數nReturn,
而且返回了一個結果集。
在如何讓PHP調用這個procA的時候,我們遭遇了一點小麻煩。
魚肉和熊掌不可兼得:
我們本來希望這樣的代碼能夠既得到輸出參數,又得到返回的結果集:
復制代碼
代碼如下:
//
初始化要傳進存儲過程的參數們:
$nYear
=
2004;
$nPageSize
=
20;
$nPageNo
=
1;
//
Initializes
a
stored
procere:
$stmt
=
mssql_init("proc_stat_page",
$db_mssql->Link_ID);
//
綁定輸入參數:
mssql_bind($stmt,
"@nReturn",
$nReturn,
SQLINT4,
TRUE);
mssql_bind($stmt,
"@nYear",
$nYear,
SQLINT4);
mssql_bind($stmt,
"@nPageSize",
$nPageSize,
SQLINT4);
mssql_bind($stmt,
"@nPageNo",
$nPageNo,
SQLINT4);
//
執行存儲過程,得到QueryID:
$db_mssql->Query_ID
=
mssql_execute($stmt,false);
雖然得到了結果集,但是,這樣$nReturn參數是拿不到輸出參數的。
如果把最後一句話改為:
$db_mssql->Query_ID
=
mssql_execute($stmt,true);
輸出參數倒是拿到了,結果集又沒有了。
好像是一個魚肉和熊掌不可兼得的樣子。
難道PHP連這個都做不到?PHP手冊中也沒有講這個問題。
來自於PHP維護者的解釋:
原本我們這種調用辦法是PHP
4.3版本之前肯定是支持的。
「但是,自從PHP
4.3版本之後,」他們說,「為了能夠兼容存儲過程返回多個結果集,PHP改變這個特性。」
「如果你不需要結果集,你應該設置mssql_execute的第二個可選參數為TRUE,這樣mssql_execute方法之後你就可以得到輸出參數了。」
「如果你需要返回的結果集們,你應該為每一個結果集調用一次mssql_next_result。在最後一個結果集返回之後,你再調用mssql_next_result就會得到返回值FALSE,這時候,你就可以訪問輸出參數了。」
解決:
在最後我們補上一句話:
//
After
the
last
result
has
been
returned
the
return
value
will
have
the
value
returned
by
the
stored
procere.
mssql_next_result($db_mssql->Query_ID);
立刻,魔法生效了:
PHP填充了正確的輸出參數到$nRetVal里。
❽ MSSQL資料庫中定時存儲的存儲過程
您好!要實現你要的功能;操作如下:
一、可以先寫好存儲過程的內容;放在目標資料庫中
二、在MSSQL的SQL server代理——〉作業——〉新建一個作業 在[常規]選項卡中 設置 名稱AUTOZY——〉在[步驟]選項卡中 點擊[新建作業]
三、在彈出的作業步驟窗口中;填寫步聚名稱(自己取一個)--運行身份選擇SA或者WINDOWS運行都可以---在資料庫處選擇 目標資料庫(這步很關鍵)---
在命令 處 寫 exec 存儲過程的名稱(這個不要寫錯)---點擊[確定] 返回上級窗口
四、選擇[計劃]選項卡 --在計劃窗口中可以具體設置怎麼樣定時運行的方案
五、設置好後 [確定]返回上級窗口---再點擊[確定]保存了這個作業
如有不明之處;歡迎CALL 我
❾ oracel 通過dblink 調用mssql 存儲過程
ORACLE的DB_LINK不能調用MSSQL的存儲過程,但可以調用遠程ORACLE的存儲過程。
連接到mssql的存儲過程
方法我知道的有兩種
1、把MSSQL的存儲移植到ORACLE裡面,使用本地調用。
2、使用腳本命令調用,比如hostd:xxxxxxxsqlcmd.....
❿ mssql 存儲過程 請教
存儲過程寫好後 直接編譯,程序中可以執行存儲過程,獲取查詢結果。
要麼你就建立一個臨時表,每天先清空臨時表,將數據寫入到臨時表中,進行查詢,加入索引。速度能提升很多