Php 带游标的Yii2 Oracle过程

Php 带游标的Yii2 Oracle过程,php,oracle,stored-procedures,pdo,yii,Php,Oracle,Stored Procedures,Pdo,Yii,我有一个Oracle存储过程,它有一个IN-OUT游标参数 SP_GET_RATES ( M_CHECKIN_DATE VARCHAR2, M_CHECKOUT_DATE VARCHAR2, M_CURRENCY VARCHAR2, M_RESULT IN OUT SASIAPLSQLTAB.SEARCH_RESULT_CURSOR ) 在Yii2中,我尝试使用此方法来获得程序结果 $params = array( ':1' =

我有一个Oracle存储过程,它有一个IN-OUT游标参数

SP_GET_RATES
(     
 M_CHECKIN_DATE VARCHAR2,
 M_CHECKOUT_DATE  VARCHAR2,
 M_CURRENCY VARCHAR2,
 M_RESULT   IN OUT  SASIAPLSQLTAB.SEARCH_RESULT_CURSOR
)
在Yii2中,我尝试使用此方法来获得程序结果

$params = array(            
        ':1' => '20-Nov-2015',
        ':2' => '21-Nov-2015',
        ':3' => 'USD'                 
    );

    $stmt = $connection->createCommand("CALL SP_GET_RATES(:1,:2,:3,:4)", $params);
    $stmt->bindParam(':4', $return_cursor,\PDO::PARAM_STR|\PDO::PARAM_INPUT_OUTPUT,4000);
    $stmt->queryAll();
但是当执行这个时,我得到了一个错误

SQLSTATE[HY000]: General error: 6553 OCIStmtExecute: ORA-06553: PLS-306: wrong number or types of arguments in call to 'SP_GET_RATES'
(ext\pdo_oci\oci_statement.c:148)
The SQL being executed was: CALL SP_GET_RATES('20-Nov-2015','21-Nov-2015','USD',NULL)
我尝试了不同的方法来绑定这些值,但仍然不知道如何在Yii2中绑定IN-out cursor参数。我认为Yii2使用PDO OCI连接oracle数据库

Yii 2.0.6 PHP 5.5.24
Oracle11g

您似乎在用四个参数调用SP

 CALL SP_GET_RATES(:1,:2,:3,:4)
但是您只传递了三个,或者您对值使用了错误的类型

 $params = array(            
    ':1' => '20-Nov-2015',
    ':2' => '21-Nov-2015',
    ':3' => 'USD'                 
);

PDO::oci不支持引用游标。参考:

但是对于Yii来说,有一个解决方法,就是使用oci8,它支持游标,并且受到Yii的良好支持


Yii有oci8扩展。与pdo_oci相比,这使得使用oci8更容易,而且在性能方面也更好。参考:

否。我正在添加第四个参数作为bindParam$stmt->bindParam(':4',$return\u cursor,\PDO::PARAM\u STR | \PDO::PARAM\u INPUT\u OUTPUT,4000);