當前位置:首頁 » 存儲配置 » 存儲過程執行狀態

存儲過程執行狀態

發布時間: 2022-03-03 22:42:16

⑴ plsql developer 里怎麼寫存儲過程,和執行存儲過程,怎麼查看存儲過程和出現什麼情況算成功執行存儲過程

--建立測試數據:
create table BOOK(編號 number(10),書名 varchar2(20),價格 varchar2(20))

insert into BOOK values(100,'aa','88.77')

select * from BOOK

--建立存儲過程:
create or replace procere query_BOOK(name IN OUT NUMBER,MY_BOOK OUT VARCHAR2,MY_BOOK2 OUT VARCHAR2) is
begin
select 編號 ,書名,價格 INTO name,MY_BOOK,MY_BOOK2 from BOOK where 編號=name;
end query_BOOK;

--調用存儲過程:
declare v_name number(10);
v_my_book varchar2(50);
v_my_book2 varchar2(20);
begin
v_name := 100;
query_BOOK(v_name,v_my_book,v_my_book2); --調用存儲過程
dbms_output.put_line('v_name is: '||v_name);
dbms_output.put_line('v_my_book is: '||v_my_book);
dbms_output.put_line('v_my_book2 is: '||v_my_book2);
exception
when others then
dbms_output.put_line(sqlerrm);
end;

ps:
plsql developer -->File-->new--->SQL window-->然後就可以在彈出的空白窗口裡寫了.
存儲過程寫完後,是否有錯,可以看plsql developer 的左邊列表:
選"My objects"-->proceres-->展開-->看你對應的存儲過程,如果存儲過程前面有紅色交叉,則表示存儲過程有錯.

⑵ 如何查看存儲過程運行到哪個語句了

存儲過程(procere 過程)

SQL Server2005 的存儲過程包含一些 T-SQL 語句並以特定的名稱存儲在數據中(存儲過程也是一種資料庫對象)可以在存儲過程中聲明變數,有條件的執行及其他各項強大的程序設計功能

SQL Server2005 的存儲過程與其它育種設計語言的過程類似,同樣按以下方式運行:
(1)它能夠包含執行各種資料庫操作的語句,並且可以調用其他的存儲過程;
(2)能夠接受輸入參數,並以輸出參數的形式將多個數據值返回給調用程序(Calling Procere)或批處理(Batch);
(3)向調用程序或批處理返回一個狀態值,以表明成功或失敗(以及失敗的原因);
(4)存儲過程(Stored Proceres) 是一組為完成特定功能的SQL 語句集,經編譯後,存儲在資料庫中,用戶通過指定存儲過程的名字給出參
數(如果該存儲過程帶有參數)來執行它;

存儲過程的類型:
一、(系統存儲過程):存儲過程在運行時生成執行方式,其後在運行時執行速度很
SQL Server2005 不僅提供用戶自定義存儲過程的功能,而且也提供許多可作為工具使用的系統存儲過程;
系統存儲過程(Systerm StroedProceres) 主要存儲在master資料庫中,並以 sp_ 為前輟,並且系統存儲過程主要是從系統表中獲取信息,從而為管理員SQL Server2005提供支持。通過系統存儲過程SQL Server2005中的許多管理性或信息性的活動(如了解數據對象,資料庫信息等)都可以被有效地完成,盡管這些系統存儲過程被存儲在master資料庫中,但是仍然可以在其他 資料庫中對其進行調用,在調用時,不必在存儲過程前面加上資料庫名,而且當創建一個資料庫時,一些存儲過程會在新的資料庫中被自動創建;
系統存儲過程所能完成操作很多,如提供幫助的存儲過程
sp_helpsql 顯示關於SQL語句,存儲過程和其他主題的信息
sp_help 提供關於存儲過程或其他資料庫對象的報告
sp_helptext 顯示存儲過程和其他對象文本
sp_depends 列舉引用或依賴指定對象的所有存儲過程
sp_talbes 取得資料庫中關於表和視圖的相關信息,
sp_renameedb 更改資料庫的名稱

SQL Server2005系統存儲過程可以使用戶很容易地從系統表中提取信息,管理資料庫,並執行涉及更新系統表的其他任務
系統存儲過程中在master資料庫中創建,由系統管理員管理,所有系統存儲過程的名字均以sp_開始
如果過程以sp_前綴命名的過程在當前資料庫中找不到,SQL Server2005就在master資料庫中尋找,以sp_前綴命名的過程中引用的表如果不能在當前資料庫中解析出來,將在master資料庫查找

