写了一个c程序 已生成CTest.dll
在sql *plus窗口创建库ctestdll已经成功当创建函数时 有警告:创建的函数带有编译错误。代码如下:create or replace function get(stdname in varchar2)
return varchar2
as
language C
library ctestdll
name "getstring"
parameters(stdname varchar2,return varchar2)
/其中getstring是c源文件中的一个函数,输入参数是字符串,返回值也是字符串。热心的朋友来帮我看看哪里有问题。

解决方案 »

  1.   

    窗口没有具体错误信息么?
    你编译之后,再敲个show errors;看看有什么错误信息呗。
      

  2.   


    FUNCTION GET 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    7/20     PLS-00103: 出现符号 "VARCHAR"在需要下列之一时:
             ) , array by indicator
             LONG_ RAW_ double native length maxlen tdo duration charsetid
             charsetform char short int sb1 sb2 sb4 ub1 ub2 ub4 float
             OCINumber OCIString orlvary OCIRaw OCIDate OCIROWID
             OCIDateTime OCIInterval OCIREFCURSOR orlany struct void
             valist string OCIType OCIDuration OCIRef OCILobLocator
             OCIColl SIZE_T_ UNSIGNED_上面就是错误信息 初学oracle 不懂其含义 热心人能不能帮忙解释一下
      

  3.   

    我觉得还是你的dll里出了问题,因为单看你的function是没有问题的。
    调用的时候parameters(stdname varchar2,return varchar2),
    是不是到了dll里解析参数或者类型转换的时候有问题呢?
      

  4.   


    CTest.c源文件如下:#include <stdio.h>
    #include <string.h>char *name = "lilei";
    char *getstring(char *p)
    {
    if(p=="hello")
    //printf("income is %s\n",p);
    return name;
    }int main()
    {
    char *lp="hello";
    printf("The returned string is %s\n",getstring(lp));
    printf("hello ExtProc!\n");
    }通过gcc -shared CTest.c -o CTest.dll
    生成dll文件  
      

  5.   

    不负我近两天的尝试 已解决 感谢yixilan
      

  6.   


    创建函数中的参数类型 parameters(stdname string,return string);就可以返回字符串了 不过产生一个新问题#include <stdio.h>
    #include <string.h>
    char *name = "lilei";
    char *getstring(char *p)
    {
    char *q = p;
    if(p=="hello")
    return q;
            else
    return name;
    }
    int main()
    {
    char *lp="hello";
    printf("The returned string is %s\n",getstring(lp));
    printf("hello ExtProc!\n");

    }源程序只要改变main函数中lp的串 根据不同值调用getstring可以分别返回“hello” “lilei”;
    生成dll在sql plus中创建函数后 调用get('hello')和get('he')只返回“lilei”。这个你能帮忙看一下么?