我在oracle中调用用c#写的dll:
c#源码:
using System;
using System.Collections.Generic;
using System.Text;namespace myLib
{
    public class VCF
    {
        public static float CalPlus(float a, float b)
        {
            return a + b;
        }
    }
}
编译成myLib.dll文件后,拷贝到oracle的bin目录下,然后在oracle中新建libraries:
create or replace library LIB_VCFCAL
  as 'D:\oracle\ora92\bin\myLib.dll';
然后,创建函数引用该library:
create or replace function F_CALPLUS(A FLOAT,B FLOAT) return FLOAT is
  LANGUAGE C NAME "VCF.CalPlus" LIBRARY LIB_VCFCAL
  PARAMETERS(A FLOAT,B FLOAT,RETURN FLOAT);
最后调用:
select F_CALPLUS(10,5) from dual;
保错:
     ORA-06521:PL/SQL:映射函数时出错
     ORA-06522:Unable to load symbol from DLL哪位高手能帮我看看我这错在哪儿?

解决方案 »

  1.   

    我手头没有现成的环境,不过,可以告诉你试着从下面几个地方进行尝试修改:
    1. 转义符
    create or replace library LIB_VCFCAL 
      as 'D:\oracle\ora92\bin\myLib.dll';  这里应该换成'D:\\oracle\\ora92\\bin\\myLib.dll'
    2.创建的function里的C NAME名字不全
    应该是:LANGUAGE C NAME "myLib.VCF.CalPlus"
    按上边两条,改了以后再试试吧。
      

  2.   

    我按照你说的试了一下,结果还是一样的。还有'D:\\oracle\\ora92\\bin\\myLib.dll'这种写法在oracle中需要吗?
      

  3.   

    我仔细回想了一下,似乎Oracle并不支持C#写的dll,支持c写的dll倒是可以的。
    难道新版本的oracle(如10g, 11g)支持调用C#写的dll吗?
      

  4.   

    我也在考虑这样的问题,应该oracle9i是不支持调用C#写的dl的吧