valor que put_line imprimir hace enable ejemplos declarar dbms_output como active plsql oracle10g sqlplus dbms-output

plsql - imprimir - que hace dbms_output put_line



DBMS_OUTPUT.PUT_LINE no imprime (4)

  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.

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 declaración "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( <<some value>> );

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;


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; /


esta declaración

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 sintaxis correcta es

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