分类: Linux
在设置外部C过程的时候,发现了一个ORA-28595错误。
由于是第一次配置外部C过程,即使参考了Tom的代码仍然碰到了大量的错误,但是这个错误是最特殊的,原因很简单,这个错误居然在Oracle920的Error Messages文档中找不到。
建立外部过程比较复杂,这里就不多描述了,这个问题的环境出自于:http://yangtingkun.itpub.net/post/468/239478
将c程序编译成.so文件后,第一次建立库文件时,并不是像链接例子中给出的那样,将multi_sum.so拷贝到了/opt/ora9/product/9.2/lib/目录下,而是直接在编译的当前路径/home/oracle/目录下建立了库。
SQL> CREATE OR REPLACE LIBRARY MULTI_SUM_C AS '/home/oracle/multi_sum.so'
2 /
Library created.
SQL> CREATE OR REPLACE FUNCTION F_MULTI_SUM_C(P_IN IN BINARY_INTEGER) RETURN VARCHAR2 AS
2 LANGUAGE C NAME "multi_sum" LIBRARY MULTI_SUM_C WITH CONTEXT
3 PARAMETERS (
4 CONTEXT,
5 P_IN INT,
6 P_IN INDICATOR SHORT,
7 RETURN INDICATOR SHORT,
8 RETURN LENGTH INT,
9 RETURN STRING
10 );
11 /
Function created.
SQL> SELECT F_MULTI_SUM_C(1) FROM DUAL;
SELECT F_MULTI_SUM_C(1) FROM DUAL
*
ERROR at line 1:
ORA-28595: Extproc agent : Invalid DLL Path
于是查询出现了ORA-28595这个错误,从信息本身上看倒是不难理解。但是由于Oracle的文档没有记载这个错误,因此也没有相应的错误解决方法。而根据错误本身的含义去检查LIBRARY的路径是无法发现错误的。
除了连接中给出的那个办法之外,还有下面的办法。
将$ORACLE_HOME/network/admin/listener.ora文件进行如下的修改:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora9/product/9.2)
(ENVS = EXTPROC_DLLS=ANY)
(PROGRAM = extproc)
)
.