Я полностью вспыхнул и не понимаю, что мне нужно сделать, чтобы исправить эту ошибку. У меня есть процедура plsql, которая принимает строку varchar2 и параметр OUT, который является номером. Можете ли вы помочь мне, поскольку я учусь и новичок в plsql и php.
тип столбцов member_name – VARCHAR2 (100), а member_id – NUMBER (20)
create or replace procedure GET_MEMBER_ID (V_MEMBER_NAME IN VARCHAR2,V_MEMBER_ID OUT NUMBER ) AS BEGIN SELECT member_id INTO V_MEMBER_ID FROM mn_member WHERE member_name = V_MEMBER_NAME; END; /
Я выполняю вышеуказанную хранимую процедуру с php следующим образом
error_reporting(E_ALL); ini_set('display_errors', 1); $conn = oci_connect("$user","$password","$sid"); $MEMBER_ID=0; $MEMBER_NAME='45390'; echo gettype($MEMBER_NAME), "\n"; echo gettype($MEMBER_ID), "\n"; $sql_get_member_id = "BEGIN GET_MEMBER_ID(:MEMBER_NAME,:MEMBER_ID);END;"; $stmt1 = oci_parse($conn,$sql_get_member_id); // Bind the input parameter oci_bind_by_name($stmt1,':MEMBER_NAME',$MEMBER_NAME); oci_bind_by_name($stmt1,':MEMBER_ID',$MEMBER_ID); oci_execute($stmt1); echo "Member ID is ".$MEMBER_ID; ?>
Это результат, который я вижу в php
string integer Предупреждение: oci_execute () [function.oci-execute]: ORA-06502: PL / SQL: числовая или значащая ошибка: буфер символьной строки слишком мал ORA-06512: в строке 1 в rtp2 / test.php on line 26 Member ID – 0
Я не парень PHP, но из документов :
«Вы должны указать maxlength при использовании привязки OUT, чтобы PHP выделял достаточно памяти для хранения возвращаемого значения».
Возможно, попробуйте что-то вроде:
// Bind the input parameter oci_bind_by_name($stmt1,':MEMBER_NAME',$MEMBER_NAME); oci_bind_by_name($stmt1,':MEMBER_ID',$MEMBER_ID,20,SQLT_INT);
Не уверен в необходимости спецификации спецификации типа SQLT_INT.