自定义 SQL 函数 - PL/SQL:忽略语句



Hi做了一个函数,稍微修改了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;

多谢

R.L.

好吧,Oracle 中已经有一个名为 INSTR2 的内置函数(看,这里是(。

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

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

  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操作来完成,它会更快

最新更新