因为项目需要,需要用PL/SQL来调用C++写的DLL。
DLL 中有个函数类似于: int test(int* p)
需传递一个int型的数组。
请问PL/SQL中应该怎么调用。谢谢了。

解决方案 »

  1.   

    try
    create library test as  'd:\test.dll';  
    create or replace procedure
    (aa in int ) 
    as external library
    test
    name 'test'    
    parameters(aa int);
      

  2.   

    hongqi162(失踪的月亮) 用parameters(aa int)可以传一个数组吗?
    如果有表TABLE_A中的
    COL1
    1
    2
    3
    4
    我想把COL1中的内容做为参数,在调用test(int *p)时怎么传递呢。
    谢谢了。
      

  3.   

    你参考一下这个
    http://www.dbasupport.com/oracle/ora9i/extprocedures.shtml
      

  4.   

    hongqi162(失踪的月亮)还想请教你一下。CREATE OR REPLACE FUNCTION LIB_TEST(p in DOUBLE PRECISION)
    RETURN DOUBLE PRECISION AS
        LANGUAGE C NAME "TESTLIB"
    LIBRARY TESTLIB;
    我在使用lib_test时把数存在了一个数组里,我的代码如下,其中加上System.LIB_TEST(CashFlows);这句就出错,想请教你一下,是不是不能用数组来做为参数传递?这里应该怎么改呢。谢谢。create or Replace PROCEDURE "SYSTEM"."USP_COMPUTE_TB_TEST"
    is  
     TYPE tmp_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
    CashFlows tmp_array;  
    BEGIN
    CashFlows(1) := 100;
    CashFlows(2) := 100;
    CashFlows(3) := 100;System.LIB_TEST(CashFlows);
    END;
      

  5.   

    oracle里本来就没有数组的概念,估计不可以以数组作为参数
      

  6.   

    那用什么比较好呢。刚才我试了想用cursor
    create or Replace PROCEDURE "SYSTEM"."USP_COMPUTE_TB_TEST"
    is
    DBResult Number;
    P_PKID number;
    CURSOR cur IS SELECT * FROM TB_TEST;
    begin
             System.LIB_TEST(CashFlows); 
    -- 这里我想把TB_TEST表中的某列的值做为参数传进去。但不知道怎么写
    end USP_COMPUTE_TB_CNDIST;
      

  7.   

    create or Replace PROCEDURE "SYSTEM"."USP_COMPUTE_TB_TEST"
    is
    DBResult Number;
    P_PKID number;
    CURSOR cur IS SELECT * FROM TB_TEST;
    begin
             System.LIB_TEST(CashFlows); 
    -- 这里我想把TB_TEST表中的某列的值做为参数传进去。但不知道怎么写
    end
      

  8.   

    你将数组串行化 按固定的格式组合成字符串传入,然后再dll中在分析一下