當前位置:首頁 » 存儲配置 » 存儲過程withas

存儲過程withas

發布時間: 2023-02-22 00:35:53

㈠ oracle的存儲過程中可以用with查詢嗎

可以使用的,with相當於建了個臨時表。但是只能結合游標使用。
比如
procere TEST(OUT_RESULT out MYTYPE) is
begin
open cur for with emp as (select * from scott.emp e where e.empno=7499)
select * from e;

㈡ oracle 中 as 用法有哪幾種

as一般用於存儲過程中定義變數前,還有一種用法是給表或者欄位起別名。

1、存儲過程中:

sql">createorreplaceprocerep_test
as--這里的as表示存儲過程中與變數名字的承接
v_begintimevarchar2(20);
v_endtimevarchar2(20);
v_strvarchar2(10);
begin
v_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
select'badkano'intov_strfromal;
v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
dbms_output.put_line('開始時間為:'||v_begintime);
dbms_output.put_line('結束時間為:'||v_endtime);
end;

2、給欄位起別名或給表起別名:

selectempnoas員工號fromempast;

其中as 員工號表示對empno起別名叫員工號,as t表示emp表的別名叫t。

㈢ 在存儲過程中 動態sql with as 該怎麼實現

先聲明變數啊,比如v_sql
讓他等於你要寫的sql 如:v_sql:='with test as select * from '||v_tab_name||';';
然後用execute immediate v_sql;
表示執行這個語句;
當然那個引號裡面的sql需要進一步完善,舉例下

㈣ sql中創建關於更新的存儲過程

關於delphi調用存儲過程,用sql
server自帶的「創建存儲過程向導」給表login建立一個更新存儲過程。
懸賞分:100
|
離問題結束還有
12

18
小時
|
提問者:風風我依
|
檢舉
存儲過程代碼如下:已知表login有passname和password兩個欄位。
create
procere
[update_login_1]
(@passname_1
[varchar],
@passname_2
[varchar](50),
@password_3
[varchar](50))
as
update
[wqzx].[dbo].[login]
set
[passname]
=
@passname_2,
[password]
=
@password_3
where
(
[passname]
=
@passname_1)
go
-------------------------------------------------------------------------------------
在delp調用該存儲過程,要求只該改欄位中的password,即建一個文本框將裡面內容替換一個記錄中的password,而保持passname不變,簡單講就是修改一個用戶名的密碼。怎麼寫代碼?問題補充:
"強唐華"我試過這樣寫存儲過程了,沒用的,如果可以,那在delphi中怎麼寫代碼調用這個存儲過程?
強調下:這是sql自帶建立的存儲過程,就是由「創建存儲過程向導」生成,我覺得不會錯的,問題是怎麼在delphi中調用該存儲過程,代碼呢?
我建立了一個插入的存儲過程,代碼如下:
with
storedproc1
do
begin
parambyname('@passname_1').asstring:=edit1.text;
parambyname('@password_2').asstring:=edit2.text;
execproc;
if
params[0].asinteger=0
then
messagedlg('添加新用戶名成功!',mtinformation,[mbok],0)
else
messagedlg('添加用戶失敗!',mterror,[mbok],0);
end;
這段代碼是可以成功插入一個記錄的。現在是想修改某個記錄。
回答
共1條
create
procere
[dbo].[update_login]
(@name
varchar(50),
@password
[varchar](50))
as
update
useres
set
password=@password
where
name=
@name
這么簡單的存儲過程,都不會用?
sqlconnection
conn
=
new
sqlconnection("data
source=tq-pc;initial
catalog=tq;user
id=sa;password=123");
sqlcommand
cmd
=
new
sqlcommand("update_login",
conn);
cmd.commandtype
=
commandtype.storedprocere;
cmd.parameters.addwithvalue("@name",
textbox3.text.trim());
cmd.parameters.addwithvalue("@password",
textbox4.text.trim());
conn.open();
int
i
=
cmd.executenonquery();
if
(i
>
0)
response.write("密碼修改成功!");
else
response.write("密碼修改失敗!");

㈤ 如何在VBA中調用存儲過程

方法有幾種

1、

SetConn=Server.CreateObject("ADODB.Connection")
Conn.openstrConn
iferr.number<>0then
response.Write"資料庫鏈接失敗。"'&err.Description
response.End
endIf
setRs=server.CreateObject("adodb.recordset")
'調用存儲過程:[dbo].[Usp_GetUserMenu]
strsql="[dbo].[Usp_GetUserMenu]@UserID='"&Session(g_SessionName&"_UserID")&"'"
'這句話是關鍵,CursorLocation意思是游標本地化
rs.CursorLocation=3
Rs.openstrsql,conn,1,1
iferr.number<>0Then
conn.close
setconn=nothing
endif
fori=1tors.RecordCount
iMenuType=rs("MenuType")
......
rs.MoveNext
next
rs.Close
setrs=nothing
conn.close
setconn=nothing

2. 使用adobd.Command對象

VB6.0調用存儲過程的例子

(說明:以下代碼摘自微軟的MSDN,經過測試沒問題。使用該方法的前提條件是必須知道將要使用的參數化命令的詳細情況。)

打開Form1窗體,Copy以下的代碼到窗體中,該段代碼將測試存儲過程ADOTestRPE的返回值、輸入參數及輸出參數,測試的過程中,可能需要修改鏈接字元串。

SubCreateParms()
DimADOCmdAsNewADODB.Command
DimADOPrmAsNewADODB.Parameter
DimADOConAsADODB.Connection
DimADORsAsADODB.Recordset
DimsParmNameAsString
DimstrConnectAsString
DimrStrAsString

OnErrorGoToErrHandler

strConnect="driver={SQLServer};server=(local);uid=sa;pwd=;database=pubs"

SetADOCon=NewADODB.Connection
WithADOCon
.Provider="MSDASQL"
.CursorLocation=adUseServer'MustuseServersidecursor.
.ConnectionString=strConnect
.Open
EndWith

SetADOCmd.ActiveConnection=ADOCon
WithADOCmd
.CommandType=adCmdStoredProc
.CommandText="ADOTestRPE"
EndWith

'.
sParmName="Return"
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamReturnValue,,0)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=-1

