Php 将多维数组传递给Oracle存储过程

Php 将多维数组传递给Oracle存储过程,php,oracle,stored-procedures,oci8,Php,Oracle,Stored Procedures,Oci8,我有自定义类型的SP: Create Or Replace Type tyTestArrayType As Object (siF1 SmallInt, siF2 SmallInt, siF3 SmallInt); Create Or Replace Type tyTestArray Is Table Of tyTestArrayType; Create Or Replace Procedure prTestArray(pArr tyTestArray,

我有自定义类型的SP:

Create Or Replace Type tyTestArrayType As Object
    (siF1 SmallInt,
    siF2 SmallInt,
    siF3 SmallInt);


Create Or Replace Type tyTestArray Is Table Of tyTestArrayType;

Create Or Replace Procedure prTestArray(pArr tyTestArray,
                                        pResult In Out SmallInt)

Is
Begin

    pResult := 0;

    For I In 1..pArr.Count
    Loop
        pResult := pResult + pArr(I).siF1 + pArr(I).siF2 + pArr(I).siF3;
    End Loop;

End;
如何从PHP(oci8)使用此过程(传递多维数组)

谢谢

更新:

这是一段在Ruby中执行此操作的代码:

plsql.connection = OCI8.new("user","pass","host/XE")
testArray =  [{:sif1 => 1, :sif2 => 12, :sif3=>4},{:sif1 => 5, :sif2 => 2, :sif3=>3}]
puts plsql.prTestArray(p_testArray,0) #=> {:presult=>27}

我开发了一个相同的存储过程(使用表…)作为输入,很难从Java代码中调用它。所以我切换到CLOB输入,并从代码中传递XML。 在XML中,您可以拥有一个任意多维的数组,并且在PHP中构建XML字符串非常容易

使用ORACLE可以简化XML解析:

CLOB:

输出:

040001
040002

另一种选择是将数组存储在临时表中,然后从那里读取它(没有in参数)

这个数组只有一个维度,所以它不是多维的。是的,但是我需要传递tyTestArrayTypes的数组:pArr=array(tyTestArrayType,tyTestArrayType,tyTestArrayType…)
SELECT
extractvalue(column_value, '/LINE/COD_NOMCPDT')
  FROM TABLE(XMLSequence(XMLTYPE(
               CLOB_VARIABLE).extract('/DATA/LINE'))) );  
040001
040002