在oracle中看到一个函数:
FUNCTION COL_DECRYPT_NUM(ALGO IN VARCHAR2, COLUMN_ID IN VARCHAR2, COL_KEY_SEQ IN VARCHAR2, CIPHER_TEXT IN NUMBER, OUTPUT_STATUS OUT BINARY_INTEGER) RETURN NUMBER IS
    EXTERNAL NAME "Col_Decrypt_Num"
    LIBRARY DBENCRYPTLIB
    LANGUAGE C
    CALLING STANDARD C
      WITH CONTEXT
      PARAMETERS (CONTEXT,
      ALGO STRING,
      ALGO LENGTH INT,
      ALGO INDICATOR SHORT,
      COLUMN_ID STRING,
      COLUMN_ID LENGTH INT,
      COLUMN_ID INDICATOR SHORT,
      COL_KEY_SEQ STRING,
      COL_KEY_SEQ LENGTH INT,
      COL_KEY_SEQ INDICATOR SHORT,
      CIPHER_TEXT BY REFERENCE OCINUMBER,
      CIPHER_TEXT INDICATOR SHORT,
      OUTPUT_STATUS INT,
      OUTPUT_STATUS INDICATOR SHORT,
      RETURN INDICATOR SHORT,
      RETURN BY REFERENCE OCINUMBER);有达人能告知大概是什么意思吗?特别是中间这段:
    EXTERNAL NAME "Col_Decrypt_Num"
    LIBRARY DBENCRYPTLIB
    LANGUAGE C
    CALLING STANDARD C
      WITH CONTEXT
      PARAMETERS (CONTEXT,
       .......  是调用C吗??如果是,那调用C的什么啊?什么文件?什么函数?还是什么东东....??

解决方案 »

  1.   

    这个说起来有点长。 
    oracle里面可以调用C或Java之类的函数,在Oracle称为External Procedure。 在oracle9i的文档Application Developer's Guide - Fundamentals (a96590.pdf )中第10章有介绍。过程一般是这样的:
    1.先将你C函数编译并打包成.so或.sl之类的动态库(windows上就是dll了),并放到指定的目录下(比如$ORACLE_HOME/lib)。 这个动态库的位数必须和oracle的位数是一致的(32位还是64位)。2.再创建library,如:
    create library mylib as '/export/oracle/demo/libshr.so';
    这个用于加载libshr.so中的外部例程。3.发布,就是用你上面写的语法。4.真正要用起来,可能还必须修改listener.ora,增加extproc相关内容。