【问题标题】:How to execute this procedure and get the result?如何执行这个过程并得到结果?
【发布时间】:2013-03-21 02:15:34
【问题描述】:

我有这个 oracle 程序:

procedure ACCOUNT_STATMENT(p_customerid masteraccounts.customerid%type,

                             p_date1      date,

                             p_date2      date,

                             p_val1       out number,

                             p_val2       out number,

                             p_grid       out sys_refcursor)

我使用 PHP 调用它:

$DATE1 = "1-1-2013";
$DATE2 = "1-4-2013";
$ID = 53721;
$sth1 = $conn->prepare("CALL ISPPRO.USERPKG.ACCOUNT_STATMENT(:p_customerid, :DATE1, :DATE2, :p_val1, :p_val2, :p_grid)");
            $sth1->bindParam(":p_customerid", $ID, PDO::PARAM_STR);
            $sth1->bindParam(':DATE1', $DATE1, PDO::PARAM_STR); 
            $sth1->bindParam(':DATE2', $DATE2, PDO::PARAM_STR);
            $sth1->bindParam(':p_val1', $p_val1, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
            $sth1->bindParam(':p_val2', $p_val2, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
            $sth1->bindParam(':p_grid', $p_grid, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
            $sth1->execute();
    print_r($conn->errorInfo());
    $result = $sth1->fetchAll();
    print_r($result);
    print_r($p_val1);
    print_r($p_val2);
    print_r($p_grid);

我得到这个错误:

Array
(
    [0] => HY000
    [1] => 6553
    [2] => OCIStmtExecute: ORA-06553: PLS-306: wrong number or types of arguments in call to 'ACCOUNT_STATMENT'
 (/root/downloads/PDO_OCI-1.0/oci_statement.c:142)
)

有什么问题?

【问题讨论】:

  • 你到处都有PDO::PARAM_STR。尝试用与过程参数匹配的东西替换它?
  • @Mat ,是的,我尝试了一些东西,但都没有工作,我不知道如何处理 sys_refcursor in PHP
  • Procedures of Oracle in php with PDO 的可能重复项,假设 refcursor 是您唯一的问题(即您知道如何正确映射正常类型)。
  • 可能是您的日期格式:"1-4-2013"。 Oracle 需要与NLS_DATE_FORMAT 数据库设置匹配的格式字符串。您可以在过程调用中使用嵌套的TO_DATE(:DATE1,'MM-DD-YYYY')(或任何您的格式)定义您的格式掩码。

标签: php oracle


【解决方案1】:

在 php.ini 中调用此过程之前,您是否创建了绑定变量。您正在使用 :p_customerid,::DATE1 对于输出变量,您必须创建绑定变量,或者您可以在 oracle 中执行此过程

例如

变量 i 编号; \在甲骨文中

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 2016-12-10
    • 2021-09-03
    • 1970-01-01
    • 2021-08-14
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多