當前位置:首頁 » 存儲配置 » 存儲過程的實例

存儲過程的實例

發布時間: 2022-06-10 01:00:35

『壹』 oracle資料庫存儲過程實例

創建存儲過程的語句如下:
CREATE[OR REPLACE] PROCEDURE<過程名>
<參數1>,「方式l]<數據類型1>,
<參數2>,[ 方式2]<數據類型2>,
……)
IS|AS (is或as完全等價)
BEGIN
PL/sql過程體
END<過程名>

例如,下面是一個刪除表的存儲過程:

--參數:tableName 要刪除的表名
create or replace procere del_table(tableName varchar2) as
--定義變數
sql_del_table long;
begin
--構造sql語句
sql_del_table := 'drop table ' || tableName;
--執行
EXECUTE IMMEDIATE sql_del_table;

end del_table;

『貳』 給一個java存儲過程的例子。簡單一點的,最好有注釋

以下是java調用mysql所寫的存儲過程的一個例子:(希望對你有幫助)
Connection conn = DBUtil.getConnection();
ResultSet rs = null;
try {
CallableStatement call = conn
.prepareCall("{Call TEST_PROC_RET_CURSOR(?,?)}");
call.setInt(1, 6);
call.registerOutParameter(2, Types.VARCHAR);
String outStr = call.getString(2);
//
call.registerOutParameter(2, Types.VARCHAR);
//
call.registerOutParameter(3, Types.VARCHAR);
call.execute();
rs = call.getResultSet();
while(rs.next()){
System.out.println("存儲過程得到的第一個結果集:" + rs.getString(4));
}
if (call.getMoreResults() == true) {
rs = call.getResultSet();
while(rs.next()){
System.out.println("存儲過程得到的第二個結果集:" + rs.getString(2));
}
}

System.out.println(call.getString(2));
/*
* if (rs.next()) {
System.out.println("存儲過程得到的第一個返回值是:" +
* rs.getString(2));
}
*/
} catch (SQLException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}

『叄』 SQL存儲過程實例

樓下的太麻煩了吧。emp員工表,輸入任何部門號,返回部門的總工資,把總工資和部門好,分別放進emp2表裡。
編寫存儲過程查詢某部門員工的工資總和
create or replace procere my_text(v_deptno number)
is
cursor c is select* from emp;
v1 number:=0;
begin
for a in c loop
if(a.deptno=v_deptno) then
v1:=v1+a.sal;
end if;
end loop;
insert into emp2 values(v1,v_deptno);
end;
是不是很吊啊?樓主?

『肆』 幫忙舉個SqlServer的存儲過程的例子

使用CREATE PROCEDURE語句創建一個名稱為proc_bjrs的存儲過程,用於檢索現有班級及人數。 CREATE PROCEDURE proc_bjrs AS SELECT DISTINCT(班級表.班級編號),班級表.班級名稱,人數=COUNT(學生基本信息表.學號) FROM 學生基本信息表,班級表 WHERE 班級表.班級編號=學生基本信息表.班級編號 GROUP BY 班級表.班級編號,班級表.班級名稱 GO

『伍』 求一些簡單的存儲過程實例

IF OBJECT_ID('proc_SearchEmpTest')IS NOT NULL
DROP PROC proc_SearchEmpTest
GO
CREATE PROC proc_SearchEmpTest
//這下面的你可以忽略,把你要的參數按照這個格式往裡面寫就可以了
@PageIndex INT, --頁碼
@PageSize INT, --分頁大小
@StrSql NVARCHAR(1000)='' --傳入sql查詢語句
AS
//AS中的操作就是你想做的操作,比如select id form 標明 where name="",寫多個Sql語句
DECLARE @SQL NVARCHAR(1000)
SET @SQL=@StrSql
--把符合的數據創建臨時表
EXEC(@SQL)
--1.查詢滿足條件的信息
--EXEC SP_EXECUTESQL @SQL
// ##TabTmp是一個臨時表,這個是我寫的,你可以按照自己的來,臨時表在有特殊需要時才用,你可以忽略這塊
SELECT * FROM ##TabTmp WHERE A BETWEEN (@PageIndex-1)*(@PageSize)+1 AND (@PageIndex)* (@PageSize)
--2.記錄滿足條件的個數
DECLARE @count INT
SELECT @count=COUNT(*)FROM ##TabTmp
DROP TABLE ##TabTmp
print @count
--4.返回型參數,返回參數一般不需要,如果你要從一個存儲中接受的一個返回值才有return這種操作
RETURN @count
go
//調用存儲過程,你定義了多少個參數就是傳多少個參數
exec proc_SearchEmpTest 2,15,'select row_number()over(order by id) as A,* into ##TabTmp from guojiadiqudata where 1=1 and name like %定西%'

『陸』 簡單sql存儲過程實例、儲過程實戰

