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

时间:2017-03-21 11:00:11

标签: sql oracle function plsql ora-06550

你做了一个修改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。

2 个答案:

答案 0 :(得分:1)

好吧,Oracle(look, here it is)中已经有一个名为INSTR2的内置函数。

我刚刚使用其他名称编写了您的函数,但它确实有效。所以代码是有效的,你只需要为它选择名称。

显然,Oracle会将INSTR2解析为内置函数,尽管您现在在自己的架构中具有此类名称的函数(我无法在文档中找到它的原因,但这种行为并不奇怪)。并且INSTR2需要的参数多于您的实现。这会导致运行时错误。

答案 1 :(得分:1)

  1. 将您的exeample函数名称更改为INSTR_SPACE,并且everething将会正常,因为在oracle中有一个instr2函数,在调用期间您将遇到问题
  2. 将您的功能正文更改为
  3. 创建或替换

    <div class="container">
      <div class="inner">
        <div class="item">
          <h3>Item 1</h3>
          <ul>
            <li>Lorem ipsum dolor sit amet</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipiscing</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
          </ul>
        </div>
    
        <div class="item">
          <h3>Item 2</h3>
          <ul>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum dolor sit amet</li>
            <li>Lorem ipsum</li>
          </ul>
        </div>
    
        <div class="item">
          <h3>Item 3</h3>
          <ul>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum dolor sit amet</li>
            <li>Lorem ipsum dolor sit amet</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
          </ul>
        </div>
    
        <div class="item">
          <h3>Item 4</h3>
          <ul>
            <li>Lorem ipsum</li>
            <li>Lorem ipsum</li>
          </ul>
        </div>
      </div>
    </div>

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