oracle PL/SQL 在 IN CLAUSE 中使用 VARRAY

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8476610/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 00:30:16  来源:igfitidea点击:

PL/SQL use VARRAY in IN CLAUSE

oracleplsqloracle10gvarray

提问by Lohit

Is it possible to use VARRAY in IN CLAUSE of pl/sql?

是否可以在 pl/sql 的 IN CLAUSE 中使用 VARRAY?

回答by Codo

Yes, you can, provided that the VARRAY type is a global type (and not local to some PL/SQL code):

是的,您可以,前提是 VARRAY 类型是全局类型(而不是某些 PL/SQL 代码的本地类型):

CREATE OR REPLACE TYPE str_tab_type IS VARRAY(10) OF VARCHAR2(200);

DECLARE
  l_str_tab str_tab_type;
  l_count NUMBER;
BEGIN
  l_str_tab := str_tab_type();
  l_str_tab.extend(2);
  l_str_tab(1) := 'TABLE';
  l_str_tab(2) := 'INDEX';

  SELECT COUNT(*) INTO l_count
  FROM all_objects
  WHERE object_type IN (SELECT COLUMN_VALUE FROM TABLE(l_str_tab));
END;
/

回答by user3711142

I have the same Problem, but I don't want (and am not allowed) to define a global TYPE

我有同样的问题,但我不想(也不允许)定义全局 TYPE

When defining it local,

在本地定义时,

TYPE fkarraytype  IS VARRAY(10) OF VARCHAR2(10); 
  fkarray fkarraytype;

The compiler Fails with:

编译器失败:

Error: PLS-00642: Lokale Erfassungstypen in SQL-Anweisungen nicht zul?ssig Text: AND fk.strval IN (SELECT COLUMN_VALUE FROM TABLE(fkarray))

错误:PLS-00642:SQL-Anweisungen nicht zul?ssig 中的 Lokale Erfassungstypen 文本:AND fk.strval IN (SELECT COLUMN_VALUE FROM TABLE(fkarray))