資料庫的存儲過程創建
A. 什麼是資料庫存儲過程
SQL的調用可以分為函數和存儲過程。
個人理解,其實函數和存儲過程是相似的,至少在引用的時候跟函數很是一樣。或者乾脆把存儲過程理解為另一種函數,另一種經過優化的函數。它的優點在於,存儲過程在被編譯後會被直接保存在資料庫中,成為資料庫的一部分,以後就可以反復調用,運行速度快,效率高,這些是函數做不到的。
B. mysql如何創建存儲過程
1 用mysql客戶端登入
2 選擇資料庫
mysql>use test
3 查詢當前資料庫有哪些存儲過程
mysql>show procere status where Db='test'
4 創建一個簡單的存儲過程
mysql>create procere hi() select 'hello';
5 存儲過程創建完畢,看怎麼調用它
mysql>call hi();
顯示結果 mysql> call hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
6 一個簡單的儲存過程就成功了
C. 如何利用存儲過程創建資料庫
抱歉我開始的答案 我試過了 沒法辦到 因為通過存儲過程 創建資料庫 和 表, 資料庫名或者表名都必須是常量 不能為變數 也就是說 不能通過傳輸入參數的形式為它指定名字 同樣我也試過了 資料庫的路徑 也同樣不能跟參數 我可以把我的代碼給你看看 你可以試一下 也許你能辦到
在 sa 用戶登陸下 在master 資料庫中 :
create proc sp_createdatabase
@basename varchar(20),
@path varchar(50)
as
create database @basename
on primary
(
name=@basename,
filename=@path+'.mdf',
size=5mb,
filegrowth=1mb
)
log on
(
name=@basename,
filename=@path+'.ldf',
size=2mb,
filegrowth=1mb
)
D. 如何編寫資料庫存儲過程
1
CREATE
OR
REPLACE
PROCEDURE
存儲過程名
2
IS
3
BEGIN
4
NULL;
5
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體的結束.
存儲過程創建語法:
create
or
replace
procere
存儲過程名(param1
in
type,param2
out
type)
as
變數1
類型(值范圍);
--vs_msgVARCHAR2(4000);
變數2
類型(值范圍);
Begin
Select
count(*)
into
變數1
from
表A
where列名=param1;
If
(判斷條件)
then
Select
列名
into
變數2
from
表A
where列名=param1;
Dbms_output。Put_line(『列印信息』);
Elsif
(判斷條件)
then
Dbms_output。Put_line(『列印信息』);
Else
Raise
異常名(NO_DATA_FOUND);
End
if;
Exception
When
others
then
Rollback;
End;
E. 資料庫中怎樣創建加密的存儲過程
可以例用Oracle 自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 輸入參數是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb
4、運行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
過程已創建。
5、運行存儲過程
SQL> set serveroutput on
SQL> execute test1(1);
輸入參數是1
PL/SQL 過程已成功完成。
6、查看存儲過程的代碼
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
結果:看不到其原碼
F. 如何建立一個資料庫存儲過程
由於不知道你的表結構,所以以下過程供參考(提醒:創建存儲過程前,先選版好要執行創建語句的權資料庫)
--------------------------------------------------
CREATE PROCEDURE getavg--存儲過程名字為getavg
@kc varchar(255),--假設課程號欄位為字元類型
@avg decimal(5,1) OUTPUT --輸出平均成績
AS
--課程號為@kc的平均成績
SELECT @avg = avg(成績欄位)
from 表名
where 課程號欄位 = @kc
return @avg
GO
------
以上為創建存儲過程,以下為調用
declare @a decimal(5,1)
EXECUTE getavg '課程號', @avg = @a output
print @a
G. 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);
H. (SQL資料庫)我想創建一個存儲過程來更新表中的數據
create procere update_table ( @c_tbname varchar(128), -- 要更新的表名
@c_upcolname varchar(1000), -- 要更新的欄位列表,以豆號隔開
@c_updata varchar(1000), -- 要更新的數據列表,以豆號隔開,要與相應的列一一對應
@c_id varchar(100) -- 要更新的關鍵字,沒有關鍵字的不能更新
)
as
begin
declare @c_sql varchar(max)
declare @i_bcol int
declare @i_ecol int
declare @i_bdata int
declare @i_edata int
if @c_id is null or @c_id = ''
return
set @i_bcol= 1
set @i_bdata= 1
set @c_sql = ' update ' + @c_tbname + ' set '
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
while @i_ecol > 0
begin
set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,@i_ecol - 1 ) + ' = '
set @i_edata= charindex(',' , @c_updata, @i_bdata)
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,@i_edata- 1 ) + ''' ,'
set @i_bcol = @i_ecol + 1
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
end
set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,len@c_upcolname) - 1 ) + ' = '
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,len(@c_updata)- 1 ) + ''' '
set @c_sql = @c_sql + ' where id = ''' + @c_id + ''' '
exec ( @c_sql )
end
I. 如何創建SQL存儲過程
CREATE proc ProcBlacker_ADD --定義存儲過程
@UserID int, --用戶輸入的參數1
@strName varchar(20), --用戶輸入的參數2
@strMobile varchar(20), --用戶輸入的參數3
@strRemark nvarchar(200) --用戶輸入的參數4,最後一個不需要加,
as
declare @ID int --定義變數
declare @Account varchar(50) --同上
declare @Content varchar(50) --同上
if not exists(select * from tblBlackList(nolock) --如果不存在則執行下面的語句.
where fdcMobile=@strMobile)
begin
insert into tblBlackList(fdcMobile,fdcName,fdtTm,fdcMemo)
values(@strMobile,@strName,getdate(),@strRemark) --getdate()獲取當前系統的時間
set @ID=@@identity --返回一行記錄
select @Account=Account from dbo.UserInfo where UserID=@UserID
set @Content='添加黑名單('+'操作者:'+@Account+','+'用戶名:'+@strName+'手機:'+@strMobile+'備注:'+@strRemark+')' --設置變數的值
exec ProcRecordLog @Account,'添加',@Content ---執行儲過程ProcRecordLog
return @ID
end
GO
這個存儲後面調用了ProcRecordLog存儲過程