『壹』 怎麼寫存儲過程
一、整體格式。存儲過程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,... */ )
/* RESULT ( column-name,... ) */
BEGIN
;
END
其中creator是用戶名,比如dba;proc_name是你自己起的過程名;後面的參數可有可無,視自己情況定,如果有格式如(a integer,b char(50));再下面的RESULT應該是返回值,這個沒用過不知道怎麼回事!
二、內容。把這些都寫好了可能是這樣:
CREATE PROCEDURE dba.myProcere ( @a integer,@b char(50))
BEGIN
;
END
但是這樣子還是不能編譯的,因為整個過程體是空的,而我學習的結果是過程中至少要有一個SQL語句。所以要這樣寫才不會出錯:
CREATE PROCEDURE dba.myProcere ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、語法。
1、分號。在寫的過程中最郁悶的問題是分號!最後發現好像是這樣:
每一句都要加分號,不管是SQl語句還是其它的什麼語句,但是最後保存後最後一句的分號會被自動刪除!(我用的是Sybase的Sybase Central)。
2、定義變數。
格式為Declare @varName integer;(注意有分號!)「@」號好像可有可無!
3、SELECT語句。
格式為:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if語句。
格式為:
if(varName > 0) then
return
end if;(注意還有分號!)
5、循環語句。
格式為:
loop
……
end loop;(注意分號!)
6、設置變數值。
格式為:
set @varName = 10;
set @varName = @varName2;
7、字元串。
Declare myString char(50);
set @myString = 'Hello!';
要用單引號!
8、定義游標。
格式為:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打開、使用和關閉游標。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、調用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是調用程序中自定義的過程名,ProcName2是資料庫中存儲過程的名字,下面的傳入的參數。
『貳』 如何編寫存儲過程
//創建存儲過程
CREATE PROCEDURE userData(
IN id INT
)
BEGIN
SELECT * from userdata WHERE userflag = id;
END;
其中IN是傳進去的變數;
drop procere userData;//銷毀這個存儲過程。
call userData(2) //調用存儲過程。
(2)資料庫存儲過程怎麼寫擴展閱讀:
sql中的存儲過程及相關介紹:
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名數據類型[VARYING] [=內定值] [OUTPUT]。
每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
[內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數。
同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。
參考資料來源:網路-儲存過程
『叄』 資料庫存儲 過程怎麼寫!
/*
選擇出需要分析的數據。
添加循環費用的詳細數據時用。
*/
ALTER PROCEDURE dbo.StCycCharges
AS
-- 創建臨時表
Create Table #out(
[Id] [int], -- 不能對int類型的欄位指定寬度
[EndDate] [smalldatetime] null,
[ChargeMoney] [money] null,
[CycNo] [int]
)
-- 將數據填充到臨時表中
Insert Into #out
Select
Id, EndDate, ChargeMoney,
Case
When Cyc='Daily' Then DateDiff(d, getdate(), EndDate)
When Cyc='Weekly' Then DateDiff(ww, getdate(), EndDate)
When Cyc='Monthly' Then DateDiff(m, getdate(), EndDate)
When Cyc='Annually' Then DateDiff(yy, getdate(), EndDate)
When Cyc='bi-Annually' Then DateDiff(yy, getdate(), EndDate)/2
End As CycNo
From
TBL_Resident_ChargesList
Where
IsOnce=0 And (DateDiff(d, getdate(), EndDate)>=0)
-- 選取臨時表中的數據
Select * From #out Where Id Not In(
Select a.ListID From TBL_Resident_ChargesDetails a, #out b Where a.ListID=b.ID And a.CycNo=b.CycNo
)
-- 刪除臨時表
Drop Table #out
RETURN
『肆』 sql server 2008 怎麼編寫存儲過程
第一步:點擊資料庫下的「可編程性」,選擇「存儲過程」,點擊滑鼠右鍵,選擇「新建存儲過程」
第二步:在create
PROCEDURE
後
輸入存儲過程的名字,緊跟著的就是定義存儲過程的參數,接下來就可以去編寫自己所需要組裝的存儲過程語句了
第三步:
編譯存儲過程,在工具欄上按下執行按鈕,如果沒有錯誤,就編寫成功了。
第四步:調用:在sqlserver的語句查詢框中,輸入exec
存儲過程名
參數,執行就可以了。
基本語法格式如下:中括弧帶的是可選項
create
proc
|
procere
pro_name
[{@參數數據類型}
[=默認值]
[output],
{@參數數據類型}
[=默認值]
[output],
....
]
as
begin
SQL_statements
--業務處理
end
『伍』 資料庫的存儲過程怎麼寫
1,調用沒有參數的存儲過程
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Open strconn
set cmd.ActiveConnection=conn
cmd.CommandText="{call nono}"
'set rs=cmc.exe 或者cmd.execute
set rs=cmd.Execute()
%>
2,一個輸入的參數的存儲過程
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Open strconn
set cmd.ActiveConnection=conn
cmd.CommandText="{call oneinput(?)}"
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger ,adParamInput )
cmd("@aaa")=100
cmd.Execute()
%>
3,一個輸入參數和一個輸出的參數
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Open strconn
set cmd.ActiveConnection=conn
cmd.CommandText = "{call oneinout(?,?)}"
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput)
cmd("@aaa")=10
cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)
cmd.Execute()
bbb=cmd("@bbb")
%>
4,一個輸入參數,一個輸出參數,和一個返回值
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Open strconn
set cmd.ActiveConnection=conn
cmd.CommandText="{?=call onereturn(?,?)}"
cmd.Parameters.Append cmd.CreateParameter("@return_value",adInteger,adParamReturnValue )
cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput )
cmd("@aaa")=10
cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)
cmd.Execute()
bbb=cmd("@bbb")
rrr=cmd("@return_value")
%>
『陸』 mysql資料庫存儲過程怎麼寫
創建存儲過程
mysql>
delimiter
$
--
delimiter
$是設置
$為命令終止符號,代替默認的分號,因為分號有其他用處.
mysql>
create
procere
sp_test(IN
pi_id
int,
OUT
po_name
varchar(10))
->
begin
->
select
*
from
test.tb_test;
->
select
tb_test.name
into
po_name
from
test.tb_test
where
tb_test.id
=
pi_id;
->
end
->
$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
delimiter
;
--
恢復分號作為分隔終止符號
5.調用存儲過程
mysql>
set
@po_name='';
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
call
sp_test(1,@po_name);
『柒』 Oracle資料庫的存儲過程怎麼寫
Oracle存儲過程基本語法:
CREATEORREPLACEPROCEDURE存儲過程名
IS
BEGIN
NULL;
END;
解釋:
行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束。
『捌』 什麼是資料庫存儲過程
存儲過程(Stored Procere)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。
這類語言主要提供以下功能,讓用戶可以設計出符合應用需求的程序:
1、變數說明
2、ANSI(美國國家標准化組織)兼容的SQL命令(如Select,Update….)
3、一般流程式控制制命令(if…else…、while….)
4、內部函數
(8)資料庫存儲過程怎麼寫擴展閱讀:
種類
1、系統存儲過程
2、本地存儲過程
3、臨時存儲過程
4、遠程存儲過程
5、擴展存儲過程
『玖』 如何編寫資料庫存儲過程
存儲過程代碼參考如下:
create
or
replace
procere
bak_pay_list_xxx(local_net
in
varchar2,bak_month
in
varchar2,ret
out
varchar2)
is
ls_sql
varchar2(1024);
ls_sql_del
varchar2(1024);
begin
...
end
bak_pay_list_xxx;