'
'parameter.
sParmName="Output"
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamOutput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sP

armName).Value=999

'Parameter2
sParmName="R1Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=1

'Parameter3
sParmName="P1Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0

'Parameter4
sParmName="E1Num"'
'1.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0

'Parameter5
sParmName="R2Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=2

'Parameter6
sParmName="P2Num"'.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0

'Parameter7
sParmName="E2Num"'
'2.
SetADOPrm=ADOCmd.CreateParameter(sParmName,adInteger,_
adParamInput)
ADOCmd.Parameters.AppendADOPrm
ADOCmd.Parameters(sParmName).Value=0

SetADORs=ADOCmd.Execute

DoWhile(NotADORsIsNothing)
IfADORs.State=adStateClosedThenExitDo
WhileNotADORs.EOF
Fori=0ToADORs.Fields.Count-1
rStr=rStr&":"&ADORs(i)
Nexti
Debug.PrintMid(rStr,3,Len(rStr))
ADORs.MoveNext
rStr=""
Wend
Debug.Print"----------------------"
SetADORs=ADORs.NextRecordset
Loop

Debug.Print"Return:"&ADOCmd.Parameters("Return").Value
Debug.Print"Output:"&ADOCmd.Parameters("Output").Value

GoToShutdown

ErrHandler:
CallErrHandler(ADOCon)
ResumeNext

Shutdown:
SetADOCmd=Nothing
SetADOPrm=Nothing
SetADORs=Nothing
SetADOCon=Nothing
EndSub

PrivateSubCommand1_Click()
CallCreateParms
EndSub

SubErrHandler(objConAsObject)
DimADOErrAsADODB.Error
DimstrErrorAsString

ForEachADOErrInobjCon.Errors
strError="Error#"&ADOErr.Number&vbCrLf&ADOErr.Description_
&vbCr&_
"(Source:"&ADOErr.Source&")"&vbCr&_
"(SQLState:"&ADOErr.SQLState&")"&vbCr&_
"(NativeError:"&ADOErr.NativeError&")"&vbCr


