致Navicat以及使用該工具的Oracle新手
——存儲過程在PL/SQL中能夠執行成功,在Navicat中卻不行。
學習和應用Oracle數據以來,我一直是使用PL/SQL的,使用得還算比較熟練。但隨着Navicat相關功能的成熟和它的一些好的工具,已經在數據庫工作人員中被廣泛接受。數年后再次回歸數據庫行業,使用起這個軟件來開始也甚是滿意,但隨着逐漸的深入,就發現問題多多了。今天就遇到的幾個問題說說吧!我是個喜歡追根究底的人,找到問題的原因,花了不少時間。
使用Navicat進行存儲過程創建時,如果報錯,你是無法像PL/SQL中用show errors;命令來查看到底錯在哪里的。還有就是一個存儲過程,把腳本放到PL/SQL中可以很順序的創建成功,但在Navicat中,你得到的永遠是:”[Err] ORA-24344: success with compilation error”
下面是一段測試代碼,
CREATE OR REPLACE
PROCEDURE TEST_PROC (
VERSION_VAL VARCHAR2
) IS
MIDDLE_VERSION D_VERSION.VERSION_VALUE%TYPE;
MAX_SUB_VERSION D_VERSION.SUB_VERSION%TYPE;
record_num NUMBER;
BEGIN
record_num:=0;
MAX_SUB_VERSION:=0;
IF (record_num=0) THEN
MIDDLE_VERSION:='M';
DBMS_OUTPUT.PUT_LINE('MIDDLE_VERSION: '||MIDDLE_VERSION);
ELSE
MIDDLE_VERSION:='M2';
DBMS_OUTPUT.PUT_LINE('MIDDLE_VERSION: '||MIDDLE_VERSION);
END IF;
END;
將上面的代碼分別復制PL/SQL和Navicat中進行執行,得到的結果截然不同,如下圖:

問題到底出在哪里呢?
根據我打到的方法得到出的問題所在點如下圖所示:

意外吧!好多錯誤啊!怎么可能!什么錯誤啊!
朋友,其實不是你的錯!是Navicat的錯!但好像也不是他的錯!Navicat開發人員的錯吧!
我們看看是怎么知道這里有錯的。首先你得找到這樣一個路徑:“D:\Documents\Navicat\Premium\logs”找到“LogHistory.log”這樣一個文件:
如果你執行出現上面的報錯了,以后就要養成習慣,時不時“寵幸”一下它!拉到最下面去看看,會有什么(記住:執行一次要立馬打開,執行一次,打開一次,要不然就跑遠了,你得找一會的哦):

看到圖中的箭頭沒有,位置是不是很眼熟。沒錯,前面一張圖中標記了的地方,在LogHistory.log中記錄的提交給Oracle的命令中都出現錯誤了。問題在哪里呢?
問題在以下兩點:
1、 Navicat不怎么認得“換行符”。解決辦法,以上幾個地方記得多打幾個空格。
2、 Navicat喜歡穿開檔褲。最后的“END;”一任性它就扔掉。怎么解決。解決辦法如下圖:

簡不簡單?不知道的話!你要急死!

希望Navicat開發組能夠盡快解決這個問題吧!或許更新的版本的已經解決,只是我使用的版本太低吧!那至少讓一些同樣使用比較低版本的同行新手們少一些莫名其妙的煩惱吧!
Navicat這個工具上存在的問題肯定還有很多,上面的發現不一定都指出來了,還是得多分析吧!好在指出了一個方法,大家共享之!
