【问题标题】:PHP - how to catch response from oracle procedure?PHP - 如何捕获来自 oracle 程序的响应?
【发布时间】:2012-10-21 17:51:59
【问题描述】:

全部。我有一个关于从 oracle 程序中获取响应的问题。 这是我的程序:

PROCEDURE generate_receipt_simop(in_receipt_number IN VARCHAR2, in_inv_status IN VARCHAR2, in_kode_cabang IN VARCHAR2, out_status OUT VARCHAR2, out_message OUT VARCHAR2)is
v_result_simop              NUMBER  DEFAULT 0;
out_status_simop            VARCHAR2(100)   DEFAULT NULL;
out_errormessage_simop      VARCHAR2(100)   DEFAULT NULL;
v_org_id                    NUMBER  DEFAULT 0;

BEGIN    
************
EXCEPTION WHEN OTHERS THEN
        logf('ROLLBACK (RECEIPT)');
        ROLLBACK;
        out_status     := 'F';
        out_message    := 'GENERATE FAILED (RECEIPT) '|| in_receipt_number ||SQLERRM;          
    END; 

我尝试使用 php 调用并读取响应,如下所示:

$param_xpi= array(
                        "in_receipt_number"=>"$x",
                        "in_receipt_status"=>"Y",
                        "in_kode_cabang"=>"PTK",
                        "out_status"=>"",
                        "out_message"=>""
                        );

            $sql_xpi = "DECLARE
            in_receipt_number VARCHAR2(50) DEFAULT '$x';
            in_kode_cabang VARCHAR2(3) DEFAULT 'PTK';
            out_status VARCHAR2(1) DEFAULT '';
            out_message VARCHAR2(240) DEFAULT '';
            in_inv_status VARCHAR2(1) DEFAULT 'Y';
            BEGIN
            XPI2.XPI2_AR_API_RECEIPT_PKG.generate_receipt_simop(in_receipt_number, in_inv_status, in_kode_cabang, out_status, out_message);
            dbms_output.put_line('Generate Status : ' || out_status);
            dbms_output.put_line('Message Status : ' || out_message);
            END;";

            $result = $db_simkeu->query($sql_xpi, $param_xpi);

            print_r($result);

            $out_status1 = $param_xpi['out_status'];
            $out_message = $param_xpi['out_message'];

但是,变量 $out_status1 和 $out_message 始终为空。我认为我在此 php 代码中收听响应的方法有问题。 请帮忙

感谢您的回答。

【问题讨论】:

    标签: php oracle stored-procedures


    【解决方案1】:

    您确定您的代码会引发任何异常吗?异常处理程序WHEN OTHERS 仅在发生(任何)异常时才起作用。因此,如果您的代码没有引发异常,那么您的值将保持为空。

    【讨论】:

    • 其实我是有意询问 $result = $db_simkeu->query($sql_xpi, $param_xpi);执行并从过程中获取响应是真正的语法吗?我只是得到一个这样的例子,但似乎 $param_xpi 只显示默认值。 $param_xpi 没有从该执行中获得任何其他值
    • 很遗憾,我不懂 PHP。首先在 SQL*Plus 中尝试您的代码以检查其结果。如果它返回默认值以外的其他值,则问题出在 PHP 调用中。
    • 是的,它已在 TOAD for Oracle 上成功运行。变量显示它的结果。我很确定我的 php 代码有问题。但是,我现在还在修复它,我仍然无法弄清楚问题......哦..请有人帮忙,我也尝试oci_bind_by_name但仍然没有运行
    • 看看这个:http://blog.mclaughlinsoftware.com/2009/07/03/php-out-mode-parameter/。我希望它有所帮助。
    猜你喜欢
    • 2014-06-29
    • 2015-05-14
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多