Oracle 12c:ORA-06575包或函数name_of_func处于无效状态

时间:2017-04-19 13:21:05

标签: oracle oracle12c

我正在尝试创建一个接受输入(字符数据)并替换一组特定字符的函数 到目前为止我创建的函数是以下

CREATE FUNCTION name_of_func(input VARCHAR(4000)
  RETURN VARCHAR(4000) IS
  BEGIN
    return replace(replace(replace(replace(replace(input, '\', '\\'), CHR(10), '\n'), CHR(13) || CHR(10), '\n'), CHR(13), '\n'),'"', '\"');
  END name_of_func;

如何编译此函数?

2 个答案:

答案 0 :(得分:1)

您无法在函数定义中指定参数的大小:

SQL> CREATE OR REPLACE FUNCTION name_of_func(input VARCHAR)
  2    RETURN VARCHAR IS
  3    BEGIN
  4      return replace(replace(replace(replace(replace(input, '\', '\\'), CHR(10), '\n'), CHR(13) || CHR(10), '\n'), CHR(13), '\n'),'"', '\"');
  5    END name_of_func;
  6  /

Function created.

SQL> select name_of_func('dfghjk') from dual;

NAME_OF_FUNC('DFGHJK')
--------------------------------------------------------------------------------
dfghjk

SQL>

答案 1 :(得分:1)

您不能在函数声明中指定变量大小,同时,您需要交换替换的顺序,以便在单独处理\r\n\n之前替换\r。< / p>

CREATE FUNCTION name_of_func(
  input VARCHAR2
) RETURN VARCHAR2
IS
BEGIN
  return replace(
           replace(
             replace(
               replace(
                 replace( input, '\', '\\'),
                 CHR(13)||CHR(10),
                 '\n'
               ),
               CHR(10),
               '\n'
             ),
             CHR(13),
             '\n'
           ),
           '"',
           '\"'
         );
END name_of_func;