實例1:只返回單一記錄集的存儲過程。
銀行存款表(bankMoney)的內容如下
Id
userID
Sex
Money
001
Zhangsan

30
002
Wangwu

50
003
Zhangsan

40
要求1:查詢表bankMoney的內容的存儲過程
create
procere
sp_query_bankMoney
as
select
*
from
bankMoney
go
exec
sp_query_bankMoney
注*
在使用過程中只需要把中的SQL語句替換為存儲過程名,就可以了很方便吧!
實例2(向存儲過程中傳遞參數):
加入一筆記錄到表bankMoney,並查詢此表中userID=
Zhangsan的所有存款的總金額。
Create
proc
insert_bank
@param1
char(10),@param2
varchar(20),@param3
varchar(20),@param4
int,@param5
int
output
with
encryption
---------加密
as
insert
bankMoney
(id,userID,sex,Money)
Values(@param1,@param2,@param3,
@param4)
select
@param5=sum(Money)
from
bankMoney
where
userID='Zhangsan'
go
在SQL
Server查詢分析器中執行該存儲過程的方法是:
declare
@total_price
int
exec
insert_bank
'004','Zhangsan','男',100,@total_price
output
print
'總余額為'+convert(varchar,@total_price)
go
在這里再啰嗦一下存儲過程的3種傳回值(方便正在看這個例子的朋友不用再去查看語法內容):
1.以Return傳回整數
2.以output格式傳回參數
3.Recordset
傳回值的區別:
output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中。
實例3:使用帶有復雜
SELECT
語句的簡單過程
下面的存儲過程從四個表的聯接中返回所有作者(提供了姓名)、出版的書籍以及出版社。該存儲過程不使用任何參數。
USE
pubs
IF
EXISTS
(SELECT
name
FROM
sysobjects
WHERE
name
=
'au_info_all'
AND
type
=
'P')
DROP
PROCEDURE
au_info_all
GO
CREATE
PROCEDURE
au_info_all
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
GO
au_info_all
存儲過程可以通過以下方法執行:
EXECUTE
au_info_all
實例4:使用帶有參數的簡單過程
CREATE
PROCEDURE
au_info
@lastname
varchar(40),
@firstname
varchar(20)
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
WHERE
au_fname
=
@firstname
AND
au_lname
=
@lastname
GO
au_info
存儲過程可以通過以下方法執行:
EXECUTE
au_info
'Dull',
'Ann'
--
Or
EXECUTE
au_info
@lastname
=
'Dull',
@firstname
=
'Ann'
--
Or
EXECUTE
au_info
@firstname
=
'Ann',
@lastname
=
'Dull'
實例5:使用帶有通配符參數的簡單過程
CREATE
PROCEDURE
au_info2
@lastname
varchar(30)
=
'D%',
@firstname
varchar(18)
=
'%'
AS
SELECT
au_lname,
au_fname,
title,
pub_name
FROM
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
=
ta.au_id
INNER
JOIN
titles
t
ON
t.title_id
=
ta.title_id
INNER
JOIN
publishers
p
ON
t.pub_id
=
p.pub_id
WHERE
au_fname
LIKE
@firstname
AND
au_lname
LIKE
@lastname
GO
au_info2
存儲過程可以用多種組合執行。下面只列出了部分組合:
EXECUTE
au_info2
--
Or
EXECUTE
au_info2
'Wh%'
--
Or
EXECUTE
au_info2
@firstname
=
'A%'
--
Or
EXECUTE
au_info2
'[CK]ars[OE]n'
--
Or
EXECUTE
au_info2
'Hunter',
'Sheryl'
--
Or
EXECUTE
au_info2
'H%',
'S%'

『柒』 sql 存儲過程是怎麼實現的 簡單的例子和解釋!

存儲過程就是一組保存在資料庫中的sql語句,在需要的時候可以調用

最簡單的,比如

create procere test as
delete from t_1; ---刪除t_1表的所有記錄
在sql server查詢分析器執行時:

exec test; --執行過程test,刪除了表t_1的所有記錄

當然,沒有人這樣使用存儲過程,存儲過程可以接受參數,處理大量sql語句,並返回結果。
當在編寫軟體的過程中,碰到需要進行復雜的資料庫操作時,可能需要大量的sql語句,這時候可以先在資料庫中創建存儲過程,將sql語句都寫在存儲過程里,可以視情況加入參數,也可以返回處理結果。編寫軟體時,在適當的地方引用並執行這個存儲過程就好了,至於怎麼引用,不同的軟體開發語言有不同的語法。
存儲過程是預編譯的,這樣可以提高執行效率,對於軟體代碼的維護也有好處

『捌』 資料庫中的存儲過程到底是什麼能不能舉個詳細的例子