IfADOErr.HelpFile=""Then
strError=strError&"NoHelpfileavailable"&vbCr&vbCr
Else
strError=strError&"(HelpFile:"&ADOErr.HelpFile&")"_
&vbCr&"(HelpContext:"&ADOErr.HelpContext&")"&_
vbCr&vbCr
EndIf

Debug.PrintstrError
Next

objCon.Errors.Clear
EndSub

㈥ 什麼是存儲過程

定義:
將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
講到這里,可能有人要問:這么說存儲過程就是一堆SQL語句而已啊?
Microsoft公司為什麼還要添加這個技術呢?
那麼存儲過程與一般的SQL語句有什麼區別呢?
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
存儲過程的種類:
1.系統存儲過程:以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作,
如 sp_help就是取得指定對象的相關信息
2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用戶自定義的存儲過程,這是我們所指的存儲過程
常用格式
Create procere procee_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解釋:
output:表示此參數是可傳回的
with {recompile|encryption}
recompile:表示每次執行此存儲過程時都重新編譯一次
encryption:所創建的存儲過程的內容會被加密
如:
表book的內容如下
編號 書名 價格
001 C語言入門 $30
002 PowerBuilder報表開發 $52
實例1:查詢表Book的內容的存儲過程
create proc query_book
as
select * from book
go
exec query_book
實例2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(編號,書名,價格) Values(@param1,@param2,@param3)
select @param4=sum(價格) from book
go
執行例子:
declare @total_price money
exec insert_book '003','Delphi 控制項開發指南',$100,@total_price
print '總金額為'+convert(varchar,@total_price)
go
存儲過程的3種傳回值:
1.以Return傳回整數
2.以output格式傳回參數
3.Recordset
傳回值的區別:
output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中
實例3:設有兩個表為Proct,Order,其表內容如下:
Proct
產品編號 產品名稱 客戶訂數
001 鋼筆 30
002 毛筆 50
003 鉛筆 100
Order
產品編號 客戶名 客戶訂金
001 南山區 $30
002 羅湖區 $50
003 寶安區 $4
請實現按編號為連接條件,將兩個表連接成一個臨時表,該表只含編號.產品名.客戶名.訂金.總金額,
總金額=訂金*訂數,臨時表放在存儲過程中
代碼如下:
Create proc temp_sale
as
select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額
into #temptable from Proct a inner join Order b on a.產品編號=b.產品編號
if @@error=0
print 'Good'
else
&n bsp; print 'Fail'
go

存儲過程介紹
一、先介紹一下什麼是存儲過程
存儲過程是利用SQL Server所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的Pro-SQL和Informix的資料庫系統能夠中的Informix-4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數

二、存儲過程的書寫格

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這兩個語句。

例子:
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id

例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序

三、在SQL Server中執行存儲過程

在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt

以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果

sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。

存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化 後存儲在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯系的過程可以組合在一起構成程序包。
使用存儲過程有以下的優點:
* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可 以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。
* 可保證數據的安全性和完整性。
# 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。
# 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執 行。
* 可以降低網路的通信量。
* 使體現企業規則的運算程序放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改 任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運 算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序 工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可 以了,應用程序無須任何變化。

熱點內容
api加密java 發布:2025-07-12 18:15:55 瀏覽:443
爬蟲專用編譯器 發布:2025-07-12 18:15:10 瀏覽:458
安卓版糖果傳奇叫什麼 發布:2025-07-12 18:06:26 瀏覽:262
編程素質人 發布:2025-07-12 18:04:17 瀏覽:671
在雲伺服器安裝sqlserver 發布:2025-07-12 18:04:05 瀏覽:737
釘釘oa初始密碼是多少 發布:2025-07-12 18:02:34 瀏覽:72
樓道口防盜門密碼該如何使用 發布:2025-07-12 17:53:55 瀏覽:351
mysql源碼目錄 發布:2025-07-12 17:48:41 瀏覽:442
資料庫導出dmp 發布:2025-07-12 17:39:08 瀏覽:336
濟南少兒編程哪家好 發布:2025-07-12 17:33:09 瀏覽:128