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.