2017-11-30 3 views
0

Oracle DB에 문제가 있습니다. 나는 SQL 개발자에서이 기능을 실행하려고하면ORA-6502, WEB

<?php 
    require_once 'includes/conn.php'; 
    function connect_db() 
    { 
     if ($c=oci_pconnect(uname,pwd, host,'AL32UTF8')) 
      return $c; 
     else 
      die("ERROR"); 
    } 
    $conn=connect_db(); 

    $query = "BEGIN :ds_id :=DS.REG_DS1(:F_NAME);END;"; 
    $stmt=oci_parse($conn,$query); 
    $f_name='John Doe'; 
    $ds_id=-1; 

    oci_bind_by_name($stmt, ":ds_id", $ds_id); 
    oci_bind_by_name($stmt, ":F_NAME", $f_name); 
    if(oci_execute($stmt)) 
    { 
     echo 'good'; 
    } 
    else 
     print_r(oci_error($stmt)); 
?> 

는 여기가 문제없이 실행 기능 REG_DS1

FUNCTION REG_DS1(F_NAME IN VARCHAR) RETURN NUMBER AS 
    DS_ID NUMBER(8,0):=9988; 
BEGIN 
-- INSERT INTO TEST VALUES(F_NAME,SYSDATE); 
    RETURN DS_ID; 
END REG_DS1; 

입니다. 하지만 위의 PHP 스크립트에서 실행하면, 그것은 나에게 오류가 있습니다 : 나는 다른 번호보다 100 DS_ID 변수를 변경하면

ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 1 [offset] => 0 [sqltext] => BEGIN :ds_id :=DS.REG_DS1(:F_NAME);END;) 

, 그것은 모두에서 잘 작동합니다. 하지만 내가 99 이상 번호로 설정하면 PHP 스크립트에서 오류가 발생합니다.

무엇이 문제입니까?

+0

아아 나는 회답에 건설적인 도움이 될만한 정보를 알고 있지만, 기록을 위해 6502 태그는 https://stackoverflow.com/questions/tagged/6502에 태그가 질문 용으로 정의되어 있기 때문에 삭제했습니다. MOS Technology가 개발 한 "6502, 8 비트 마이크로 프로세서"와 관련이 있으며,이 ORA-06502 질문은 관련이 없다고 생각합니다. 순수 우연의 일치로 6502 8 비트 프로세서에는 ORA 명령이 있습니다. – Tommy

답변

0

--jst 아이디어와

변수 decleration 또는

oci_connect($ODBuser,$ODBpass,$ODBhost,$db_charset); 

이 같은 시도해야 약간의 해상력 문제가

oci_pconnect(uname,pwd, host,'AL32UTF8')

샘플 코드 좋아하지이 솔루션

아니다 :

,363,210
-- just idea 
<?php 

$file = "../script/param.CML"; 
$encryptObj = new cast128; 
$encryptObj->setkey("SABBIllustrateKey"); 

$fp=fopen($file,'r'); 
$strContent = fread($fp, filesize($file)); 
fclose($fp); 

$strContent=$encryptObj->decrypt($strContent); 

$ArConnect=split(" ",$strContent); 
$OraService=$ArConnect[8]; 
$OraUser=$ArConnect[9]; 
$OraDBpass=$ArConnect[10]; 
$db_charset = 'AL32UTF8'; 


$cursor=oci_connect($OraUser,$OraDBpass,$OraService,$db_charset); 

if(!$cursor) 
{ 
echo "<br>Error In connection:- reason<BR>"; 
$e = oci_error(); // For oci_connect errors pass no handle 
} 

?>


<?php 

$file = "../script/param.CML"; 
$encryptObj = new cast128; 
$encryptObj->setkey("SABBIllustrateKey"); 

$fp=fopen($file,'r'); 
$strContent = fread($fp, filesize($file)); 
fclose($fp); 

$strContent=$encryptObj->decrypt($strContent); 

$con=split(" ",$strContent); 
$OraService=$con[8]; 
$OraUser=$con[9]; 
$OraDBpass=$con[10]; 
$db_charset = 'AL32UTF8'; 


$cursor=oci_connect($OraUser,$OraDBpass,$OraService,$db_charset); 

if(!$cursor) 
{ 
echo "<br>Error In connection:- reason<BR>"; 
$e = oci_error(); // For oci_connect errors pass no handle 
} 

?> 
0

들으 사람은, 결국 내가 문제를 스스로 해결했다. 문제는

oci_bind_by_name($stmt, ":ds_id", $ds_id,10,SQLT_INT); 

oci_bind_by_name($stmt, ":ds_id", $ds_id); 

을 변경 값

복귀 가변 크기로하는 문제가 해결되었다.