0

ストアドプロシージャを実行するためにこの関数を実行しているときに、配列をoutパラメータとして取得しています。

function ExecuteProcedure($procedureName, $parameters)
{       $query = "begin " . $procedureName . "(" ;
    for($i=0; $i<count($parameters); $i++)
    {
        if($i==0)
            $query = $query . ":" . $parameters[$i][0] ;
        else
            $query = $query . ", :" . $parameters[$i][0] ;
    }

    $query = $query . "); end;"; 

    //echo $query . "<br />";

    $this->stmt = ociparse($this->con, $query) or die (ocierror()); 

    for($i=0; $i<count($parameters); $i++)
    {

        $valueList = $parameters[$i];
        if(count($valueList) == 2)
            ocibindbyname($this->stmt, $valueList[0], $valueList[1]) or die (ocierror()); 
        else if(count($valueList) == 3)
            ocibindbyname($this->stmt, $valueList[0], $valueList[1], $valueList[2]) or die (ocierror()); 
        else{
        ocibindbyname($this->stmt, $valueList[0], $valueList[1], $valueList[2], $valueList[3]) or die (ocierror()); 
        }
    }

    @ociexecute($this->stmt, OCI_DEFAULT) or die (ocierror()); 

    return $parameters;

}
4

1 に答える 1

1

OUT変数に関する情報を含むドキュメントに従って、最初に簡単な例を試すことをお勧めします。

PHP が戻り値を保持するのに十分なメモリを割り当てるように、OUT バインドを使用する場合は maxlength を指定する必要があります。

簡単な手順を作成します。

CREATE PROCEDURE foo (p OUT VARCHAR2) IS 
BEGIN
   p := 'bar';
END foo;

次にPHPで:

$stid = oci_parse($conn, 'begin foo(:p1); end;');
oci_bind_by_name($stid, ':p1', $p1, 3);
echo $p1;
于 2013-02-07T14:39:06.767 に答える