存儲過程exists
1、 創建語法
createproc|procerepro_name
[{@參數數據類型}[=默認值][output],
{@參數數據類型}[=默認值][output],
....
]
as
SQL_statements
2、 創建不帶參數存儲過程
--創建存儲過程
if(exists(select*fromsys.objectswherename='proc_get_student'))
dropprocproc_get_student
go
createprocproc_get_student
as
select*fromstudent;
--調用、執行存儲過程
execproc_get_student;
3、 修改存儲過程
--修改存儲過程
alterprocproc_get_student
as
select*fromstudent;
4、 帶參存儲過程
--帶參存儲過程
if(object_id('proc_find_stu','P')isnotnull)
dropprocproc_find_stu
go
createprocproc_find_stu(@startIdint,@endIdint)
as
select*fromstudentwhereidbetween@startIdand@endId
go
execproc_find_stu2,4;
5、 帶通配符參數存儲過程
--帶通配符參數存儲過程
if(object_id('proc_findStudentByName','P')isnotnull)
dropprocproc_findStudentByName
go
createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')
as
select*fromstudentwherenamelike@nameandnamelike@nextName;
go
execproc_findStudentByName;execproc_findStudentByName'%o%','t%';
(1)存儲過程exists擴展閱讀:
SQL存儲過程優點:
1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
2. SQL server 2000 中的存儲過程這個代碼是什麼意思if exists(select name from sysobjects
在整個資料庫裡面查找 名字是'student_info' ,類型是P(其中P表示procere ,存儲過程)的 存儲過程,如果找到就刪除它
if exists(select name from sysobjects where name='student_info' and type='P')
---這行就是查找名字是 'student_info',類型為 P 的存儲過程;
drop procere student_info --如果找到就刪除
go
如果沒看錯的話,接下來應該就是 創建一個名為'student_info'的存儲過程
使用上面的代碼可以防止 存儲過程 重名,減少錯誤:
接下來應該是:
create procere student_info
as select語句……
3. SQL中EXISTS怎麼用
EXISTS在SQL中的作用是:檢驗查詢是否返回數據。
select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,當 where 後面的條件成立,則列出數據,否則為空。
exists強調的是是否返回結果集,不要求知道返回什麼。比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
只要exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1
如果改成「select 2 from grade where ...」,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。
(3)存儲過程exists擴展閱讀:
Exists 方法描述如果在 Dictionary對象中指定的關鍵字存在,返回True,若不存在,返回False。
語法object.Exists(key)Exists 方法語法有如下幾部分:部分描述Object必需的。始終是一個 Dictionary對象的名字。Key必需的,在 Dictionary對象中搜索的Key值。
exist相當於存在量詞:表示集合存在,也就是集合不為空只作用一個集合.
例如 exist P表示P不空時為真; not exist P表示p為空時為真in表示一個標量和一元關系的關系。
例如:s in P表示當s與P中的某個值相等時為真; s not in P 表示s與P中的每一個值都不相等時為真。
exits與not exits
exists(sql 返回結果集為真)
not exists(sql 不返回結果集為真)
如果not exists子查詢只有自己本身的查詢條件,這樣只要子查詢中有數據返回,就證明是false,結果在整體執行就無返回值;一旦跟外面的查詢關聯上,就能准確查出數據。
4. mysql中 儲存過程 if exists 該怎麼寫
mysql沒有drop index index_name if exists on table_name這樣的語法,所以寫一個存儲過程來判斷,如果存在就刪除後再創建新的索引。存儲過程如下:
--
-- procere of delete index
--
drop procere if exists Del_idx;
DELIMITER $$
CREATE PROCEDURE Del_idx(IN p_tablename varchar(200), IN p_idxname VARCHAR(200))
begin
5. ORACLE中怎麼使用exists來判斷是否存在記錄
如下:如果t表中的usercode在a表的customerno中存在相等的記錄,則t表中的記錄被查詢出來。
select t.*
from llclaimuser t
where 1 = 1
and exists (select a.customerno from ldperson a where a.customerno = t.usercode);
exists的寫法相對比較復雜,而且exists只能判斷是否存在,不能返回具體的條數,不能進行相應的循環處理,也不見的比count(1)效率好多少,所以用你這種寫法基本就可以了,簡單明了,好維護,如果需要還可以根據查詢出的記錄數進行循環。
6. while exists()的內容如何解釋呢,該存儲過程是如何判斷當前節點是否存在子節點的
while是循環,exists是判斷是否存在,返回的是布爾值(存在即為TRUE,反之為FALSE),整個意思就是說只要存在select pid from group where pid not in (select gid from group)這個查詢里的所有pid並且pid不等於0,就會一直執行BEGIN...END中的語句
7. MySQL存儲過程中能不能用IF exists(SELECT * from form__rmms_pofm_fundsmanage) THEN ...END
你這個if是要判斷uisp_lw_100000表空間里是不是存在表form__rmms_pofm_fundsmanage。
你這樣判斷如果是不存在就直接報錯了。所以就不能運行通過。
你在上邊再聲明一個變數tb_name用來存放你要找的這個表名。
select table_name into tb_name from information_schema.tables where table_schema='uisp_lw_100000' AND TABLE_NAME='form__rmms_pofm_fundsmanage';
這樣你判斷tb_name是不是空就行了。判斷跟你的while跳出的判斷一樣。
8. SQL創建存儲過程中 if exists 是什麼意思
SQL創建存儲過程中 if exists的意思是「是否存在」,判斷某個存儲過程是否存在,如果存在就刪除,如果不存在就創建。
--創建存儲過程
if (exists (select * from sys.objects where name = 'proc_get_student'))
drop proc proc_get_student
go
create proc proc_get_student
as
select * from student;
--調用、執行存儲過程
exec proc_get_student;
1、 存儲過程的優點
A、 存儲過程允許標准組件式編程
存儲過程創建後可以在程序中被多次調用執行,而不必重新編寫該存儲過程的SQL語句。而且資料庫專業人員可以隨時對存儲過程進行修改,但對應用程序源代碼卻毫無影響,從而極大的提高了程序的可移植性。
B、 存儲過程能夠實現較快的執行速度
如果某一操作包含大量的T-SQL語句代碼,分別被多次執行,那麼存儲過程要比批處理的執行速度快得多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的存儲計劃。而批處理的T-SQL語句每次運行都需要預編譯和優化,所以速度就要慢一些。
C、 存儲過程減輕網路流量
對於同一個針對資料庫對象的操作,如果這一操作所涉及到的T-SQL語句被組織成一存儲過程,那麼當在客戶機上調用該存儲過程時,網路中傳遞的只是該調用語句,否則將會是多條SQL語句。從而減輕了網路流量,降低了網路負載。
D、 存儲過程可被作為一種安全機制來充分利用
系統管理員可以對執行的某一個存儲過程進行許可權限制,從而能夠實現對某些數據訪問的限制,避免非授權用戶對數據的訪問,保證數據的安全。
9. 判斷存儲過程是否存在
----sqlserver判斷
if(exists(select*fromsys.objectswherename='存儲過程名稱'))
dropprocproc_test
go
create.....
----oracle判斷
selectstatusfromall_objectswhereobject_type='PROCEDURE'andOWNER='用戶名'andobject_name='存儲過程名';
or
selectstatusfromuser_objectswhereobject_type='PROCEDURE'andobject_name='存儲過程名';
有問題再追問。
10. SQL 中存儲過程怎麼使用
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123