0

嗨,做了一个修改一点 INSTR 函数(Oracle SQL)的函数:当找不到空格字符时,我得到的是字符串的长度,而不是得到 '0'。

它可以编译,但是当我尝试执行它时,我收到 ORA-06550 错误(如果我没记错的话,就是编译错误)。

我将这个函数作为一个过程尝试过,它运行得很好......所以我不明白为什么它不想执行。

你能帮助我吗?

CREATE OR REPLACE FUNCTION "INSTR2" (str varchar2) RETURN NUMBER AS
pos number(4,0) := 0;
BEGIN
  select INSTR(str, ' ') into pos from dual;
  if (pos = 0) then
    select to_number(length(str)) into pos from dual;
    return pos; 
  else
    return pos;  
  end if;
END INSTR2;

非常感谢,

强化学习

4

2 回答 2

1
  1. 将 excample 的函数名称更改为 INSTR_SPACE,一切都会好起来的,因为在 oracle 中有一个 instr2 函数,在调用过程中会出现问题
  2. 将您的功能体更改为

创建或替换

function INSTR_SPACE(str varchar2) return number as
       pos number(4, 0) := 0;
    begin
       pos := INSTR(str, ' ');
       if (pos = 0) then
          return to_number(length(str));
       else
          return pos;
       end if;
    end INSTR_SPACE;

你不需要sql操作,你可以通过简单的pl/sql操作来完成,它会更快

于 2017-03-21T12:06:33.960 回答
1

INSTR2好吧, Oracle中已经调用了一个内置函数(看,这里是)。

我刚刚用另一个名字编译了你的函数,它工作了。所以代码是有效的,你只需要选择它的名字。

显然,Oracle 解析INSTR2为内置函数,尽管事实上您现在在自己的模式中拥有具有这样名称的函数(我在文档中找不到它的原因,但这种行为并不完全令人惊讶)。并且INSTR2期望比您的实现更多的参数。这会导致运行时错误。

于 2017-03-21T11:24:48.837 回答