我有一个 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游标参数。我认为Yii2使用PDO OCI连接oracle数据库。
Yii 2.0.6 PHP 5.5.24 Oracle 11g
答案 0 :(得分:1)
你似乎在调用带有四个参数的SP
CALL SP_GET_RATES(:1,:2,:3,:4)
但是您只传递了三个,或者您使用了错误的类型
$params = array(
':1' => '20-Nov-2015',
':2' => '21-Nov-2015',
':3' => 'USD'
);
答案 1 :(得分:0)
PDO :: oci不支持REF CURSORS。参考:http://php.net/manual/en/ref.pdo-oci.php
但是对于Yii,有一个使用oci8的解决方法,它支持游标,并得到Yii的良好支持。
Yii有oci8扩展名。与pdo_oci相比,这使得使用oci8更容易,并且在性能方面更好。参考:http://www.yiiframework.com/extension/oci8pdo