ORA-06502: PL / SQL: ошибка числового значения или значения: слишком маленький буфер строки символов - Выполнение с использованием интерфейса OCI

php oracle types

1190 просмотра

1 ответ

Я полностью изумлен и не понимаю, что мне нужно сделать, чтобы исправить эту ошибку. У меня есть процедура 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

строка целое число Предупреждение: oci_execute () [function.oci-execute]: ORA-06502: PL / SQL: ошибка числа или значения: слишком мал символьный буфер строки ORA-06512: в строке 1 в файле rtp2 / test.php в строке 26 Member ID равен 0

Автор: Sanjay Rao Источник Размещён: 12.11.2019 09:28

Ответы (1)


1 плюс

Решение

Я не парень по 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.

Автор: DCookie Размещён: 08.12.2016 08:20
Вопросы из категории :
32x32