다음 코드를 실행하면 절차가 완료되었다고 표시되고 원하는 정보 (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;
답변
- 메뉴 표시 줄의보기 옵션을 통해 Dbms 출력 창이 열려 있는지 확인하십시오.
- 녹색 ‘+’기호를 클릭하고 데이터베이스 이름을 추가하십시오.
- ‘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;
/