[plsql] DBMS_OUTPUT.PUT_LINE이 인쇄되지 않습니다.

다음 코드를 실행하면 절차가 완료되었다고 표시되고 원하는 정보 (firstName, lastName)를 인쇄하지 않고 아래 표의 선택 쿼리에서 다른 값을 인쇄하지 않습니다.

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

서버 출력을 설정하면

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

여러 번!



답변

“그냥 절차가 끝났다고 말하는 것”의 “그것”은 무엇입니까?

기본적으로 대부분의 도구는 dbms_output쓰기 위한 버퍼를 구성 하지 않으며 코드 실행 후 해당 버퍼에서 읽기를 시도하지 않습니다. 반면에 대부분의 도구는 그렇게 할 수 있습니다. SQL * Plus에서는 명령을 사용해야합니다 set serveroutput on [size N|unlimited]. 그래서 당신은 뭔가를 할 것입니다

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

SQL Developer View | DBMS Output에서 DBMS Output 창을 활성화 한 다음 녹색 더하기 아이콘을 눌러 특정 세션에 대해 DBMS Output을 활성화합니다.

또한 모든 행에 대해 리터럴 “a.firstNamea.lastName”을 인쇄하지 않는다고 가정하면

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


답변

  1. 메뉴 표시 줄의보기 옵션을 통해 Dbms 출력 창이 열려 있는지 확인하십시오.
  2. 녹색 ‘+’기호를 클릭하고 데이터베이스 이름을 추가하십시오.
  3. ‘DBMS_OUTPUT.ENABLE;’쓰기 절차 내에서 첫 번째 줄로. 이것이 문제를 해결하기를 바랍니다.


답변

이 진술

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

문자열을있는 그대로 인쇄하는 것을 의미합니다. 인쇄 할 값을 얻기 위해 따옴표제거합니다 . 올바른 구문은 다음과 같습니다.

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


답변

첫 번째 줄에서 아래와 같이 쿼리를 설정하십시오.

SET SERVEROUTPUT ON 


답변

Oracle SQL Developer를 사용하고 있습니다.

이 도구에서는 dbms_output.put_line에 의해 인쇄 된 결과를보기 위해 DBMS 출력활성화 해야했습니다.

이 옵션은 다른 쿼리 결과가 표시되는 결과 창에서 찾을 수 있습니다. 결과 창에 7 개의 탭이 있습니다. 결과로 명명 된 첫 번째 탭, 다음 탭은 스크립트 출력 등입니다. 여기에서 “DBMS Output”이라는 탭을 찾을 수 있습니다.이 탭을 선택한 다음 첫 번째 아이콘 (대화 상자 아이콘 모양)은 Enable DBMS Output 입니다. 이 아이콘을 클릭하십시오. 그런 다음 PL / SQL을 실행 한 다음 “DBMS Output 탭”을 선택하면 결과를 볼 수 있습니다.


답변

모두 for 루프에 집중하고 있지만 일반 루프를 사용하는 경우 커서 레코드 변수를 사용해야합니다. 다음은 수정 된 코드입니다.

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


답변