Tengo el siguiente problema. Tengo un procedimiento almacenado en Oracle. Cuando llamo al procedimiento en PHP, me da el siguiente error:
Warning: oci_execute(): ORA-01403: No se ha encontrado ning�n dato ORA-06512: en "ESTUDIANTE.P_CONSULTA_LIBRO", l�nea 9 ORA-06512: en l�nea 1 in C:\xampp\htdocs\biblioteca\prueba.php on line 11
El procedimiento en Oracle funciona correctamente, pero no sé qué está pasando. Soy nuevo en la codificación en PHP.
Este es el código en PHP
<?php
require_once 'conexion.php';
$sql = 'BEGIN p_consulta_libro(:variable); END;';
$stmt_id = oci_parse($conexion, $sql);
$variable=0111;
oci_bind_by_name($stmt_id, 'variable', $variable);
$res = oci_execute($stmt_id);
print_r($res, true);
?>
Este es el procedimiento almacenado en Oracle.
create or replace procedure p_consulta_libro(idlibro in number )
as
obra varchar2(200);
autor varchar2(50);
valores varchar2(200);
BEGIN
select L.TITULO, A.NOMBRE_AUTOR into obra, autor
from LIBRO L, AUTOR A
where L.ID_LIBRO = idlibro AND A.ID_AUTOR = L.ID_AUTOR;
valores:=concat(concat(obra,' '),autor);
DBMS_OUTPUT.PUT_LINE('El libro es... '||valores);
end;Solución del problema
No sé PHP, pero, desde el punto de vista de Oracle, tal vez prefiera usar una función que devuelva valor; si no se encuentra nada, maneje esa excepción y devuelva algo más (un mensaje o incluso una cadena vacía).
Además, una pista o dos:
- no tiene que seleccionar primero valores en variables declaradas localmente y luego concatenarlos
- hoy en día, se sugiere que separemos las uniones de las condiciones (que deben incluirse en la
wherecláusula), por lo tanto, no separe las tablas con comas en lafromcláusula y únalas correctamentewhere.join - la concatenación, en Oracle, es mucho más simple si usa el operador de concatenación de tubería doble, en lugar de llamadas a funciones
||anidadasconcat
Algo como esto:
create or replace function f_consulta_libro (p_idlibro in number)
return varchar2
as
l_valores varchar2(200);
begin
select l.titulo ||' '|| a.nombre_autor
into l_valores
from libro l join autor a on a.id_autor = l.id_autor
where l.id_libro = p_idlibro;
return l_valores;
exception
when no_data_found then
return 'Nothing has been found';
end;
/
No hay comentarios.:
Publicar un comentario