當前位置:首頁 » 服務存儲 » 判斷存儲過程是否存在
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

判斷存儲過程是否存在

發布時間: 2022-01-28 17:01:33

Ⅰ java怎麼判斷是否有調用存儲過程

如果你用Hibernate的話,它會拋出org.hibernate.exception.sqlGrammarException異常
如果你用的其它的,也會拋出相應的異常,通過catch這個異常就可以進行簡單的判斷。
顯然這樣的判斷不是最准確的,但是應該可以滿足你的需求。

Ⅱ oracle資料庫判斷表(由存儲過程創建)的存在

你不是已經drop table又重新創建了,有什麼問題嗎?
你的思路是對的,要創建前應該先判斷,如果存在就刪掉重建,不存在的話就直接創建。
只是,可以稍微簡化一下代碼,比如那兩個select,不需要用execute immediate的方式。對於dml語句,可以直接執行,比如select count(*) into vCount from user_tables where table_name =vTname,而創建語句直接放到if判斷裡面,這樣顯得結構上更緊湊和邏輯性。

Ⅲ 在存儲過程中,判斷一個臨時表是否存在,怎樣寫

臨時表可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。 本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。 SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表: CREATE TABLE #MyTempTable (cola INT PRIMARY KEY) INSERT INTO #MyTempTable VALUES (1) 如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過 116 個字元。 除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去: 當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。 所有其它本地臨時表在當前會話結束時自動除去。 全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。 在存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所創建的表,例如: CREATE PROCEDURE Test2ASCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (2) SELECT Test2Col = x FROM #tGOCREATE PROCEDURE Test1ASCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (1) SELECT Test1Col = x FROM #tEXEC Test2GOCREATE TABLE #t(x INT PRIMARY KEY) INSERT INTO #t VALUES (99)GOEXEC Test1GO 下面是結果集: (1 row(s) affected)Test1Col-----------1 (1 row(s) affected)Test2Col-----------2 當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定 FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN KEY 約束中不能引用臨時表。 考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。有關更多信息,請參見 table。

Ⅳ 存儲過程判斷

create procere procName
@id int
as
if(exists(select * from tableName where id=@id))
begin
update tableName
set columnName='value'
end
else
begin
insert into tableName
values('values1','values2')
end
打字不易,如滿意,望採納。

Ⅳ MySQL判斷索引是否存在的存儲過程

創建mysql資料庫時需要創建索引,但是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))beginDECLARE str VARCHAR(250); SET @str=concat(' drop index ',p_idxname,' on ',p_tablename); SELECT COUNT(*) INTO @cnt FROM information_schema.statistics WHERE TABLE_NAME=p_tablename AND INDEX_NAME=p_idxname; if @cnt >0 then EXECUTE stmt ;end if;end $$DELIMITER ;使用時傳入表名和索引名即可,如CALL Del_idx('tableA', 'indexA');

Ⅵ sql存儲過程 如何用IF來判斷變數表內數據是否存在

可以定義一個變數接收值

declare @A as varchar(max),@count integer

select @A='select @count = count(*) from '+ @變數表 + ' where 姓名='+@姓名
exec(@A)
if @count > 0
...

Ⅶ 判斷存儲過程是否存在

----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='存儲過程名';

有問題再追問。

Ⅷ sql 判斷庫里是否存在GetUser 存儲過程,如果存在,不做更改,如果不存在,就新建這個存儲過程 代碼要怎麼寫

通過系統對項表查詢過程是否存在。
具體寫法如下(CREATE 以後的語句換成你自已的存儲過程)
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetUser]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
CREATE procere GetUser --請換成你自已的存儲過程

@user varchar(100) output
as
set @user=isnull((select username from usertable where usercode=@user--
GO

Ⅸ 建立一個存儲過程 需要把查到的數據插入到進去 並且判斷插入的數據是否存在 如果存在就不再插入。求語句

大致的過程樓上二位都寫的差不多了,如果你不是一竅不通的話,應該能模仿著寫出來了

Ⅹ 如何判斷存儲過程是否存在在存儲過程

----sqlserver判斷
if (exists (select * from sys.objects where name = '存儲過程名稱'))
drop proc proc_test
go
create.....
----oracle判斷
select status from all_objects where object_type = 'PROCEDURE' and OWNER='用戶名' and object_name='存儲過程名';
or
select status from user_objects where object_type = 'PROCEDURE' and object_name='存儲過程名';