致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这个工具上存在的问题肯定还有很多,上面的发现不一定都指出来了,还是得多分析吧!好在指出了一个方法,大家共享之!