【问题标题】:TABLE OF VARCHAR2 in WHERE clauseWHERE 子句中的 TABLE OF VARCHAR2
【发布时间】: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 时。我不认为这是因为查询错误。我想,我以错误的方式传递论点。有人可以给我任何线索吗?谢谢!

【问题讨论】:

标签: oracle plsql


【解决方案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>

【讨论】:

  • 谢谢。是的,我把它简化了。问题肯定与传递参数有关。
  • 对我来说,它与返回值数据类型有关,而不是参数...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2017-05-13
相关资源
最近更新 更多