Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在“IN”where子句上传递多个值_Oracle_Plsql_Dynamic Sql - Fatal编程技术网

Oracle 在“IN”where子句上传递多个值

Oracle 在“IN”where子句上传递多个值,oracle,plsql,dynamic-sql,Oracle,Plsql,Dynamic Sql,我想找出一个解决方案,解决并发程序从自由文本字段参数传入多个值的问题。我们使用的是RDBMS:11.2.0.3.0和Oracle应用程序:12.1.3。并发程序调用自定义plsql过程,该过程根据传入的参数生成XML输出。我尝试动态创建where子句,以使sys\u refcursor工作,如下所示。我还尝试了regexp_substr,以便在传入参数字符串后基本上创建一个值列表,但它也不起作用。我尝试过的一切都失败了,错误如下。有人可以看一看,让我知道我如何才能使这项工作 这是我收到的错误:P

我想找出一个解决方案,解决并发程序从自由文本字段参数传入多个值的问题。我们使用的是RDBMS:11.2.0.3.0和Oracle应用程序:12.1.3。并发程序调用自定义plsql过程,该过程根据传入的参数生成XML输出。我尝试动态创建where子句,以使sys\u refcursor工作,如下所示。我还尝试了regexp_substr,以便在传入参数字符串后基本上创建一个值列表,但它也不起作用。我尝试过的一切都失败了,错误如下。有人可以看一看,让我知道我如何才能使这项工作

这是我收到的错误:PL/SQL:数值或值错误:指定的LOB定位器无效:ORA-22275

下面是一个问题的例子

DECLARE
ctx dbms_xmlgen.ctxhandle;
ref_cur   sys_refcursor;
xmldoc  clob;
v_company varchar2(25);
v_major_acct varchar2(150);
v_major_acct_free varchar2(150);
l_length number;
l_offset number := 1;
l_amount number:=16383;
l_rpt_data varchar2(32767);
v_where varchar(32000);

BEGIN

dbms_lob.createtemporary(xmldoc,TRUE);
v_company := '00110';--p_company;
v_major_acct:=('310;765');--p_major_acct; -----> When I pass only one value it works but fails with two values.

IF v_major_acct IS NOT NULL
   THEN
      v_major_acct_free := '';

      SELECT   REPLACE (v_major_acct, ';', ''',''')
        INTO   v_major_acct_free
        FROM   DUAL;

      v_major_acct_free := '(''' || v_major_acct_free || ''')';

      v_where:=v_where||'and major_acct in' || v_major_acct_free;
END IF;

open ref_cur for '
select * from VIEW
WHERE company =nvl(:v_company, company)'||v_where ---v_where contains AND major_acct in ('310','765') but it fails.
using v_company;
ctx := dbms_xmlgen.newcontext(ref_cur);
xmldoc := dbms_xmlgen.getxml(ctx);
l_length := nvl(dbms_lob.getlength(xmldoc),0);
fnd_file.put_line (fnd_file.log, l_length);
    if (nvl(l_length,0) > 0) then
      loop
         exit when l_length <= 0;
         dbms_lob.read (xmldoc, l_amount, l_offset, l_rpt_data);
         fnd_file.put (fnd_file.output, l_rpt_data);
         -- dbms_output.put_line(l_rpt_data);
         l_length := l_length - l_amount;
         l_offset := l_offset + l_amount;
      end loop;
   end if;
   dbms_lob.freetemporary(xmldoc);
   close ref_cur;
   dbms_xmlgen.closecontext(ctx);

exception

   when others then
      dbms_xmlgen.closecontext(ctx);
      fnd_file.put (fnd_file.output, v_major_acct);
      --errbuf := 'Process failed with the following error: '||sqlerrm;
      --retcode := 2;
      --raise_application_error (-20000,'Process Failed'||SQLCODE||' -ERROR- '||SQLERRM);
end;
/

提前感谢您的反馈。

请提供异常的错误回溯。。。以便识别发生异常的行。可以通过将dbms_utility.format_error_backtrace的结果记录在过程的异常处理程序中的某个位置来完成此操作。对于初学者,请删除dbms_lob.createtemporaryxmldoc,TRUE;。您对dbms_xmlgen.getxmlctx的调用;自动为您创建临时CLOB;再试一次,我也犯了同样的错误。这是dbms_实用程序.format_error_backtrace retruns:ORA-06512:atsys.dbms_LOB,第818行。另外,正如我在SQLERRM返回之前所述:进程失败,出现以下错误:ORA-06502:PL/SQL:数值或值错误:指定的LOB定位器无效:ORA-22275第四个问题是,代码中有多个位置可能会在指定无效LOB定位器时失败。除非您准确地确定哪一行引发了异常,否则我无法帮助您。完全删除/注释掉异常处理程序,并发布到您的问题,而不是下面的注释!使用编辑链接查看PLSQL代码执行的完整异常堆栈。是否无响应?如果没有适当的远程协作,就无法进行远程性能调整。