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 :

Curseur pour récupérer policy Oracle


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut Curseur pour récupérer policy Oracle
    Bonjour,

    Je n'arrive pas à récupérer les policy Oracle dans la procédure de mon package alors que ma requête renvoie bien des données.

    Pour information, voici les éléments créés :

    Création du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create or replace PACKAGE DEPLOY_POLICY
    IS
    	PROCEDURE RunPol;	
    End DEPLOY_POLICY ;
    /
    Création du body du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE PACKAGE BODY "DEPLOY_POLICY" AS
    	PROCEDURE RunPol is
    		CURSOR C_POLICY IS SELECT * FROM ALL_POLICIES;
    		BEGIN
    			dbms_output.put_line('debut');
    			for p in C_POLICY
    			loop
    				dbms_output.put_line('policy = ' || p.POLICY_NAME);
    			end loop;		
    			dbms_output.put_line('fin');
    	END RunPol;
     
    END DEPLOY_POLICY;
    /
    Appel du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
      DEPLOY_POLICY.RunPol();
    END;
    /
    Cet appel me renvoie les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bloc anonyme terminé
    debut
    fin
    Si je joue la requête "SELECT * FROM ALL_POLICIES" dans sql développeur avec le même utilisateur que celui exécutant le package, j'ai des enregistrements retournés.

    Pourriez-vous m'aider à identifier l'origine de cette différence de comportement svp ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Pour ton curseur, regarde tu côté de OPEN et FETCH.

    @+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut
    Bonjour Sunchaser,

    Si je remplace ma requête "SELECT * FROM ALL_POLICIES" par une requête sur une table "SELECT * FROM MA_TABLE", j'obtiens bien les enregistrements de MA_TABLE.
    Le problème semble réellement provenir de l'utilisation de 'ALL_POLICIES' dans ce contexte.

    Merci d'avance.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Citation Envoyé par dev-stage Voir le message
    Bonjour,

    Je n'arrive pas à récupérer les policy Oracle dans la procédure de mon package alors que ma requête renvoie bien des données.

    Pour information, voici les éléments créés :

    Création du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create or replace PACKAGE DEPLOY_POLICY
    IS
    	PROCEDURE RunPol;	
    End DEPLOY_POLICY ;
    /
    Création du body du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE PACKAGE BODY "DEPLOY_POLICY" AS
    	PROCEDURE RunPol is
    		CURSOR C_POLICY IS SELECT * FROM ALL_POLICIES;
    		BEGIN
    			dbms_output.put_line('debut');
    			for p in C_POLICY
    			loop
    				dbms_output.put_line('policy = ' || p.POLICY_NAME);
    			end loop;		
    			dbms_output.put_line('fin');
    	END RunPol;
     
    END DEPLOY_POLICY;
    /
    Appel du package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
      DEPLOY_POLICY.RunPol();
    END;
    /
    Cet appel me renvoie les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bloc anonyme terminé
    debut
    fin
    Si je joue la requête "SELECT * FROM ALL_POLICIES" dans sql développeur avec le même utilisateur que celui exécutant le package, j'ai des enregistrements retournés.

    Pourriez-vous m'aider à identifier l'origine de cette différence de comportement svp ?

    Merci d'avance pour votre aide.

    Je ne suis pas convaincu par ta démo et tes affirmations, ton code est valide, s'il ne retourne rien c'est donc qu'il n'y a pas de policies accessible par l'utilisateur.
    Que donnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sqlplus le_users/le_password@l_alias
    select * from all_policies;
    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
      DEPLOY_POLICY.RunPol();
    END;
    /
    Ou sous sqldevelopper tu tapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select * from all_policies;
    SET SERVEROUTPUT ON
    DECLARE 
    BEGIN
      DEPLOY_POLICY.RunPol();
    END;
    /
    et appuis sur F5

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut
    Bonjour kangs,

    Comme demandé, voici le résultat de l'exécution sous SQL déveloper (résultat identique sous sqlplus).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    OBJECT_OWNER                   OBJECT_NAME                    POLICY_GROUP                   POLICY_NAME                    PF_OWNER                       PACKAGE                        FUNCTION                       SEL INS UPD DEL IDX CHK_OPTION ENABLE STATIC_POLICY POLICY_TYPE              LONG_PREDICATE
    ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ --- --- --- --- --- ---------- ------ ------------- ------------------------ --------------
    ORADB1                         TCUSTOMER	                  SYS_DEFAULT                    TCUSTOMER_POLICY      			ORADB1                                                        FILTERCUST		             YES YES YES YES NO  NO         YES    NO            DYNAMIC                  NO             
    ORADB1                         TAGREG		                  SYS_DEFAULT                    TAGREG_POLICY     				ORADB1                                                        FILTERCUST		             YES YES YES YES NO  NO         YES    NO            DYNAMIC                  NO             
     
     2 lignes sélectionnées 
     
    bloc anonyme terminé
    debut
    fin
    Merci d'avance pour ton aide.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Citation Envoyé par dev-stage Voir le message
    [...]
    Merci d'avance pour ton aide.
    Oui sauf que là je ne pige pas. J'ai demandé à mes collègues et on n'a pas de vpd donc je ne peux pas tester par moi même. J'ai parcourue la doc mais je ne trouve pas d'explication.
    Mais si tu as le temps pourrais tu générer une trace 10046 de l'exécution de la procédure ? On pourra peut être comprendre (ou pas).

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut
    Bonjour,

    J'ai un peu avancé...

    Si je créé le package dans un autre schéma (RE_ORADB1 au lieu de ORADB1), le package me renvoie bien les policies (comme la requête en direct dans SQL développer).

    En résumé, nous avons :

    Schéma ORADB1
    SQL en direct => policies renvoyées
    Appel package => policies NON renvoyées

    Schéma RE_ORADB1
    SQL en direct => policies renvoyées
    Appel package => policies renvoyées

    Il doit vraisemblablement s'agir d'un problème de droit d'accès depuis le package créé sur le schéma ORADB1.

    Dans les 2 schémas la requête suivante "select * from all_objects where object_name like 'ALL_POLICIES';" me retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OWNER                          OBJECT_NAME                    SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY  NAMESPACE EDITION_NAME                 
    ------------------------------ ------------------------------ ------------------------------ ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- --------- --------- --------- ---------- ------------------------------
    SYS                            ALL_POLICIES                                                        5419                VIEW                27/11/2013 15:02:31 27/11/2013 15:02:31 2013-11-27:15:02:31 VALID   N         N         N                  1                                
    PUBLIC                         ALL_POLICIES                                                        5420                SYNONYM             27/11/2013 15:02:31 27/11/2013 15:02:31 2013-11-27:15:02:31 VALID   N         N         N                  1
    Que puis-je vérifier pour identifier la différence de comportement entre les 2 schémas svp ?

    Merci d'avance.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Citation Envoyé par dev-stage Voir le message
    [...]
    Que puis-je vérifier pour identifier la différence de comportement entre les 2 schémas svp ?

    Merci d'avance.
    Ça donne l'impression que des règles vpd sont appliquées dans un schéma et pas dans l'autre.
    Ama, avec un 10046 sur les 2 comptes on pourrait voir si un prédicat est pushé. Ça vaut sans doute la peine de générer ces traces.

Discussions similaires

  1. Récupérer les coordonnées du curseur pour tracer une ligne ou un cercle
    Par benyouyou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/08/2015, 16h38
  2. Réponses: 9
    Dernier message: 24/01/2013, 21h06
  3. Réponses: 1
    Dernier message: 10/10/2008, 08h18
  4. Réponses: 21
    Dernier message: 26/04/2007, 16h49
  5. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

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