Comment attraper violation de contrainte en PL/SQL?
CREATE TABLE LOCATION (
LOCID VARCHAR2(5)
, MINQTY NUMBER
, MAXQTY NUMBER
, PRIMARY KEY (LOCID)
, CONSTRAINT CHECK_LOCID_LENGTH CHECK (LENGTH(LOCID) = 5)
, CONSTRAINT CHECK_MINQTY_RANGE CHECK (MINQTY BETWEEN 0 AND 999)
, CONSTRAINT CHECK_MAXQTY_RANGE CHECK (MAXQTY BETWEEN 0 AND 999)
, CONSTRAINT CHECK_MAXQTY_GREATER_MIXQTY CHECK (MAXQTY >= MINQTY)
);
CREATE OR REPLACE PROCEDURE ADD_LOCATION_TO_DB(ploccode VARCHAR2, pminqty NUMBER, pmaxqty NUMBER) AS
BEGIN
INSERT INTO location(locid, minqty, maxqty) VALUES (ploccode, pminqty, pmaxqty);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20081, 'Duplicate Location ID');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20086,sqlerrm);
END;
J'ai créé le tableau ci-dessus avec des contraintes.
Maintenant, je veux tester ces contraintes en PL/SQL de la procédure par les attrapant dans les exceptions. Mais je suis confus comment le faire.
sql-server ne pas utiliser de PL/SQL. Avez-vous besoin d'une solution à la fois pour elle et oracle?
Je veux le code PL/SQL pour une procédure qui insère une ligne dans la table magasin et que vous souhaitez tester les contraintes en pl/sql de la procédure. Mais je ne suis pas certain que le code de la façon de vérification de la contrainte.
Oui, mais vous avez marqués cette question avec deux produits, et l'un de ces produits n'ont même pas de PL/SQL. Avez-vous vraiment besoin d'une solution pour les deux produits?
J'ai enlevé le sql-server balise parce que la question est clairement sur Oracle et PL/SQL.
Il n'y a pas d'exception prédéfinie pour une violation de contrainte de vérification (voir ici: docs.oracle.com/cd/E11882_01/appdev.112/e25519/...), vous devez vérifier le code d'erreur dans le
Je veux le code PL/SQL pour une procédure qui insère une ligne dans la table magasin et que vous souhaitez tester les contraintes en pl/sql de la procédure. Mais je ne suis pas certain que le code de la façon de vérification de la contrainte.
Oui, mais vous avez marqués cette question avec deux produits, et l'un de ces produits n'ont même pas de PL/SQL. Avez-vous vraiment besoin d'une solution pour les deux produits?
J'ai enlevé le sql-server balise parce que la question est clairement sur Oracle et PL/SQL.
Il n'y a pas d'exception prédéfinie pour une violation de contrainte de vérification (voir ici: docs.oracle.com/cd/E11882_01/appdev.112/e25519/...), vous devez vérifier le code d'erreur dans le
when others
gestionnaireOriginalL'auteur | 2014-04-23
Vous devez vous connecter pour publier un commentaire.
L'erreur qui se produit lorsqu'une vérification de la contrainte est violée est ORA-02290. Bien qu'il n'existe pas de définition "standard" pour cela, il est assez facile de déclarer votre propre exception de sorte que vous pouvez attraper le -2290 quand il est lancé. Disons que nous avons une table créée comme suit:
et que nous avons ensuite exécuter le bloc suivant:
Si vous créez la table comme indiqué précédemment, puis exécutez le bloc ci-dessus, vous verrez que la ligne 'INSERT a échoué en raison de violation de contrainte de vérification" s'affichera sur DBMS_OUTPUT.
De partager et de profiter.
Je crois que le nom de la contrainte dans SQLERRM, le long de avec d'autres textes. Vous pouvez soit imprimer SQLERRM comme indiqué ci-dessus, ou à analyser le texte pour trouver le nom de la contrainte.
OriginalL'auteur Bob Jarvis