php
  • oracle
  • stored-procedures
  • 2014-01-29 68 views 0 likes 
    0

    下面是我的程序數字或值錯誤:字符串緩衝區太小 - PHP +甲骨文

    NOBL_TEC_TEST_PROC(v1 number,v2 out number) 
    

    我的模型功能

    public function testProc() 
    { 
        $result = ''; 
        $db = "orcl"; 
        $conn = oci_connect("***", "****", $db); 
        $sql = 'begin NOBL_TEC_TEST_PROC(222, :seqno); end;'; 
        $stmt = oci_parse($conn,$sql); 
        oci_bind_by_name($stmt, ':seqno', $result); 
        oci_execute($stmt); 
    
        return $result; 
    
    } 
    

    如果我給IN值< 10它工作正常,但是當我嘗試給IN值> 10時,它會給出以下錯誤。

    <b>Warning</b>: oci_execute(): ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 1 in.... 
    

    我該如何解決這個問題?任何幫助?謝謝

    +0

    您需要更改過程....您正在將其中一個參數分配給該過程中的局部變量(或者是某些過程調用等)。局部變量沒有正確的數據類型來接受你傳遞的信息......你將不得不改變它。 – Ben

    +0

    我應該如何更改程序?是一個PHP開發人員,所以我真的不知道.. – vamsi

    +0

    如果你發佈的程序,然後有人可以幫助...改變它可能會產生效應,所以最好問問負責人。 – Ben

    回答

    0

    可能在db程序參數IN有參數VARCHAR2(1)或類似的東西。

    10以上的數字是兩個字符,所以會引發錯誤。

    您應該簡單地訪問Oracle過程的源代碼,更改過程的頭和主體中的參數類型並重新編譯它。

    4

    我知道它有點晚,但是你需要你的緩衝區大小添加到您的oci_bind_by_name

    oci_bind_by_name($stmt, ':seqno', $result,2000); 
    

    這應該解決您的問題

    0

    僅供參考:還有人提出了這個錯誤,當一個參數被宣佈爲「IN OUT」。由於我們使用refcursor來檢索結果,因此這種聲明實際上並不需要,並且僅被更改爲「IN」。這解決了我們的問題。

    相關問題