如何在PLSQL中使用MEMBER OF

问题描述 投票:0回答:3

我见过有关此错误的问题,但要么正在调用外部存储,要么尝试使用不兼容的类型或使用变量。所以我设置了一个非常简单的示例,但仍然无法使其工作。

DECLARE 
TYPE mytype IS TABLE OF VARCHAR2(4) INDEX BY PLS_INTEGER;
mytable mytype;
BEGIN
  mytable((mytable.COUNT+1)) := 'COD1';
  mytable((mytable.COUNT+1)) := 'COD2';
  mytable((mytable.COUNT+1)) := 'COD3';
  mytable((mytable.COUNT+1)) := 'COD4';  
  --IF 'COD1' MEMBER OF mytable THEN DBMS_OUTPUT.PUT_LINE('We have the code'); END IF;
  FOR i IN 1..mytable.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(mytable(i));
  END LOOP;
END;

如果我运行它,我会得到这个:

COD1
COD2
COD3
COD4

如果我取消注释 IF (我打算使用的内容),我会收到此错误。

PLS-00306: wrong number or types of arguments in call to MEMBER OF

也许我没有正确使用它或者有什么问题。

我试图在循环中使用它,我保存在“数组”中使用过的代码,然后给出一个我需要知道它是否已经使用过的代码。 我最初的解决方案是附加到像“.COD1..COD2”这样的字符串。并做了一个简单的 INSTR 但似乎不正确,我喜欢数组。 我听说过那个函数(的成员),它可以做我想要的事情,只要它按照我认为应该的方式工作即可。

你能告诉我如何正确使用,我做错了什么或者如何更好地解决我的问题?

快到了... 我把它改为

-- Declare
TYPE mytype IS TABLE OF VARCHAR2(4) INDEX BY VARCHAR(4);
mytable mytype;
-- Fill
mytable('COD1') := 'COD1'; -- kind of redundant I only need the index
-- The magic
IF mytable.EXISTS('COD1')...

但我还是觉得应该有更好的办法。

oracle plsql
3个回答
6
投票

我试图说明如何将 MEMBER 函数与 NESTED TABLE TYPE 结合使用。它不能与关联数组一起使用。希望有帮助。

SET serveroutput ON;
DECLARE
type my_tab
IS
  TABLE OF VARCHAR2(100);
  tab my_tab;
BEGIN
  tab:=my_tab('AVRAJIT','SHUBHOJIT');
  IF 'AVRAJIT' member OF (tab) THEN
    dbms_output.put_line('Yes');
  ELSE
    dbms_output.put_line('No');
  END IF;
END;

5
投票

MEMBER OF 只能与嵌套表一起使用。您正在尝试在关联数组上使用它。这是一个很好的差异解释


0
投票

MEMBER OF 告诉您表中某个值可用。是否有一个函数可以告诉您在哪个记录中找到了该值,以便您可以使用同一行或记录的关联值?

© www.soinside.com 2019 - 2024. All rights reserved.