WHERE 子句中的 TABLE OF VARCHAR2

Posted

技术标签:

【中文标题】WHERE 子句中的 TABLE OF VARCHAR2【英文标题】:TABLE OF VARCHAR2 in WHERE clause 【发布时间】:2021-11-25 20:07:28 【问题描述】:

代码已简化。我有一个类型:

   CREATE TYPE str_tab_t IS TABLE OF VARCHAR2(20);

这里有一个函数:

FUNCTION MYFUNCTION(myVar IN str_tab_t ) RETURN VARCHAR
myVar2 NUMBER; 
BEGIN
  SELECT MYCOLUMN INTO myVar2  FROM MYTABLE WHERE MYCOLUMN IN(SELECT * FROM myVar );
  RETURN myVar2 ;
END MYFUNCTION;

我想知道是否可以这样调用函数:

 MYFUNCTION(str_tab_t ('abc'));

当我收到错误 ORA-01722 时。我不认为这是因为查询错误。我想,我以错误的方式传递论点。有人可以给我任何线索吗?谢谢!

【问题讨论】:

***.com/questions/5165580/… 试试WHERE MYCOLUMN MEMBER OF myVarWHERE MYCOLUMN IN ( SELECT * FROM TABLE(myVar) ) 【参考方案1】:

你有没有把它过度简化了?

因为,如果表格内容是这样的(即MYCOLUMN 中的 strings

SQL> select * from mytable;

MYC
---
abc
def

并且您希望函数返回一个数字,那么您不能将mycolumn(它是一个字符串)选择为number 数据类型局部函数变量myvar2。但是,您可以选择一些数字(例如我的示例中的1):

SQL> create or replace function myfunction (myvar in str_tab_t)
  2    return number
  3  is
  4    myvar2 number;
  5  begin
  6    select 1 into myvar2
  7    from mytable
  8    where mycolumn in (select * from table(myvar));
  9    return myvar2;
 10  end;
 11  /

Function created.

SQL> select myfunction(str_tab_t('abc')) from dual;

MYFUNCTION(STR_TAB_T('ABC'))
----------------------------
                           1

SQL>

或者,显然,返回不同的数据类型:

SQL> create or replace function myfunction (myvar in str_tab_t)
  2    return mytable.mycolumn%type
  3  is
  4    myvar2 mytable.mycolumn%type;
  5  begin
  6    select mycolumn into myvar2
  7    from mytable
  8    where mycolumn in (select * from table(myvar));
  9    return myvar2;
 10  end;
 11  /

Function created.

SQL> select myfunction(str_tab_t('abc')) from dual;

MYFUNCTION(STR_TAB_T('ABC'))
-------------------------------------------------------------------------
abc

SQL>

【讨论】:

谢谢。是的,我把它简化了。问题肯定与传递参数有关。 对我来说,它与返回值数据类型有关,而不是参数...

以上是关于WHERE 子句中的 TABLE OF VARCHAR2的主要内容,如果未能解决你的问题,请参考以下文章

Javascript v3 Fusion Table Layer - where子句中的ROWID

游标 where 子句中的可选参数

linq 到实体,where 子句中的 where ? (内凡)

从另一个表的数组中的table where子句中选择

BigQuery 的 WHERE 子句中的 SELECT 语句不起作用

使用WHERE CURRENT OF子句更新