致Navicat以及使用該工具的Oracle新手數據庫
——存儲過程在PL/SQL中可以執行成功,在Navicat中卻不行。工具
學習和應用Oracle數據以來,我一直是使用PL/SQL的,使用得還算比較熟練。但隨着Navicat相關功能的成熟和它的一些好的工具,已經在數據庫工做人員中被普遍接受。數年後再次迴歸數據庫行業,使用起這個軟件來開始也甚是滿意,但隨着逐漸的深刻,就發現問題多多了。今天就遇到的幾個問題說說吧!我是個喜歡追根究底的人,找到問題的緣由,花了很多時間。學習
使用Navicat進行存儲過程建立時,若是報錯,你是沒法像PL/SQL中用show errors;命令來查看到底錯在哪裏的。還有就是一個存儲過程,把腳本放到PL/SQL中能夠很順序的建立成功,但在Navicat中,你獲得的永遠是:」[Err] ORA-24344: success with compilation error」測試
下面是一段測試代碼,spa
CREATE OR REPLACEblog
PROCEDURE TEST_PROC (開發
VERSION_VAL VARCHAR2rem
) ISit
MIDDLE_VERSION D_VERSION.VERSION_VALUE%TYPE;io
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的命令中都出現錯誤了。問題在哪裏呢?
問題在如下兩點:
一、 Navicat不怎麼認得「換行符」。解決辦法,以上幾個地方記得多打幾個空格。
二、 Navicat喜歡穿開檔褲。最後的「END;」一任性它就扔掉。怎麼解決。解決辦法以下圖:
簡不簡單?不知道的話!你要急死!
但願Navicat開發組可以儘快解決這個問題吧!或許更新的版本的已經解決,只是我使用的版本過低吧!那至少讓一些一樣使用比較低版本的同行新手們少一些莫名其妙的煩惱吧!
Navicat這個工具上存在的問題確定還有不少,上面的發現不必定都指出來了,仍是得多分析吧!好在指出了一個方法,你們共享之!