當前系統存儲過程的參數是保留字或對象名,且對象名由資料庫或擁有者名字限定時,整個名字必須包含在單引號中,一個用戶可以在所有資料庫中執行一個系統存儲過程的許可權,否則在任何資料庫中都不能執行系統存儲過程

二、(本地存儲過程)
本地存儲過程(Local Stored Proceres)也就是用戶自行創建並存儲在用戶資料庫中的存儲過程,一般所說的存儲過程就是指的是本地的
用戶創建的存儲過程是由用戶創建並能完成某一特定功能(如:查詢用戶所需要的數據信息)的存儲過程

三、(臨時存儲過程)
臨時存儲過程(Temporary StoredProceres)可分為以下兩種
1)本地臨時存儲過程
不論哪一個資料庫是當前資料庫,如果在創建存儲過程時,以井字型大小 (#) 作為其名稱的,第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存放存儲過程(如:CREATE PROCEDURE #book_proc) 本地臨時存儲過程只有創建它的連接的用戶才能夠執行它,而且一但這位用戶斷開與 sql-server的連接(也就是注銷sql-server2005)本地臨時存儲過程就會自動刪除,當然,這位用戶也可以連接期間用 DROP PROCEDURE 命令刪除他所創建的本地臨時存儲過程;
由於本地存儲過程的適用范圍僅限於創建它的連接,因此,不需擔心其名稱會和其他連接所採用的名稱相同

2)全臨時存儲過程
不論哪一個資料庫當前資料庫,只要所創建的存儲過程名稱是以兩個井字型大小(##)開始,則該存儲過程將成為一個存儲在tempdb 資料庫中的全局臨時存儲過程(例如:create procere ##book_proc) 全局臨時存儲過程一旦創建,以後連接到 SQL Server2005 的任意用戶都能執行它,而且不需要特定的許可權
當創建全局臨時存儲過程的用戶斷開與SQL Server2005的連接時,SQL Server2005將檢查是否有其他用戶在執行該全局臨時存儲過程,如果沒有,便立刻將全局臨時存儲過程刪除,如果有SQL Server2005會讓這些正在執行中的操作繼續進行,但是不允許任何用戶再執行全局臨時存儲過程,等到有未完成的操作執行完畢後,全局臨時存儲過程就會自動刪除;
由於全局臨時存儲過程能夠被所有的連接用戶使用,因些必須注意其名稱不能和其他連接所採用的名稱相同
不論創建的是本地臨時存儲過程還是全局臨時存儲過程,只要SQL Server2005一停止運行,它們將不復存在;

四(遠程存儲過程)
在SQL Server2005 中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和 excute 命令執行一個遠程存儲過程;

五(擴展存儲過程)
擴展存儲過程(Extended Stored Proceres)是用戶可以使用外部程序語言編寫的存儲過程,通過擴展存儲過程可以彌補SQL Server2005的不足,它在使用和執行上與一般的存儲過程完全相同;可以將參數傳遞給擴展存儲過程,擴展存儲過程也能夠返回結果和狀態值;
為了區別擴展存儲過程的名稱通常以xp_開頭,擴展存儲過程是以動態鏈接庫(DLLS)的形式存在,能讓SQL Server2005動態地裝載和執行,擴展存儲過程一定要存儲在系統資料庫 master 中

存儲過程的優點
(1) 通過本地存儲、代碼預編譯和緩存技術實現高性能的數據操作
(2) 通過用編程結構和過程實現編程框架;如果業務規則發生變化,可以通過修改存儲過程來適應新的業務規則,而不必修改客戶端的應用程 序,這樣所有調用該存儲過程的應用程序就會遵循新的業務規則;
(3) 通過隔離和加密的方法提高資料庫的安全性。資料庫可以通過得到許可權來執行存儲過程,而不必給予用戶直接訪問資料庫對象的許可權,這 些對象交收存儲過程來執行操作,另外,存儲過程可以加密,這樣用戶就無法閱讀存儲過程中的T-sql語句。這樣做將資料庫的結構和數 據庫用戶隔離開來,時一步保證數據的完整性和可靠性;

存儲過程與視圖的比較
(1) 可以在單個存儲過程執行一系列T-SQL 語句,而在視圖中只能是 select 語句
(2) 視圖不能接受參數,只能返回結果集;而存儲過程可以接受參數,包括輸入,輸出參數,並能返回單個或多個結果集以及返回值,這樣可 大大地提高應用的靈活性;
一般來說,人們將經常用到的多個表的連接查詢定義為視圖,而存儲過程完成復雜的一第列的處理,在存儲過程中也會經常用到視圖;

創建存儲過程
CREATE PROCEDURE procere_name
[WITH ENCRYPTION]
[WITH RECOMPILE]
AS
Sql_statement

其中 with encryption 對存儲過程進行加密; with recompile 對存儲過程重新編譯
例如:使用T-SQL 語句在book資料庫中創建一個名為p_book1的存儲過程 該存儲過程返回book1表中所有出版社為"中國長安"的記錄
USE book
GO
CREATE PROCEDURE p_book1
AS
SELECT * FROM book1 WHERE 出版社='中國長安'

執行存儲過程

存儲過程創建成功後,用戶可以執行存儲過程來檢查存儲過程的返回結果;基本語法如下:
exec procere_name
例如:使用T-SQL語句執行上面創建的存儲過程 運行命令如下:
USE book
GO
exec p_book1
在運行完畢後,在SQL-Server ManagementStudio 查詢窗口中返回的結果
存儲過程創建成功後可以在 SQL-Server ManagementStudio 窗口中下查看存儲過程的屬性
例如:在 SQL-Server ManagementStudio 窗口中查看存儲過程 p_book1 的屬性:
對象資源管理器-> 展開book選項-> 展開可編程性-> 右擊 p_book1選擇修改命令 就可以修改存儲過程命令屬性

帶參數的存儲過程

由於視圖沒有提供參數,對於行的篩選取只能綁定在視圖中定義,靈活性不大,而存儲過程提供了參數,大大提高了系統開發的靈活性
向存儲過程設定輸入、輸出參數主要目的是通過參數向存儲過程輸入和輸出信息來擴展存儲過程的功能,能過設定能數,可以多次使用同一存儲過程並按要求查找所需要的結果;

1、帶輸入參數的存儲過程
輸入參數是指由調用程序向存儲過程傳遞的參數,它們在創建存儲過程語句中被定義,在執行存儲過程中給出相應的變數值,為了定義輸入參數存儲過程,需要在 create procere 語句中聲明一個或多個變數作為參數;其語法格式如下:
CREATE PROCEDURE procerd_name
@parameter_name datatype=[default]
[with encryption]
[with recompile]
AS
Sql_statement

其中各項參數如下
(1) @parameter_name: 存儲過程的參數名稱,必須以符號@為前綴
(2) Datatype: 參數的數據類型
(3) Default: 參數的默認值,如果執行存儲過程時未提供該參數的變數值,則使用default值

例子:使用T-SQL語句在book數據表中創建一個名為p_book1p的存儲過程,該存儲過程能根據給定的出版社回該出版社代碼對應的book1表中的的記錄:

分析:直接把上面的例子最後面的SQL語句 select * from book1 where 出版社='中國長安' 將裡面的 「出版社='中國長安'」用變理代替為 select * from book1 where 出版社= @出版社 其中變數名 @出版社取了代值 '中國長安';由於使用了變數,所以需要定義該變數,我們把「出版社」的長度設為是20位字元串;所以在 AS 之前定義變更@出版社 varchar(20);

create procere p_book1p
@出版社 varchar(20)
AS
SELECT * FROM book1 WHERE 出版社=@出版社

執行含有輸入參數的存儲過程
1)使用參數名傳遞參數值
在執行存儲過程的語句中通過語句 @paramter_name=value 給出參數的傳遞值,當存儲過程含有多個參數時,參數值可以任意順序設定,對於允許空值和具有默認值的輸入參數可以不給出參數的傳遞值;其格式語法如下:
exec procere_name
[@paramenter_name=value]
[,....n]
例子:用參數名傳遞參數值的方法執行存儲過程p_book1p,分別查出出版社為'中國長安'和"安徽人民"書的記錄
exec p_book1p @出版社='中國長安'
go
exec p_book1p @出版社='安徽人民'
go

