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 myVar
或WHERE 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
linq 到实体,where 子句中的 where ? (内凡)