2017-04-19 484 views
0

我试图创建一个接受输入(字符数据)并替换一组特定字符的函数。
我到目前为止创建的功能在下列Oracle 12c:ORA-06575程序包或函数name_of_func处于无效状态

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; 

我怎样才能进行编译这个功能呢?

回答

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> 
+0

仍然得到相同的错误信息... –

+0

这编译和工作;只是显示。你确定你运行相同的代码吗? – Aleksej

+0

我再次尝试了代码。现在它工作了。谢谢。 –

1

你不能在函数声明中指定变量的大小,也需要交换的替代品的顺序,使\r\n是在\n\r之前被替换单独处理。

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; 
+0

哦,我没有意识到这一点。谢谢你指出。 –

相关问题