2) 按位置傳遞參數值
在執行存儲過程的語句中,不通過參數傳遞值面直接給出參數的傳遞值,當存儲過程含有多個輸入參數時,傳遞值的順序必須與存儲過程中定義的輸入參數順序相一致,按位置傳遞參數時,也可以忽略空值和具有默認值的參數,但不能因此破壞輸入參數的設定順序;比如:在一個含有4個參數的存儲過程中,用戶可以忽略第3和第四個參數,但無法在忽略第3個的情況下而指定第4個參數的輸入值;
語法格式如下:
exec procere_name
[value1,value2,....]

例子:用按位置傳遞參數值的方法執行存儲過程 p_book1p 分別查找出版社為「中國人口」和「內蒙人民」書的記錄
exec p_book1p '內蒙人民'
go
exec p_book1p '中國人口'
go

按位置傳遞參數值比按參數名傳遞參數值更簡捷比較適合參數值較少的情況,而按照參數名傳遞的方法使程序的可讀性增強,特別是參數數量較多時,建議用按參數名傳遞參數的方法,這樣的程序可讀性/可維護性都要好一些;

3) 帶輸出參數的存儲過程
如果需要從存儲過程中返回一個或多個值,可以通過在創建存儲過程的語句中定義輸出參數來實現,為了使用輸出參數,需要在
create procere 語句中指定 output 關鍵字 輸出語法如下: @parameter_name datatype=[defautl] OUTPUT
例如:創建存儲過程 p_book1Num 要求能根據用戶給定的出版社,統計該出版社的出書數量,並將數量以輸入變數的形式返回給用戶:
CREATE PROCEDURE p_bookNum
@出版社 var(20),@bookNum smallint output
AS
SET @BOOK1Num= --(這個裡面是給book1Num 賦值)
(
select count(*) from book1
where 出版社=@出版社
)
ptrint @book1Num

