Oracle 与已立即执行的过程有关的问题

Oracle 与已立即执行的过程有关的问题,oracle,stored-procedures,plsql,mybatis,Oracle,Stored Procedures,Plsql,Mybatis,我需要从id位于('208018042','208001105')的用户处查询一个表,如选择计数(id),我已经编写了一个函数来执行此操作,该函数接受分号分隔的数据,但我得到了无效的数字作为例外,我想我没有发送引号中的值,这里出了什么问题。我需要传递像“208018042”208001105这样的值。上面的单个查询将被执行,但以下函数中的查询存在一些问题: FUNCTION p_get_count_id(p_invalue IN VARCHAR2) RETURN VARCHAR2 IS

我需要从id位于('208018042','208001105')的用户处查询一个表,如
选择计数(id)
,我已经编写了一个函数来执行此操作,该函数接受分号分隔的数据,但我得到了无效的数字作为例外,我想我没有发送引号中的值,这里出了什么问题。我需要传递像“208018042”208001105这样的值。上面的单个查询将被执行,但以下函数中的查询存在一些问题:

FUNCTION p_get_count_id(p_invalue IN VARCHAR2) RETURN VARCHAR2 IS
          v_splitTable      split_tbl;
          v_OptionValueList varchar2(4000);
          v_in_optid_list   varchar2(4000);
          v_count         number;
  begin
    v_in_optid_list := p_in_field_value;
    if (v_in_optid_list is not null) then
      v_in_optid_list := REPLACE(p_in_field_value, ';', ',');

 EXECUTE IMMEDIATE 'select count(id) 
      from user
     where id in
           (' || v_in_optid_list || ')' bulk collect
        into v_splitTable;
      v_OptionValueList := joinstr(v_splitTable, '; ');
    end if;
    return v_OptionValueList;
 End p_get_count_id;

执行立即数导致问题。

它将不起作用。使用collection或pipelined函数或temporary table将可能值列表传递到函数中

在调用execute immediate之前,能否在optid_列表direct中显示
v_的值?例如,使用
dbms\u output.put\u行(v\u在选项列表中)您的查询返回数字,但您正在尝试将该数字分配给集合。为什么不能将数字转换成数字,然后填充返回值呢?此外,为了得到所需的内容,不需要函数。您可以使用connect by子句非常简单地解析sql中逗号分隔的字符串为什么不呢?集合将只包含一个值,这不是一个错误。感谢它现在的工作,一个引号丢失了(“| | v|u in|u optid_list | | |”)“它应该是(“| | v| u in|u optid_list | |”)”我希望您理解将在提到的plsql代码中进行硬解析,这会使数据库工作变慢。