PL/SQL中為我們提供了調(diào)試存儲過程的功能,可以幫助你完成存儲過程的預(yù)編譯與測試。 點(diǎn)擊要調(diào)試的存儲過程,右鍵選擇TEST

創(chuàng)新互聯(lián)專注于通山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供通山營銷型網(wǎng)站建設(shè),通山網(wǎng)站制作、通山網(wǎng)頁設(shè)計(jì)、通山網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造通山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供通山網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
如果需要查看變量,當(dāng)然調(diào)試都需要。在右鍵菜單中選擇Add debug information. start
debugger(F9)開始我們的測試,Run(Ctrl+R) 隨時在varible List中輸入我們想查看的變量 其它: Step
into(Ctrl+N):單步調(diào)試,進(jìn)入下一步 Step over(Ctrl+O):結(jié)束該語句 Step out(Ctrl+T):跳出該過程
Run to next exception:進(jìn)入下一個斷點(diǎn)Breakpoint Toggle
Breakpoint設(shè)置斷點(diǎn):光標(biāo)指向一行,Ctrl+B;或鼠標(biāo)點(diǎn)中該行的行號邊緣
今天在項(xiàng)目中遇到一個比較棘手的問題,需要用到觸發(fā)器。在編寫觸發(fā)器和調(diào)試過程中遇到下列問題,在此記錄一下:
由于之前寫的觸發(fā)器都能正常運(yùn)行,就沒有涉及到觸發(fā)器的調(diào)試,今天發(fā)現(xiàn)觸發(fā)器沒起作用,需要調(diào)試,竟不知道在哪兒調(diào)試。在網(wǎng)上借鑒一些別人的經(jīng)驗(yàn)(),記錄一下。在PL/SQL中,觸發(fā)器的調(diào)試方法如下:
1,選中要調(diào)試的觸發(fā)器,右擊,然后勾選 Add debug information,只有勾選這個按鈕后,調(diào)試才能進(jìn)入到斷點(diǎn)。
2,選中觸發(fā)器,點(diǎn)擊 Edit,到Edit 界面,在要調(diào)試的行號前面單擊,或者右鍵,添加斷點(diǎn)。
3,在菜單的新建中選擇“測試窗口”,打開一個如下塊,在begin和end中間添加能觸發(fā)觸發(fā)器的語句
4,按F9或者點(diǎn)擊調(diào)試菜單中的開始菜單,進(jìn)入運(yùn)行調(diào)試狀態(tài)(后面的紅框是單步進(jìn)入)
5,點(diǎn)擊運(yùn)行圖標(biāo)跳到觸發(fā)器中斷點(diǎn)位置
6,鼠標(biāo)放到變量上可以顯示變量值。
7,如果有異常,就彈出相關(guān)異常信息。
調(diào)試的時候發(fā)現(xiàn)new對象的日期格式為中文,而后面又需要yyyy-mm-dd 的格式來作為查詢條件。所以就在賦值的時候轉(zhuǎn)換一下。
在select into 給變量賦值的時候,select 查詢出來的集合為空,導(dǎo)致報錯ORA-01403,解決方案就是將這一段用begin end 包裹起來,拋出改異常的時候給變量一個默認(rèn)值。如下圖:
要在sql下面執(zhí)行shell語句,用!符號,不過功能有限;有的時候打不到我們想要的效果!先給你兩個實(shí)例;
要在后臺登陸;plsql中測試不行
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
SQL !echo 123;
123
SQL !/billing/user/xufc/
Local directory now /billing/Balance/SP/REALINCOME/FTRANS
Interactive mode off.
-rw-r--r-- 1 500 500 823038 Feb 17 06:27 340000PTSVDA002012021714210800000000.gz
-rw-r--r-- 1 500 500 33 Feb 17 06:27 340000PTSVDA002012021714210800000000.md5
其中需要用絕對路徑;該腳本里面的內(nèi)容只是ls一下;就這樣了
1.
編寫Oracle存儲過程腳步如下:CREATE
OR
REPLACE
PROCEDURE
P_AUTO_CREATE_PARTITION
(Result
Out
int,
LogErrDesc
Out
varchar2
)
is
type
TypeTable
is
table
of
varchar2(20);
CreatePartitionErr
exception;
days
TypeTable;
BEGIN
Result
:=
0;
SELECT
DATETIME
bulk
collect
into
days
FROM
(
SELECT
TO_CHAR(TRUNC(SYSDATE-2,'dd'),'YYYYMMDD')
AS
DATETIME
FROM
DUAL
UNION
SELECT
TO_CHAR(TRUNC(SYSDATE-1,'dd'),'YYYYMMDD')
AS
DATETIME
FROM
DUAL
UNION
SELECT
TO_CHAR(TRUNC(SYSDATE,'dd'),'YYYYMMDD')
AS
DATETIME
FROM
DUAL
UNION
SELECT
TO_CHAR(TRUNC(SYSDATE+1,'dd'),'YYYYMMDD')
AS
DATETIME
FROM
DUAL
UNION
SELECT
TO_CHAR(TRUNC(SYSDATE+2,'dd'),'YYYYMMDD')
AS
DATETIME
FROM
DUAL
);
for
i
in
1..days.count
loop
if
bruce_partiton.CreatePartitions('T_CDT_1X_BASIC_Partion',days(i))0
then
raise
CreatePartitionErr;
end
if;
end
loop;
--名字寫錯了bruce_partiton,應(yīng)該為bruce_partition
commit;
--異常處理
EXCEPTION
WHEN
CreatePartitionErr
THEN
rollback;
Result
:=
-1;
LogErrDesc
:=
SQLERRM;
commit;
RETURN;
WHEN
OTHERS
THEN
rollback;
Result
:=
-2;
LogErrDesc
:=
'CDM_CTCALLTRACEINFO_PRC_NEW
Fail!'||substr(dbms_utility.format_error_stack,1,200);
commit;
RETURN;
END
P_AUTO_CREATE_PARTITION;
/
2.
調(diào)試
在PL/SQL中選擇存儲過程,右鍵TEST,
ADD
DEBUGINFO,3.
運(yùn)行,在Program
Window中
方法/步驟
首先在PL/SQL的左側(cè)資源欄中展開Procedures項(xiàng)(圖中位置1),然后再其上面的搜索框中(圖中位置2)輸入存過名稱的關(guān)鍵詞,按回車鍵搜索要調(diào)試的存過,不停的回車,直到找到想要調(diào)試的存過。
找到想要調(diào)試的存過,左鍵單擊選中該存過(圖中位置1),然后右鍵單擊該存過,從彈出菜單中選擇“Test”項(xiàng)(圖中位置2)。
單擊“Test”后,PL\SQL會打開調(diào)試界面,圖中位置1的按鈕就是開始調(diào)試的按鈕,在調(diào)試之前要填寫存過的參數(shù),位置2就是填寫參數(shù)的地方,如果有多個參數(shù),會有多行參數(shù)框,按參數(shù)名填寫相應(yīng)的參數(shù)即可。
填寫完參數(shù),單擊開始調(diào)試按鈕后,調(diào)試的界面會發(fā)生一些變化。圖中位置1的變化,說明存過已經(jīng)處于執(zhí)行狀態(tài),別人不能再編譯或者執(zhí)行。位置2的按鈕就是執(zhí)行按鈕,單擊這個按鈕存過會執(zhí)行完成或者遇到bug跳出,否則是不會停下來的,調(diào)試時不會用這個按鈕的。位置3的按鈕才是關(guān)鍵——單步執(zhí)行,就是讓代碼一行一行的執(zhí)行,位置4的按鈕是跳出單步執(zhí)行,等待下一個指令。
單擊“單步執(zhí)行”,存過開始單步執(zhí)行。界面中每一次執(zhí)行的代碼會高亮顯示(圖中位置1),如果想要看某個變量具體的值,就在位置2的地方輸入該變量名,然后變量的值會顯示在位置3的地方。
調(diào)試的時候,每一次單步執(zhí)行的時候要記一下執(zhí)行代碼的行數(shù),圖中位置3的數(shù)字就是當(dāng)前執(zhí)行代碼的行數(shù),就是第幾行。如果過程單步執(zhí)行到某行后,再單步執(zhí)行的時候,存過就退出,那么錯誤就在該行的下一行。
代碼執(zhí)行到24行,在往下執(zhí)行時,直接轉(zhuǎn)到exception的地方,也就是異常處理的部分。
這說明我們代碼中的錯誤在24和25行上,我們打開存過,瀏覽到24行和25行附近,發(fā)現(xiàn)25行和24行使用了兩個變量,記住那兩個變量。重新開始調(diào)試過程。
單步的執(zhí)行時候把剛才那兩個變量名填寫到變量查看框,一邊觀察變量值變化,一邊單步執(zhí)行,執(zhí)行到24行的時候,發(fā)現(xiàn)一個變量已經(jīng)有值了,而另一個變量的值為null。錯誤原因明朗了吧?就是變量沒有賦值或者初始話,給該變量賦值后存過就不報錯了。
1.打開PL/SQL
Developer
如果在機(jī)器上安裝了PL/SQL
Developer的話,打開PL/SQL
Developer界面
輸入用戶名,密碼和host名字,這個跟在程序中web.config中配置的完全相同,點(diǎn)擊確定
找到需要調(diào)試的存儲過程所在的包(Package
bodies),如PACK_ACTIVITY,點(diǎn)擊右鍵,在彈出菜單中選擇[查看],得到包中的所有存儲過程和他們的代碼.
2.添加debug信息
為了能夠單步跟蹤存儲過程,需要為其所在的包添加debug信息,右鍵點(diǎn)擊需要調(diào)試的包,在彈出菜單中選中[添加調(diào)試信息].
這樣就為包體添加了調(diào)試信息。
3.調(diào)試存儲過程
現(xiàn)在所有的準(zhǔn)備工作都做好了,可以調(diào)試跟蹤存儲過程了。
選擇需要調(diào)試的存儲過程,點(diǎn)擊右鍵,在彈出菜單中選擇[測試],進(jìn)去測試窗口.
測試窗口中有為了測試該存儲過程自動所產(chǎn)生的代碼,當(dāng)然你也可以自己另外加入和修改代碼,對于我們目前只是為了調(diào)試存儲過程,自動生成的代碼已經(jīng)足夠了。接著按照如下的步驟進(jìn)行調(diào)試。
(1)添加存儲過程所需要的參數(shù),我們項(xiàng)目中的大多數(shù)存儲過程都是需要參數(shù)的,參數(shù)可以在測試窗口右下部分輸入。
如:GetPanNO_New需要一個輸入?yún)?shù)v_employeeid,我們輸入180,輸出參數(shù)是mycursor,是查看結(jié)果的,不需要輸入任何值。
(2)開始調(diào)試,點(diǎn)擊[調(diào)試]菜單-[開始](或者按F9),就進(jìn)去調(diào)試模式了,程序開始停在begin這一行.
(3)以后的調(diào)試過程跟我們熟悉的的調(diào)試過程就一樣了:
運(yùn)行(Ctrl+R)
單步進(jìn)入(Ctrl+N)
單步跳過(Ctrl+O)
單步退出(Ctrl+T)
或者點(diǎn)擊debug工具條上的按扭:
當(dāng)按Ctrl+N進(jìn)去存儲過程的源代碼中后
在這個窗口中可以查看過程中的變量值和堆棧。
(4)調(diào)試運(yùn)行完了后,可以查看結(jié)果如下(點(diǎn)擊mycursor變量旁邊的按鈕).
當(dāng)前標(biāo)題:oracle如何調(diào)試腳本,oracle調(diào)試腳本需要權(quán)限
當(dāng)前網(wǎng)址:http://chinadenli.net/article0/dsgghoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、建站公司、域名注冊、搜索引擎優(yōu)化、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)