Vérifier si une collection d'élément existe dans Oracle
- Je créer un type simple:
create or replace TYPE SIMPLE_TYPE AS OBJECT (ID NUMBER(38), NAME VARCHAR2(20));
Test Simple:
DECLARE
TYPE ObjectList IS TABLE OF SIMPLE_TYPE;
tmp SIMPLE_TYPE := SIMPLE_TYPE(1, 'a');
o ObjectList := new ObjectList(SIMPLE_TYPE(2, 'a'), SIMPLE_TYPE(3, 'a'));
BEGIN
IF tmp.EXISTS(tmp) THEN
dbms_output.put_line('OK, exists.');
END IF;
END;
J'obtiens une exception: PLS-00302: composant 'EXISTE" doit être déclarée
Mais cet exemple:
DECLARE
TYPE NumList IS TABLE OF INTEGER;
n NumList := NumList(1,3,5,7);
BEGIN
n.DELETE(2);
IF n.EXISTS(1) THEN
dbms_output.put_line('OK, element #1 exists.');
END IF;
IF n.EXISTS(3) = FALSE THEN
dbms_output.put_line('OK, element #2 has been deleted.');
END IF;
IF n.EXISTS(99) = FALSE THEN
dbms_output.put_line('OK, element #99 does not exist at all.');
END IF;
END;
Est-il possible de mettre en œuvre EXISTE méthode dans SIMPLE_TYPE type?
Êtes-vous sûr que vous voulez
tmp.EXISTS
, pas o.EXISTS
? tmp
est scalaire, même après avoir corrigé son type. Ce n'est pas une collection.OriginalL'auteur Michał Ziober | 2009-08-28
Vous devez vous connecter pour publier un commentaire.
Vous déclarez
tmp
commeSIMPLE_TYPE
, pasObjectList
.SIMPLE_TYPE
est de type scalaire, n'est pas une collection.Probablement vous vouliez vérifier
o.EXISTS
à la place (qui est unObjectList
)?Mise à jour:
EXISTS
lorsqu'il est appliqué à une collection prend un index entier comme argument et vérifie si l'élément avec cet indice existe (et non sa valeur).Pour vérifier que
SIMPLE_TYPE(1, 'a')
existe dans votre tableau, vous devez donc les suivantes:Créer
ObjectList
dans un dictionnaire:Problème de la
SELECT
requête:OriginalL'auteur Quassnoi
Comme le états de documentation,
EXISTS(
) teste l'existence d'un numéro d'entrée dans une collection. C'est,array.exists(3)
affirme que le troisième élément dearray
est rempli.Ce que vous essayez de faire dans votre premier exemple, c'est de tester si l'instance
tmp
correspond à un élément dansObjectList
. À partir de 10g, on peut faire cela en utilisant laMEMBER OF
de la syntaxe. Malheureusement, afin de faire que le travail que nous avons à déclarer uneMAP
méthode, ce qui est plutôt maladroit et plutôt ennuyeux si l'objet a beaucoup d'attributs.De l'exécution de l'exemple...
MEMBER OF
.. c'est un conseil qui a changé ma vie! GÉNIAL ! Merci !OriginalL'auteur APC