IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Package - Déclaration Type d'un Record avec DEFAULT VALUE [11gR2]


Sujet :

PL/SQL Oracle

  1. #1
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 530
    Points : 7 629
    Points
    7 629
    Billets dans le blog
    4
    Par défaut Package - Déclaration Type d'un Record avec DEFAULT VALUE
    Bonjour,

    J'ai un souci que je n'arrive pas à compiler :
    J'ai un package avec une procédure avec des valeurs par défaut
    J'ai besoin de rajouter un paramètre qui contiendra une liste de (clé,valeur)
    J'aimerais déclarer ce nouveau paramètre en DEFAULT NULL, ce qui ne compile pas.

    Sans DEFAULT value, c'est bon, mais comment rajouter un DEFAULT pour mettre un Type NULL ? En utilisant un Type basé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PACKAGE WMC
    AS
    	TYPE Rec_Headers IS RECORD (CLE VARCHAR2(256), VALEUR VARCHAR2(1024));
    	TYPE Headers IS TABLE OF Rec_Headers INDEX BY BINARY_INTEGER;
     
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN Headers DEFAULT ???);
     
    END;
    Ma solution de contournement a été de dupliquer la procédure, mais ça me ferait dupliquer toutes les autres procédures pour lesquelles je dois rajouter ce paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE PACKAGE WMC
    AS
    	TYPE Rec_Headers IS RECORD (CLE VARCHAR2(256), VALEUR VARCHAR2(1024));
    	TYPE Headers IS TABLE OF Rec_Headers INDEX BY BINARY_INTEGER;
     
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL);
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN Headers);
    END;
    PACKAGE BODY WMC
    IS
    PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN Headers)
    IS
    BEGIN
    ..
    END;
    PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL)
    IS
     v_headers  Headers;
    BEGIN
     P_GET(p_url => p_url, p_login => p_login, p_headers => v_headers);
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 530
    Points : 7 629
    Points
    7 629
    Billets dans le blog
    4
    Par défaut
    J'y suis arrivé en créant le TYPE en base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE TYPE Rec_Headers AS OBJECT (cle VARCHAR2(256), valeur VARCHAR2(1024));
     
    CREATE OR REPLACE TYPE Headers AS TABLE OF Rec_Headers;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE OR REPLACE PACKAGE WMC
    AS
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN Headers DEFAULT NULL);
    END;
     
    CREATE OR REPLACE PACKAGE BODY WMC
    AS
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN Headers DEFAULT NULL)
    	IS
    	BEGIN
    		dbms_output.put_line('P_URL:'|| p_url);
    		dbms_output.put_line('p_login:'|| p_login);
    		IF p_headers IS NOT NULL
    		THEN
    			IF p_headers.last IS NOT NULL
    			THEN
    				FOR i IN p_headers.first .. p_headers.last
    				LOOP
    				dbms_output.put_line('p_headers('|| i ||' : '|| p_headers(i).cle ||' = '|| p_headers(i).valeur);
    				END LOOP;
    			END IF;
    		END IF;
    	END;
    END;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE
    v_headers Headers := Headers();
    BEGIN
    	v_headers.extend;
    	v_headers(1) := Rec_Headers('cle1', 'Val');
    	WMC.P_GET(p_url => 'http://', p_headers => v_headers);
    	WMC.P_GET(p_url => 'http://sans header');
    END;
    Par contre, je lutte toujours autant pour éviter les ORA-6531 -Reference to uninitialized collection et 6533 -Subscript beyond count

    Parfois je code sans rajouter les EXTEND et ça passe, parfois non.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    décembre 2019
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : décembre 2019
    Messages : 731
    Points : 1 172
    Points
    1 172
    Par défaut
    Bonjour,

    Sur le principe tu ne peux pas faire ça avec des associative arrays car ils ne sont pas null, c'est pour cela qu'il n'est pas nécessaire de les instancier. Tu dois soit utiliser un nested table comme l'a fait McM, soit un varray, ou alors une solution de contournement qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p_headers IN Headers DEFAULT cast(null as Headers)

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 530
    Points : 7 629
    Points
    7 629
    Billets dans le blog
    4
    Par défaut
    J'avais pas pensé au CAST, merci, je vais essayer pour voir comment ça tourne.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 530
    Points : 7 629
    Points
    7 629
    Billets dans le blog
    4
    Par défaut
    Merci Vanagreg, ça marche nickel.
    Pour moi la déclaration de TYPE dans un package ou dans la base c'était géré pareil mais visiblement non.
    En tout cas, c'est plus simple avec la définition dans le package, grâce à ta solution ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE PACKAGE WMC
    AS
    	TYPE TRec_Headers IS RECORD (CLE VARCHAR2(256), VALEUR VARCHAR2(1024));
    	TYPE THeaders IS TABLE OF TRec_Headers INDEX BY BINARY_INTEGER;
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN THeaders DEFAULT CAST(NULL AS Theaders));
    END;
     
    CREATE OR REPLACE PACKAGE BODY WMC
    AS
    	PROCEDURE P_GET (p_url IN VARCHAR2, p_login IN VARCHAR2 DEFAULT NULL, p_headers IN THeaders DEFAULT CAST(NULL AS Theaders))
    	IS
    	BEGIN
    		dbms_output.put_line('P_URL:'|| p_url);
    		dbms_output.put_line('p_login:'|| p_login);
    		IF p_headers IS NOT NULL
    		THEN
    			IF p_headers.last IS NOT NULL
    			THEN
    				FOR i IN p_headers.first .. p_headers.last
    				LOOP
    				dbms_output.put_line('p_headers('|| i ||' : '|| p_headers(i).cle ||' = '|| p_headers(i).valeur);
    				END LOOP;
    			END IF;
    		END IF;
    	END;
    END;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    DECLARE
    v_headers WMC.THeaders;
    BEGIN
    	v_headers(1).CLE := 'cle1'; 	v_headers(1).valeur := 'val1';
    	v_headers(2).CLE := 'cle2'; 	v_headers(2).valeur := 'val2';
    	WMC.P_GET(p_url => 'http://', p_headers => v_headers);
    	WMC.P_GET(p_url => 'http://sans header', p_login => 'log');
    END;
     
    P_URL:http://
    p_login:
    p_headers(1 : cle1 = val1
    p_headers(2 : cle2 = val2
    P_URL:http://sans header
    p_login:log
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Type Record avec Case
    Par BuzzLeclaire dans le forum Langage
    Réponses: 7
    Dernier message: 13/12/2012, 05h11
  2. Problème de compilation avec package du type graphique
    Par M_Ostrogradsky dans le forum Erreurs - Avertissements
    Réponses: 5
    Dernier message: 28/02/2011, 09h24
  3. Réponses: 11
    Dernier message: 17/06/2010, 18h25
  4. [8i] param record type avec default value
    Par Ujitsu dans le forum SQL
    Réponses: 2
    Dernier message: 04/01/2008, 10h32
  5. wcout, wofstream, etc. : types de la STL, avec Dev-C++
    Par forum-dev dans le forum Dev-C++
    Réponses: 3
    Dernier message: 01/03/2005, 23h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo