안녕하세요. 오라클로 Function만들다 오류가 나서 어떤 의미의 오류인지 알 수 없어서 질문 올립니다.
오라클 에서 아래와 같이 Function 생성 하려고 합니다.
1.
create or replace FUNCTION UF_어쩌구_저쩌구( pi_strText VARCHAR2, pi_strDelim CHAR )... (중략).. pi_strText := LTRIM(RTRIM(pi_strText));
=>이렇게 사용하니 "PLS-00363: 'PI_STRTEXT' 식은 피할당자로 사용될 수 없습니다" 라는 오류가 발생하는데 함수에서 input변수를 함수 구현부 내에서 할당이 불가한가요?
2.1번에서 생성되는 함수는 파이프 라인 함수인데요. 파이프 라인 함수 안에 insert구문 사용은 불가한가요?
INSERT INTO OBJ_SPLIT_TABLE(IDX,VALUE) VALUES(v_intIDX,v_strValue);..
요렇게 구문 작성하니 "ORA-04044: 프로시저, 함수, 패키지 또는 유형이 이곳에서 허용되지 않습니다"라는 오류가 발생합니다.
제가 파이프 라인 함수 개념을 잘못 이해하고 있는지 문의 드립니다.
--* 1. OBJECT 유형 생성 CREATE OR REPLACE TYPE TTYP_SPLIT AS OBJECT ( IDX NUMBER , VAL VARCHAR2(200) ); --* 2. COLLECTION 유형 생성 CREATE OR REPLACE TYPE TTAB_SPLIT IS TABLE OF TTYP_SPLIT; --* 3. PIPELINED 함수 생성 CREATE OR REPLACE FUNCTION FN_TEST ( PV_TEXT IN VARCHAR2 , PV_DELIMETER IN VARCHAR2 DEFAULT ',' ) RETURN TTAB_SPLIT PIPELINED IS VN_IDX NUMBER := 0; VV_TEXT VARCHAR2(4000); VV_DELIMETER VARCHAR2(100); VTYP_SPLIT TTYP_SPLIT; BEGIN VV_TEXT := TRIM(PV_TEXT); VV_DELIMETER := NVL(PV_DELIMETER,','); FOR R IN ( SELECT LEVEL AS IDX , REGEXP_SUBSTR(VV_TEXT,'[^'||VV_DELIMETER||']+',1,LEVEL) AS VALUE FROM DUAL CONNECT BY LEVEL <= (LENGTH(VV_TEXT)-LENGTH(REPLACE(VV_TEXT,VV_DELIMETER)))/LENGTH(VV_DELIMETER)+1 ) LOOP VTYP_SPLIT := TTYP_SPLIT(R.IDX, R.VALUE); PIPE ROW (VTYP_SPLIT); END LOOP; RETURN; END; --* 4. PIPELINED 함수 조회 SELECT A.* FROM TABLE(FN_TEST('A,B,C,D')) A ; --* 5. 함수 내에서 불가피하게 DML문을 사용해야 할 경우 CREATE OR REPLACE FUNCTION FN_TEST RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN /* DML 문장 */ RETURN; END;