Php 带游标的Yii2 Oracle过程
我有一个Oracle存储过程,它有一个IN-OUT游标参数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' =
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);