php
  • oracle
  • stored-procedures
  • 2014-01-29 1 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; 
    
    } 
    

    나는 그것이 잘 작동 < 10 IN 값을 줄 경우 ,하지만 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보다 큰 숫자는 2 자이므로 오류가 발생합니다.

    Oracle 프로 시저의 소스에 액세스하여 프로 시저의 헤더와 본문에서 매개 변수의 유형을 변경하고 다시 컴파일해야합니다.

    4

    나는 늦게 그에게 조금 알고,하지만 당신이 그냥 참조 문제

    0

    를 해결해야 당신의 oci_bind_by_name

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

    에 버퍼 크기를 추가해야 할 때 매개 변수이 오류도 제기되었다 "IN OUT"으로 선언되었습니다. refcursor를 사용하여 결과를 검색하기 때문에 사실상 선언은 필요하지 않으며 "IN"으로만 변경되었습니다. 이 문제가 해결되었습니다.

    관련 문제