【问题标题】:A functions code is written in oracle. I am unable to understand what it is doing函数代码是用 oracle 编写的。我无法理解它在做什么
【发布时间】:2022-01-14 00:04:07
【问题描述】:

函数如下:

create or replace FUNCTION FUNC_PART(
  p_TEXT varchar2,
  p_COLUMN number,
  p_SEPARATOR varchar2
) RETURN varchar2 AS
  v_POS_  number;
  v_POS2    number;
  V_COLUMN NUMBER;
BEGIN
  V_COLUMN:=p_COLUMN;
  v_POS_ := 1;
  v_POS2  := INSTR(p_TEXT, p_SEPARATOR, v_POS_);
  WHILE (V_COLUMN >1 AND v_POS2> 0) LOOP
       v_POS_ := v_POS2 + 1;
       v_POS2 := INSTR(p_TEXT, p_SEPARATOR, v_POS_);
       V_COLUMN :=V_COLUMN - 1;
  END LOOP;
  IF V_COLUMN > 1 THEN
    v_POS_ := LENGTH(RTRIM(p_TEXT)) + 1;
  END IF;
  IF v_POS2 = 0 THEN
    v_POS2 := LENGTH(RTRIM(p_TEXT)) + 1;
  END IF;
  RETURN SUBSTR (p_TEXT, v_POS_, v_POS2 - v_POS_);
END;

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这段代码我没有仔细看懂,但是从结果来看,下面两段代码的意思是一样的。

    select FUNC_PART('asdfghsdfg', 3, 's')
      from dual;
      
    select regexp_substr('asdfghsdfg', '[^s]+', 1, 3)
      from dual;
    

    这很有可能是从其他数据库迁移到oracle中的代码,因为oracle不需要这样的自定义函数

    【讨论】:

    • 这条线在做什么? v_POS2 := INSTR(p_TEXT, p_SEPARATOR, v_POS_);你能举个例子解释一下吗?
    • 你是说语法吗?官方文档docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/…中解释的很清楚
    • 我刚刚又看了一遍,这段代码完全符合它的意思。我想它的作者一定不知道 INSTR 有第四个参数,否则他们不会写出这么冗长的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2011-10-14
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多