Q & A

Re: PL/SQL Debug Mode사용시 Tool이 멈춰요.

Date2003.06.27 / Hit : 13530
PL/SQL Debug Mode사용시 Tool이 멈춰요.
테스트 해 본 결과, 아래의 PL/SQL을 Debug 컴파일 하면 서버에스 NULL Event를 대기하는 상태로 Hang 이 걸려 있습니다. 9iR2 버전에서만 발생하며, 이 현상은 SQL*Plus 나 다른 툴에서도 마찬가지 현상을 보입니다. 아마 서버의 버그인 것 같습니다. NULL Event는 오라클을 만드는 프로그래머가 어떤 이유로 Waiting 상태에 들어갔는지를 알아내지 못한 경우에 표시되는 이벤트를 말하므로, 실제 이유가 무엇인지는 알 수 없습니다. 오라클에 요청하여 Patch 가 있으면 Patch를 적용하십시요. 즐거운 하루 되십시요.

---------- Original Message ----------
이름 : 김동권 제목 : PL/SQL Debug Mode사용시 Tool이 멈춰요. 아래 코드를 오라클 8.1.7에서 디버그모드에서 정상적으로 디버깅을 하나, 오라클 9i(9.2.0~)버전에서는 Orange가 멈춰 버리네요. 데이터베이스서버의 CPU도 사용량이 증가하구요.

--------------------------------------------------------
샘플

--------------------------------------------------------
CREATE TABLE D30_Day_Dim ( day_key NUMBER(5) NOT NULL, ymd CHAR(8) NOT NULL, year1 CHAR(4) NOT NULL, half1 VARCHAR2(10) NOT NULL, quarter1 VARCHAR2(10) NOT NULL, mon1 CHAR(2) NOT NULL, day1 CHAR(2) NOT NULL, week_year CHAR(2) NOT NULL, week_mon CHAR(2) NOT NULL, day_week CHAR(2) NOT NULL, weekend CHAR(1) NOT NULL, holiday_key CHAR(1) NOT NULL, holiday_nm VARCHAR2(30) NOT NULL, UPDDATE NUMBER(5) NULL ) TABLESPACE users ; create or replace procedure p_d30_insert (p_s_date varchar2, p_day_key number, p_duration number) is v_date1 date; v_ymd char(8); -- 20020813, ... v_year1 char(4); v_mon1 char(2); v_day1 char(2); v_quarter1 char(1); v_half1 char(6); v_weekend1 char(1); v_week_year1 char(2); v_week_mon1 char(1); v_day_week1 char(2); v_holiday1 char(1); v_holiday_nm1 varchar2(30); sql_stmt01 varchar2(2000) := 'insert into d30_day_dim (DAY_KEY,YMD,YEAR1,HALF1,QUARTER1,MON1,DAY1' ||',WEEK_YEAR,WEEK_MON,DAY_WEEK,WEEKEND' ||',HOLIDAY_KEY,HOLIDAY_NM, upddate) ' ||'values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13, :14)'; begin if p_s_date is null then return; end if; if p_day_key is null then return; end if; if p_duration is null then return; end if; EXECUTE IMMEDIATE 'alter session set nlp_s_date_language = ''KOREAN'''; -- 요일을 한글로 For i in 1..p_duration Loop select to_date(p_s_date,'YYYYMMDD') + (i - 1) into v_date1 from dual; select to_char(v_date1,'YYYYMMDD') -- 년월일 , to_char(v_date1,'YYYY') -- 년 , to_char(v_date1,'MM') -- month , to_char(v_date1,'DD') -- day , to_char(v_date1,'Q') -- 분기 , decode(sign(to_number(to_char(v_date1,'MM')) - 7), -1, '전반기','후반기') -- 반기 , decode(substr(to_char(v_date1,'Day'),1,1),'일','Y','토','Y','N') -- 주중주말(토/일) 국경일 정보 추가 수정★ , to_char(v_date1,'IW') -- 년주차 년주차는 년에 종속되지 않는다. 20021229는 52, 20021230은 01로 , to_char(v_date1,'W') -- 월주차 , substr(to_char(v_date1,'Day'),1,1) -- 요일 into v_ymd ,v_year1 ,v_mon1 ,v_day1 ,v_quarter1 ,v_half1 ,v_weekend1 ,v_week_year1 ,v_week_mon1 ,v_day_week1 from dual; EXECUTE IMMEDIATE sql_stmt01 USING i, v_ymd, v_year1, v_half1, v_quarter1, v_mon1, v_day1 ,v_week_year1, v_week_mon1, v_day_week1, v_weekend1 ,'Z','평일', 11111; End Loop; commit; dbms_output.put_line ('d30 success'); exception when others then rollback; dbms_output.put_line (SQLCODE || ' : ' || substr(SQLERRM,1,100)); end; / -- SET SERVEROUTPUT ON SIZE 1000000 -- exec p_d30_insert('20030101',1,365);
  • 대표전화
    1660-1675

  • 기술 문의
    02-6931-1734

  • 오렌지 문의
    070-8666-8175

  • 라이선스 문의
    02-6931-1728