오브젝트 타입
추상 데이터 타입인 오브젝트 타입에 대해서 설명합니다.
개요
DROP TYPE number_array FORCE;
-- Stack 내부에서 사용하는 데이터를 위한 최대 크기의 한계가 없는 배열 데이터 타입
CREATE OR REPLACE TYPE number_array AS TABLE OF NUMBER;
/
show err
DROP TYPE type_nstack force;
-- number stack의 추상 데이터 타입
CREATE OR REPLACE TYPE type_nstack AS OBJECT(
maxlen pls_integer, -- Stack의 최대 크기
topptr pls_integer, -- Stack의 TOP
array number_array, -- Stack 내부 데이터
MEMBER PROCEDURE pop (self in out nocopy type_nstack),
MEMBER FUNCTION top (self in out nocopy type_nstack) return NUMBER,
MEMBER PROCEDURE push (self in out nocopy type_nstack, input NUMBER),
CONSTRUCTOR FUNCTION type_nstack(maxlen pls_integer) RETURN SELF AS RESULT
);
/
show err
CREATE OR REPLACE TYPE BODY type_nstack
AS
MEMBER PROCEDURE pop (self in out nocopy type_nstack)
AS
BEGIN
IF topptr <= 0 THEN
raise_application_error(-20000, 'stack is empty', true);
ELSE
array(topptr) := NULL;
topptr := topptr - 1;
END IF;
END;
MEMBER FUNCTION top (self in out nocopy type_nstack) return NUMBER
AS
BEGIN
IF topptr <= 0 THEN
return NULL;
ELSE
return array(topptr);
END IF;
return NULL;
END;
MEMBER PROCEDURE push (self in out nocopy type_nstack, input NUMBER)
AS
BEGIN
IF topptr = maxlen THEN
raise_application_error(-20001, 'stack is full', true);
ELSE
array(self.topptr + 1) := input;
topptr := topptr + 1;
END IF;
END;
CONSTRUCTOR FUNCTION type_nstack(maxlen pls_integer) RETURN SELF AS RESULT
AS
BEGIN
array := number_array();
array.extend(maxlen);
topptr := 0;
RETURN;
END;
END;
/
show err
set serveroutput on
-- 간단한, Stack Push/Pop 동작 테스트 애플리케이션
declare
s1 type_nstack;
begin
s1 := type_nstack(4); -- 최대 크기 4짜리 Stack의 생성
s1.push(10); -- 10을 Push
s1.push(20); -- 20을 Push
s1.push(30); -- 30을 Push
s1.push(40); -- 40을 Push
dbms_output.put_line (s1.top); -- Stack의 Top을 조회
s1.pop; -- stack pop
dbms_output.put_line (s1.top); -- Stack의 Top을 조회
dbms_output.put_line (s1.top); -- Stack의 Top을 조회
s1.pop; -- stack pop
dbms_output.put_line (s1.top); -- Stack의 Top을 조회
s1.pop; -- stack pop
s1.pop; -- stack pop
s1.pop; -- stack pop : Stack이 비어 있으므로 에러
end;
/생성자
디폴트 생성자
사용자 정의 생성자
Attribute
메소드
생성자 메소드
정적 메소드
ORDER 메소드
메소드
파라미터
반환값
MAP 메소드
멤버 메소드
오브젝트 관련 정적 뷰
Last updated