執行存儲過程p_book1Num
由於在存儲過程 p_book1Num 中使用了參數@出版社和@book1Num 所以在測試時需要先定義相應的變數,對於輸入參數@出版社需要賦值,而輸出參數 @book1Num 無需賦值,它是從存儲過程中獲得返回值供用戶進一步使用的

declare @出版社 varchar(20), @book1Num SMALLINT
set @出版社=「中國長安」
exec p_book1Num @出版社,@book1Num

說明:這里在是sql server2005 環境下進行測試的,而在進行系統開發時,往往變數的定義,賦值,使用都是在應用程序中設計的,存儲過程 p_book1Num 的 print @book1Num語句也是為了在 SQL Server2005環境中測試而設計的

刪除、修改、重命名存儲過程

修改存儲過程:是由alert 語句來完成的,語法如下:
ALTER procere procere_name
[with encryption]
[with recompile]
as
Sql_statement
例子:使用T-SQL語句修改存儲過程 p_book1p 根據用戶提供的出版社名稱進行模糊查詢並要求加密:

alter procere p_book1p
@出版社 varchar(20)
with encryption
as
select 出版社,ISBN號,定價,作者姓名
from book1,teacher
where book1.編號=teacher.編號 and 出版社 like '%@出版社%'

存儲過程的刪除:存儲過程的刪除是通過DROP語句來實現的
例如:使用T-SQL語句來刪除存儲過程p_book1
use book
go
drop procere p_book1

使用SQL-Server Management Studio窗口刪除存儲過程 p_book1p:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->刪除 就可以了

存儲過程重命名:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->重命名

存儲過程的重編譯處理
在存儲過程中所用的查詢只在編譯時進行優化,對資料庫進行索引或其他會影響資料庫統計的更改後,可能降低已編譯的存儲過程的效率,通過對存儲過程進行重新編譯,可以重新優化查詢;
在SQL-Server2005 中有三種方法重新編譯的方法:
1) 在創建存儲過程時使用 with recompile 子句
with recompile 子句可以指示 sql server2005 不將該存儲過程的查詢計劃保存在緩存中,而是在每次運行時重新編譯和優化,並創建新 的查詢計劃;下面是例子:
use book
go
create procere p_book1p
@出版社 varchar(20)
with recompile
as
select * from book1 where 出版社=@出版社
這種方法並不常用,因為在每次執行存儲過程時都要重新編譯,在整體上降低了存儲過程的執行速度,除非存儲過程本身是一個比較復雜,耗時的操作,編譯的時間相對於執行存儲過程時間少;

2) 在執行存儲過程時設定重新編譯選項
通過在執行存儲過程時設定重新編譯,可以讓SQL-Server2005在執行存儲過程時重新編譯該存儲過程,在這一次執行後,新的查詢計劃又被保存在緩存中;基語法格式是:
execute procere_name with recompile
以重新編譯的方式執行存儲過程p_book1p:
use book
go
execute p_book1p '中國長安'with recompile 此方法一般在存儲過程創建後,數據發生了顯著變化時使用

