¿Cuál es el programa en PLSQL para verificar si un número es primo utilizando una función y un procedimiento?
declare
K number;
L number;
f number;
function prime(n in number, i in number) return flag is
begin
i:=2;
flag:=1;
n:=&n;
for i in 2..n/2
loop
if mod(n,i)=0
then
flag:=0;
exit;
end if;
end loop;
if flag=1
then
dbms_output.put_line('prime');
else
dbms_output.put_line('not prime');
end if;
return flag;
end;
begin
k:=4;
L:=1;
f:= prime(n,i);
dbms_output.put_line('given number is ' || f);
end;
/
Estoy obteniendo la siguiente salida, me pregunto qué está mal en mi código:
lang-none
Ingrese el valor de n: 4
viejo 9: n:=&n;
nuevo 9: n:=4;
declare
*
ERROR en la línea 1:
ORA-06540: PL/SQL: error de compilación
ORA-06553: PLS-906: No es posible la compilación
DECLARE
num NUMBER;
c NUMBER;
PROCEDURE fact (x IN NUMBER, f OUT NUMBER) IS
l_var NUMBER := 1;
BEGIN
FOR i IN 1 .. x LOOP
l_var := l_var * i;
END LOOP;
f := l_var;
END;
BEGIN
num := 6;
fact (num, c);
DBMS_OUTPUT.put_line('El factorial de ' || num || ' es ' || c);
END;
En este segundo código, el resultado no se muestra, no solo para este, incluso para otros códigos muestra la línea “Procedimiento PL/SQL completado con éxito”, pero los resultados no se muestran. ¿Qué está mal?
davy.ai
Para el primer código, parece que el error está en la sintaxis de la línea “n:=&n;”. “&” es el código HTML para ‘&’, por lo que debe reemplazarse solo con “&”. Así que la línea debería ser “n:=&n;”.
Para el segundo código, parece que el comando DBMS_OUTPUT.PUT_LINE no se está ejecutando o mostrando correctamente. Puede haber varias razones para esto, como el búfer de salida que está lleno o la configuración de salida del servidor que está desactivada. Una forma de verificar si el búfer de salida está lleno es intentar aumentar el tamaño del búfer con el comando “SET SERVEROUTPUT ON SIZE <tamaño>”. Otra forma de verificarlo es intentar usar el comando SQL*Plus “SPOOL” para escribir la salida en un archivo en lugar de imprimirlo en la consola.</tamaño>