Oracle 12c:使用用户定义的函数和结果In子句

Oracle 12c:使用用户定义的函数和结果In子句,oracle,function,Oracle,Function,我有一个函数funct_a,它在引号中返回一个varchar 从双返回“A1234”中选择函数A 我想在in子句中使用funct_A的结果 这将返回100->从事件E中选择countE.tickets,其中E.ticket\u编号在'A1234'中 这将返回0->从事件E中选择countE.tickets,其中函数A中的E.ticket\u编号 这是如何实现的 这是如何做到的。你可能不会。如果您的函数总是返回一个值,则只需使用相等条件而不是IN。但是,假设您的实际目标是让函数返回多个值,那么您可

我有一个函数funct_a,它在引号中返回一个varchar 从双返回“A1234”中选择函数A

我想在in子句中使用funct_A的结果

这将返回100->从事件E中选择countE.tickets,其中E.ticket\u编号在'A1234'中

这将返回0->从事件E中选择countE.tickets,其中函数A中的E.ticket\u编号

这是如何实现的


这是如何做到的。

你可能不会。如果您的函数总是返回一个值,则只需使用相等条件而不是IN。但是,假设您的实际目标是让函数返回多个值,那么您可能需要一个流水线表函数

create or replace type ticket_tbl is table of varchar2(10);

create or replace function funcA
  return ticket_tbl
  pipelined
is
begin
  pipe row ('A1234');
  pipe row ('B5678' );
end;
/

select *
  from event e  
 where e.ticket_number in (select column_value
                             from table( funcA ) );

Thx反应;该函数返回多个引用的varchar-其动态;这就是为什么不能使用简单的等式。只是为了确认…下面语句返回的值:select funct_A from dual不能在in子句中执行?它确实返回报价varchars@javaCoder“不可能”有点言过其实。更像是不应该。您当然可以编写代码来解析返回的值列表,删除引号,并在in列表中使用。或者,您可以使用动态SQL生成包含in列表的语句。动态SQL方法往往同时考虑性能和安全问题,特别是当这是系统中常用的查询时。@javaCoder-将字符串解析为行可能是可行的,但让函数将值串联到字符串中,只是让调用方反向工作以返回到行,这并不是一种好的体系结构。流水线表功能将是一个非常干净的体系结构。