PDO OCI PHP передает параметр массива в хранимую процедуру


У меня есть типы коллекций в oracle, определенные следующим образом:

CREATE OR REPLACE TYPE "NUM_ARRAY" AS TABLE OF NUMBER(8,0)  

И хранимая процедура:

PROCEDURE choice ( name IN VARCHAR2, order IN NUM_ARRAY )

Как выполнить привязку параметров с помощью pdo и php подобным образом ? : $stmt->bindParam(':order ',...);

Спасибо

Author: Sebus, 2016-08-10

1 answers

Я не знаю, ищете ли вы все еще ответ на этот вопрос, но я дам вам свой ответ на случай, если у других возникнет такая же проблема. Я нашел свой ответ по следующей ссылке.

Http://www.oracle.com/technetwork/articles/fuecks-sps-095636.html

Вот функция, которую я создал для передачи параметров процедуре Oracle. Процедура, которую я использую, не возвращает никаких результатов, поэтому эта функция ничего не улавливает.

public function bindVariablesToProcedure($var1, $var2, $var3)
{
    $rtn = []; // initalize array
    if($this->dbconnect)
    {
        /* schema is your database schema
           BindVariable is your stored procedure */
        $bindSql = 'BEGIN schema.BindVariable(:var1, :var2, :var3); END;';

        /* The numbers for the fourth parameter are the character lengths
           that are in my database.  I found that without these numbers
           the "oci_bind_by_name" function would error out. */
        $bindRes = oci_parse($this->dbconnect, $bindSql);
        oci_bind_by_name($bindRes, ':var1', $var1, 100);
        oci_bind_by_name($bindRes, ':var2', $var2, 5);
        oci_bind_by_name($bindRes, ':var3', $var3, 100);

        if(oci_execute($bindRes))
        {
            $rtn['status'] = "success";
        }
        else
        {
            $e = oci_error($bindRes);  // For oci_execute errors pass the statement handle
            $rtn['bindErrorSql'] = $e['sqltext'];
            $rtn['bindErrorCode'] = $e['code'];
            $rtn['bindErrorMsg'] = $e['message'];
            $rtn['status'] = "failed";
        }
    }
    return $rtn;
}    
 1
Author: WKMiller, 2017-02-17 16:16:06