오라클 프로시저에서 서버 출력 설정
간단한 절차를 만들었습니다.이 절차에서는 몇 가지 데이터를 출력하고자 합니다.그러나 설정된 서버 출력을 설정하는 곳마다
라고 합니다.
오류(26,5): PLS-00103: 다음 중 하나를 예상할 때 "SERVEROUT" 기호가 발생했습니다. . ( ), * @ % & = - + < / > at is mod 나머지는 rem = > <> 또는 != 또는 ~= > = <= > 등입니다. || 멀티셋 멤버 하위 멀티셋 사이의 like4 like4.
어디에 두든 상관없어요, 계속 쓰여요.
create or replace PROCEDURE discount
is --- signature
BEGIN --- executable part
update dvd set me_our_price = me_our_price*0.90 WHERE me_release_year = 2011;
update dvd set me_our_price = me_our_price*0.80 WHERE me_release_year = 2010;
update bluray set me_our_price = me_our_price*0.95 WHERE me_release_year = 2011;
update bluray set me_our_price = me_our_price*0.90 WHERE me_release_year = 2010;
DBMS_OUTPUT.PUT_LINE(' Blurays ');
for i in (
SELECT e.mo_title, e.mo_bluray.me_list_price as me_list_price, e.mo_bluray.me_our_price as me_our_price FROM movie e where e.mo_bluray is not null
)
loop
DBMS_OUTPUT.PUT_LINE(i.mo_title|| ' ' || i.me_list_price|| ' ' || i.me_list_price);
end loop;
DBMS_OUTPUT.PUT_LINE(' DVDs ');
for i in (
set serveroutput on
SELECT e.mo_title, e.mo_dvd.me_list_price as me_list_price, e.mo_dvd.me_our_price as me_our_price FROM movie e where e.mo_dvd is not null
)
loop
DBMS_OUTPUT.PUT_LINE(i.mo_title|| ' ' || i.me_list_price|| ' ' || i.me_list_price);
end loop;
END discount;
"SET SERVER OUTPUT ON"의 사용법을 이해하기 위해 예를 들어보겠습니다.
DECLARE
a number(10) :=10;
BEGIN
dbms_output.put_line(a) ;
dbms_output.put_line('Hello World ! ') ;
END ;
출력: PL/SQL 절차가 예상 출력 없이 성공적으로 완료되었습니다.
그리고 뒤에 있는 주요한 이유는, 우리가 dbms_output 안에 무엇을 통과시키든 간에.put_line(' ARPONT '/VALUES), 즉 ARPONT/VALUES는 SGA(Shared Global Area) 메모리 영역의 버퍼 내부에 최대 2000바이트까지 저장됩니다.
*참고 :***그러나 이 버퍼는 **dbms_output package를 사용할 때만 생성됩니다.그리고 환경 변수는 한 세션에 한 번만 설정하면 됩니다!!
그리고 해당 버퍼에서 가져오려면 세션의 환경 변수를 설정해야 합니다.서버 출력을 (이름 때문에) 설정하는 것은 초보자들에게 많은 혼란을 주지만 유감스럽게도 그런 것은 아닙니다. SET SERVER OUTPUT ON을 사용하는 것은 PL/SQL 엔진에 다음과 같은 것을 알려주는 것입니다.
*안녕하세요 dbms_output 안에 전달할 ARGONT/VALUES를 출력해주세요.put_line
그리고 PL/SQL 런타임 엔진은 인수를 메인 콘솔에 출력합니다.
잘 알고 있습니다. 좋은 일만 가득하시길 바랍니다.Oracle Server Engine의 아키텍처 구조에 대한 자세한 내용은 Quora http://qr.ae/RojAn8 에서 확인할 수 있습니다.
그리고 "세션 초반에 SET SERVER OUTPUT을 사용해야 합니다."라는 질문에 답변을 드립니다.
"SET server output ON"은 SQL*Plus 명령이며 유효한 PL/SQL이 아닙니다.
먼저 sp에 다음 코드를 추가합니다.
BEGIN
dbms_output.enable();
dbms_output.put_line ('TEST LINE');
END;
Oracle SQL 개발자에서 코드를 컴파일합니다.메뉴 보기 --> dbms 출력으로 이동합니다.Icon Green Plus를 클릭하고 스키마를 선택합니다.지금 돌려요.
한테 요, SET SERVEROUTPUT ON;
전에BEGIN
러.
모두가 이를 제안했지만 실제로 어디에 줄을 세울 것인지에 대한 조언은 없습니다.
SET SERVEROUTPUT ON;
BEGIN
FOR rec in (SELECT * FROM EMPLOYEES) LOOP
DBMS_OUTPUT.PUT_LINE(rec.EmployeeName);
ENDLOOP;
END;
그렇지 않으면 출력이 표시되지 않습니다.
If you want to execute any procedure then firstly you have to set serveroutput on in the sqldeveloper work environment like.
-> SET SERVEROUTPUT ON;
-> BEGIN
dbms_output.put_line ('Hello World..');
dbms_output.put_line('Its displaying the values only for the Testing purpose');
END;
/
절차는 성공했지만 출력은 모두 성공했습니다.
오류 행 1:예기치 않은 식별자
코드는 다음과 같습니다.
SET SERVEROUTPUT ON
DECLARE
-- Curseurs
CURSOR c1 IS
SELECT RWID FROM J_EVT
WHERE DT_SYST < TO_DATE(TO_CHAR(SYSDATE,'DD/MM') || '/' || TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - 3));
-- Collections
TYPE tc1 IS TABLE OF c1%RWTYPE;
-- Variables de type record
rtc1 tc1;
vCpt NUMBER:=0;
BEGIN
OPEN c1;
LOOP
FETCH c1 BULK COLLECT INTO rtc1 LIMIT 5000;
FORALL i IN 1..rtc1.COUNT
DELETE FROM J_EVT
WHERE RWID = rtc1(i).RWID;
COMMIT;
-- Nombres lus : 5025651
FOR i IN 1..rtc1.COUNT LOOP
vCpt := vCpt + SQL%BULK_RWCOUNT(i);
END LOOP;
EXIT WHEN c1%NOTFOUND;
END LOOP;
CLOSE c1;
COMMIT;
DBMS_OUTPUT.PUT_LINE ('Nombres supprimes : ' || TO_CHAR(vCpt));
END;
/
exit
언급URL : https://stackoverflow.com/questions/13114220/set-serveroutput-on-in-oracle-procedure
'programing' 카테고리의 다른 글
젠드 프레임워크 2에서 렌더 뷰를 비활성화하는 방법? (0) | 2023.09.24 |
---|---|
gcc는 리눅스 ELF에 어떤 기능을 추가합니까? (0) | 2023.09.24 |
팬더 데이터 프레임을 신청하기 위해 람다를 전달하는 데 문제가 있음 (0) | 2023.09.24 |
네임스페이스가 있는 XML 구문 분석에 jQuery를 사용하는 방법 (0) | 2023.09.24 |
MYSQL LIMIT 키워드에 대한 ANSI SQL 대안이 있습니까? (0) | 2023.09.24 |