ich Fragen mit diesem Fehler gesehen habe zu verwenden, aber entweder sind Aufruf externe Geschäfte oder versucht, mit nicht kompatibelen Typen oder einen VARRAY verwenden. Also habe ich ein sehr einfaches Beispiel eingerichtet und trotzdem kann ich es nicht funktionieren lassen.Wie MITGLIED in PLSQL
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;
ich dies, wenn ich es laufen:
COD1
COD2
COD3
COD4
Wenn ich die IF Kommentar- (was ich verwenden will) ich diesen Fehler.
PLS-00306: wrong number or types of arguments in call to MEMBER OF
Vielleicht benutze ich es nicht richtig oder etwas stimmt nicht.
ich, dass auf einer Schleife zu verwenden, ich versuche, speichere ich die Codes, die ich in der „Matrix“ verwendet haben dann einen Code, den ich brauche gegeben zu wissen, ob es bereits verwendet wurde. Meine ursprüngliche Lösung war, an eine Zeichenfolge wie ".COD1..COD2" anzuhängen. und mach ein einfaches INSTR aber scheint nicht richtig und ich mag Arrays. Ich habe von dieser Funktion (Mitglied von) gehört, die tut, was ich wollte, wenn nur so arbeiten, wie ich es glaube.
können Sie mir sagen, wie richtig zu verwenden, was ich falsch mache oder wie mein Problem in einer besseren Art und Weise zu lösen?
Fast da ... ich es ändern zu
-- 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')...
Aber ich fühle mich immer noch, dass es einen besseren Weg geben.
Oh, ich danke, wissen Sie, wie kann ich ein Element in einem assoziativen Array finden, für das Leben von mir habe ich versucht, alles ohne Erfolg zu googeln. –
Sie haben es in Ihrer Bearbeitung oben getan. Verwenden Sie mytable.EXISTS. Vielleicht sollten Sie definieren, was Sie mit "besserer Weg" meinen. – DCookie
Ich meine in der Art, wie ich verstehe Arrays sind so Array [Index] = Wert, so ein "besserer Weg" wäre, den "Wert" nicht den "Index" zu finden, welcher Zweck sollte nicht den Wert selbst speichern. Ich könnte mich irren und wenn es funktioniert ... –