下面的代码抛出错误。请帮忙。
ORA-22905: 无法访问非嵌套表项中的行 22905. 00000 - “无法访问非嵌套表项中的行” *原因:尝试访问类型未知的项目的行 解析时间或者不是嵌套表类型 *操作:使用CAST来投射它
CREATE OR REPLACE TYPE custom.TBL_VARCHAR2 IS TABLE OF VARCHAR2(250);
CREATE OR REPLACE FUNCTION custom.FN_REPLACETEXT(
pText IN VARCHAR2,
pPar IN custom.TBL_VARCHAR2
) RETURN VARCHAR2
IS
vText VARCHAR2(32767);
vPos INT;
vValue VARCHAR2(250);
CURSOR cuParameter(POS INT) IS
SELECT VAL
FROM
(
SELECT VAL, ROWNUM AS RN
FROM (
SELECT COLUMN_VALUE VAL
FROM TABLE(pPar)
)
)
WHERE RN=POS+1;
BEGIN
vText := pText;
FOR i IN 1..REGEXP_COUNT(pText, '[{][0-9]+[}]') LOOP
vPos := TO_NUMBER(SUBSTR(REGEXP_SUBSTR(pText, '[{][0-9]+[}]',1,i),2, LENGTH(REGEXP_SUBSTR(pText, '[{][0-9]+[}]',1,i)) - 2));
OPEN cuParameter(vPos);
FETCH cuParameter INTO vValue;
IF cuParameter%FOUND THEN
vText := REPLACE(vText, REGEXP_SUBSTR(pText, '[{][0-9]+[}]',1,i), vValue);
END IF;
CLOSE cuParameter;
END LOOP;
RETURN vText;
EXCEPTION
WHEN OTHERS
THEN
RETURN pText;
END FN_REPLACETEXT;
/
select * from custom.FN_REPLACETEXT('Hello {0}, this is a {2} for {1}', custom.TBL_VARCHAR2('world','all','message'));
例如:您好 {0},这是 {2} 的 {1} 我想将 {0} 替换为 FRINEDS,将 {1} 替换为 SAMPLE,将 {2} 替换为 DYNAMIC_STRING
返回标量数据类型的函数应在
SELECT
子句中调用,而不是在 FROM
子句中。例如:
select FN_REPLACETEXT('Hello {0}, this is a {2} for {1}', TBL_VARCHAR2('world','all','message'))
from dual;