存儲過程,實際就是一段寫在資料庫中的代碼。。
由於此段資料庫操作代碼由伺服器完成,而客戶端只是進行簡單的參數提交,所以,可以有效的利用伺服器的強勁而減小對客戶機的負合。
如:你想插入一條數據到資料庫。
雖然你的要求是,先檢查表裡面是否己存在該項。
如果不存在就Insert,如果存在就UPDATE。
這個時候,你就可以把這個判斷用存儲過程來寫。
你的程序只要提示你想要保存到資料庫裡面的東西即可。
下面就是一個簡單的存儲過程。
CREATE
PROCEDURE
[insert_A_Employees]
(@fWorkNo
[int],
@fWorkName
[char](10),
@fDeptName
[varchar](20),
@fGroupName
[varchar](20),
@fRecordDate
[datetime])
AS
declare
@iCount
int
select
@iCount
=
count(*)
from
A_EMPLOYEES
where
@fWorkNo
=
fWORKNO
--統計該工號在資料庫的數量賦值給
@iCount
if
@iCount
=
0
--如果資料庫中不存在該工號
begin
INSERT
INTO
[CLKQ].[dbo].[A_Employees]
--則插入數據
(
[fWorkNo],
[fWorkName],
[fDeptName],
[fGroupName],
[fRecordDate])
VALUES
(
@fWorkNo,
@fWorkName,
@fDeptName,
@fGroupName,
@fRecordDate)
return
1
--返回一個標識
end
else
begin
--否則則更新數據
update
[CLKQ].[dbo].[A_Employees]
set
[fWorkName]=@fWorkName,
[fDeptName]=@fDeptName,
[fGroupName]=@fGroupName,
[fRecordDate]=@fRecordDate
where
[fWorkNo]=@fWorkNo
return
0
--返回一個標識
end
GO
此時你只要在客戶端程序提供:
@fWorkNo
,
@fWorkName
,
@fDeptName
,
@fGroupName
,
@fRecordDate
這幾個值就行了。。
其它處理過程就由伺服器方處理了。
以上是以
SQL
資料庫為例。。。
ACCESS
等資料庫沒有此功能。

『玖』 存儲過程的結構是什麼樣的

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這一參數輸出給調用這一存儲過程的程序。

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資料庫的問題:
先建立一個表,並添加一些數據來進行演示:
create
table
t_student(
id
int
not
null,
name
nvarchar
(10)
null,
age
tinyint
null,
school
nvarchar(20)
null,
class
nvarchar(10)
null,
score
float
null,
constraint
[pk_student_id]
primary
key
clustered(id)
)
go
insert
into
t_student
values(1,'張小紅',8,'育才小學','一班',92)
insert
into
t_student
values(2,'王麗麗',8,'育才小學','一班',90)
insert
into
t_student
values(3,'張燕',7,'雲華小學','二班',86)
insert
into
t_student
values(4,'劉華',6,'雲華小學','二班',85)
一、exec
exec命令可以執行一個存儲過程也可以執行一個動態sql語句。先來看看怎麼執行存儲過程:
新建一個存儲過程
sp_getstudent
,返回
成績大於90
分的學生:
create
procere
[dbo].[sp_getstudent]
@score
float,
@nums
int
output
as
begin
set
nocount
on;
select
*
from
t_student
where
score
>=@score
select
@nums=count(1)
from
t_student
where
score
>=@score
if(@nums>0)
return
1
else
return
0
end
go
該存儲過程涉及了
查詢操作、返回值和輸出參數,我們來看用exec
命令如何調用:
declare
@return_value
int,
@outnums
int
exec
@return_value
=
[dbo].[sp_getstudent]
@score
=
90,
@nums
=
@outnums
output
select
@outnums
as
n'大於90分的人數'
select
'返回值'
=
@return_value
go
執行結果:
我們發現exec
執行存儲過程和我們平時程序執行一個方法是幾乎一樣的,返回值參數
直接就可以等於存儲過程的執行後的返回值,輸出參數
在後面需要增加
output
關鍵字。

熱點內容
神速流量卡密碼在哪裡兌換 發布:2024-05-01 16:21:10 瀏覽:395
c語言中3d是什麼意思 發布:2024-05-01 15:43:40 瀏覽:840
雲伺服器過期了怎麼找回 發布:2024-05-01 15:41:06 瀏覽:262
阿里伺服器甘肅雲空間 發布:2024-05-01 15:35:36 瀏覽:254
陳建斌超級訪問 發布:2024-05-01 15:35:00 瀏覽:89
lol開什麼配置最好 發布:2024-05-01 15:23:37 瀏覽:328
如何在vivo手機裡面的微信設置密碼 發布:2024-05-01 15:22:57 瀏覽:862
四川電信新增伺服器地址雲空間 發布:2024-05-01 15:17:55 瀏覽:707
校園編程調鈴 發布:2024-05-01 15:00:14 瀏覽:837
編譯原理第三版課後習題答案文庫 發布:2024-05-01 14:49:44 瀏覽:976