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
期望比您的实现更多的参数。这会导致运行时错误。
- 将 excample 的函数名称更改为 INSTR_SPACE 并且一切都可以,因为在 oracle 中有一个 instr2 函数,您在调用过程中会遇到问题
- 将函数体更改为
创建或替换
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操作来完成,它会更快