DBMS_OUTPUT.PUT_LINE no imprime

Al ejecutar el siguiente código, solo dice que el procedimiento se completó y no imprime la información que quiero (firstName, lastName) y luego los otros valores de la consulta de selección en una tabla a continuación.

CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char) AS CURSOR quote_recs IS SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r, rolequote rq, actor a, movie m where rq.quoteID = q.quoteID AND rq.roleID = r.roleID AND r.actorID = a.actorID AND r.movieID = m.movieID AND a.actorID = id_actor; BEGIN FOR row IN quote_recs LOOP DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName'); end loop; END PRINT_ACTOR_QUOTES; / 

Al configurar la salida del servidor, obtengo

 a.firstNamea.lastName a.firstNamea.lastName a.firstNamea.lastName a.firstNamea.lastName 

¡varias veces!

¿Qué es “eso” en la statement “solo dice que el procedimiento está completo”?

Por defecto, la mayoría de las herramientas no configuran un búfer para que dbms_output escriba y no intente leer desde ese búfer después de que se ejecuta el código. La mayoría de las herramientas, por otro lado, tienen la capacidad de hacerlo. En SQL * Plus, necesitaría usar el comando set serveroutput on [size N|unlimited] . Entonces harías algo como

 SQL> set serveroutput on size 30000; SQL> exec print_actor_quotes( <> ); 

En SQL Developer, iría a View | DBMS Output View | DBMS Output para habilitar la ventana Output de DBMS, luego presione el ícono verde más para habilitar DBMS Output para una sesión en particular.

Además, suponiendo que no desea imprimir el literal “a.firstNamea.lastName” para cada fila, es probable que desee

 FOR row IN quote_recs LOOP DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName ); END LOOP; 

esta statement

DBMS_OUTPUT.PUT_LINE (‘a.firstName’ || ‘a.lastName’);

significa imprimir la cadena tal como está … eliminar las comillas para obtener los valores que se van a imprimir. Así que la syntax correcta es

 DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName); 
  1. Asegúrese de tener abierta la ventana de salida de Dbms a través de la opción de vista en la barra de menú.
  2. Haga clic en el signo verde ‘+’ y agregue el nombre de su base de datos.
  3. Escribe ‘DBMS_OUTPUT.ENABLE;’ dentro de su procedimiento como primera línea. Espero que esto resuelva tu problema.

Todos ellos se están concentrando en el bucle for pero si usamos un bucle normal, entonces tuvimos que usar la variable de registro del cursor. El siguiente es el código modificado

  CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char) AS CURSOR quote_recs IS SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r, rolequote rq, actor a, movie m where rq.quoteID = q.quoteID AND rq.roleID = r.roleID AND r.actorID = a.actorID AND r.movieID = m.movieID AND a.actorID = id_actor; recd quote_recs%rowtype; BEGIN open quote_recs; LOOP fetch quote_recs into recs; exit when quote_recs%notfound; DBMS_OUTPUT.PUT_LINE(recd.firstName||recd.lastName); end loop; close quote_recs; END PRINT_ACTOR_QUOTES; / 

Establezca Query como se indica a continuación en la primera línea

 SET SERVEROUTPUT ON 
    Intereting Posts