El problema se presentó usando PHP con Zend Framework 1 y Oracle 11G más detalles a continuación.
Oracle stored procedure:
CREATE OR REPLACE PROCEDURE FGONZALES.GRABA_PRUEBA (ls_parametro varchar2 ls_mensaje out varchar2)
Llamando al stored procedure desde PHP:
$param = 'test '; $mensaje = ''; //O nulo $params = array( 'PARAM' => $param, 'MENSAJE' => &$mensaje, ); $sql = 'BEGIN GRABA_PRUEBA( :PARAM, :MENSAJE ); END;'; $stmt = $db->prepare($sql); $stmt->execute($params); $respuesta = $mensaje;
Con los pasos anteriores obtengo el siguiente error por parte de Oracle:
6502 ORA-06502: PL/SQL: error : buffer de cadenas de caracteres demasiado pequeño numerico o de valor.
Para este caso ls_mensaje del stored procedure solo puede guardar un caracter, si pasa de uno aparece el error ORA-06502.
Mi solución fue la siguente:
$mensaje = str_repeat(' ', 4000);
Declarar la variable con un máximo tamaño para VARCHAR2 de Oracle.