TYPEのMEMBER FUNCTION PROCEDURE を使ってVARCHAR2をラッピングしてみた

CREATE OR REPLACE TYPE STRING_TYPE
AS OBJECT (
	 STR VARCHAR2(4000)
	,MEMBER FUNCTION LEN RETURN NUMBER
	,MEMBER FUNCTION SUBSTRING(S IN NUMBER,L IN NUMBER) RETURN VARCHAR2
	,MEMBER PROCEDURE PRINT
)
/
CREATE OR REPLACE TYPE BODY STRING_TYPE AS
	MEMBER FUNCTION LEN RETURN NUMBER
	IS
	BEGIN
		RETURN LENGTH(STR);
	END;
	MEMBER FUNCTION SUBSTRING(S IN NUMBER,L IN NUMBER) RETURN VARCHAR2
	IS
	BEGIN
		RETURN SUBSTR(STR,S,L);
	END;
	MEMBER PROCEDURE PRINT
	IS
	BEGIN
		DBMS_OUTPUT.PUT_LINE(STR);
	END;
END;
/

STRING_TYPEってtypeを作ってlengthとsubstrを実装した。
実装

CREATE OR REPLACE PROCEDURE TEST
IS
	MOJI STRING_TYPE;
BEGIN
	MOJI := STRING_TYPE('AIUEO');
	MOJI.PRINT;
	DBMS_OUTPUT.PUT_LINE('LENGTH=' || MOJI.LEN);
	DBMS_OUTPUT.PUT_LINE('SUBSTR(2,2)=' || MOJI.SUBSTRING(1,1));
END;
/

実行結果

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    MOJI STRING_TYPE;
  3  BEGIN
  4    MOJI := STRING_TYPE('AIUEO');
  5    MOJI.PRINT;  
  6    DBMS_OUTPUT.PUT_LINE('LENGTH=' || MOJI.LEN);
  7    DBMS_OUTPUT.PUT_LINE('SUBSTR(2,2)=' || MOJI.SUBSTRING(1,1));
  8  END;
  9  /
AIUEO
LENGTH=5
SUBSTR(2,2)=A

PL/SQL procedure successfully completed.