3) 通過系統存儲過程設定重新編譯選擇;其語法如下
exec sp_recomplie OBJECT 其中OBJECT 當前資料庫中的存儲過程,表或視圖的名稱
例子:執行下面的語句將導致book1表的觸發器和存儲過程在下次運行時將被重新編譯:
exec sp_recompile book

===========================================================================================================================
觸發器的創建和管理

概述:在SQL-Server2005資料庫系統中,存儲過程和觸發器都是SQL語句和流程式控制制語句的集合

===========================================================================================================================

⑶ 怎麼知道 oracle存儲過程是否執行完

使用第三方軟體執行存儲過程後軟體會有所提示:
---比如SQL Navigator 在執行存儲過程後,運行按鈕恢復可點狀態,這就代表存儲過程通過並成功執行;您可以調用查詢您執行的存儲過程中的語句看看值都正常否。
---比如PL/SQL 這個執行後軟體會提示 " procere successfully completed"這樣就代表執行成功;

⑷ Oracle存儲過程一直處於執行狀態

無效狀態有兩種可能,一種是你的存儲過程編輯沒有成功,創建了,但裡面有語法錯誤。 還有一種是存儲過程使用的表有結構上的改變,需要重新編譯一下。 你重新編譯一下,如果不成功,就是有語法問題,你需要修改存儲過程。

⑸ 如何判斷存儲過程是否正在運行

你可以用第三方數據來實現 可以是資料庫里的某一個欄位 比如是isrun 0 表示沒運行 1表示在運行在test_pro開始運行的時候 先去判斷這個欄位的狀態 如果為0 則改變isrun為1 如果為1 則有其他用戶在使用這個存儲過程
然後是在存儲過程結束的時候改變isrun為0

⑹ 如何裝SQL存儲過程執行完畢的狀態返回給DELPHI

可以利用存儲過程來實現,就是利用存儲過程的輸出參數,具體請看的示範,
創建過程,調用過程,獲得輸出參數:

--這些表都是測試用表
create proc ssb
@flag int output
as
truncate table ff

insert into ff
select * from dbo.stuinfo

if @@rowcount>0--獲取影響的行數,表示數據插入成功
begin
set @flag=0--執行成功
end
else
begin
set @flag=1--執行失敗
end

return @flag--過程的返回值

GO
--調用存儲過程,並返回值
declare @flag int
exec ssb @flag output
select @flag--返回值

⑺ 如何查看存儲過程執行情況

捕捉@@error 在master..sysmessages可以大致查詢錯誤語句
如果是SQL Server 2005 系統消息返回做的更好一些

⑻ oracle中調用存儲過程時顯示該存儲過程處於無效狀態是怎麼回事

-- 查看存儲過程執行時的列印信息
SET SERVEROUTPUT ON
-- 執行存儲過程
EXECUTE $proc_name;
-- 帶有輸出參數的情況下
var $variable $type($length);
execute $proc_name(:$variable);
-- 查看存儲過程內容 單引號內大寫
SELECT text FROM all_source WHERE TYPE='PROCEDURE' AND NAME='$proc_name' (AND OWNER='$owner');-- 重新編譯存儲過程

⑼ 如何快速查找某個存儲過程執行的狀況

通過下面的SQL,我們可以快速查看某個存儲過程執行的狀況:
SELECT TOP 100 db_name(d.database_id) as DBName,s.name as 存儲名稱,s.type_desc as 存儲類型,d.cached_time as SP添加到緩存的時間,
d.last_execution_time as 上次執行SP的時間,d.last_elapsed_time as [上次執行SP所用的時間(微妙)],d.total_elapsed_time as [完成此SP的執行所用的總時間(微妙)],
d.total_elapsed_time/d.execution_count as [平均執行時間(微妙)],d.execution_count as 自上次編譯以來所執行的次數
FROM SYS.proceres S JOIN SYS.dm_exec_procere_stats D
ON S.object_id=D.object_id
WHERE S.NAME='SP_Name'
ORDER BY D.total_elapsed_time/D.execution_count DESC

⑽ oracle存儲過程一直處於正在執行狀態。

查詢鎖的SQL是什麼類型。是其他程序正在運行沒有提交導致還是死鎖。
如果是死鎖結束進程即可。如果是其他程序的鎖,等待提交即可。

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:431
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:536
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:232
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:532
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726