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 :

Appel de procédures sur une autre base


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Appel de procédures sur une autre base
    Bonjour à tous,
    Je n'ai pas trouvé réponse à mon problème sur le forum, c'est pourquoi je me permets de lancer une nouvelle discussion

    Tout d'abord, je travaille sur des bases Oracle 10.

    Voilà un certain temps que je cherche sans réussite à appeler une procédure stockée sur ma base A depuis ma base B.

    Sur ma base A, je retrouve ma procédure que j'appelerai PROC contenue dans un package TEST. Le package est bien compilé sans problème.
    Sur ma base B, je tente de lancer ma procédure PROC qui est donc stockée sur ma base A.

    La ligne posant un problème est la suivante:
    Link_BaseB étant le DB_Link sur ma base B et fonctionnant très bien dans toutes ses autres utilisations.

    Le message d'erreur que je reçois en lançant cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l'identificateur 'TEST.PROC@Link_BaseB' doit être déclaré
    Voilà, je pense qu'il est possible d'appeler une procédure depuis une autre Base.
    Peut-être que ma syntaxe n'est pas bonne, je ne trouve pas de ressources sur le net concernant ce soucis là.

    Merci pour vos éventuelles remarques ou solutions.
    N'hésitez pas à demander des précisions si besoin.

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    la syntaxe est bonne, voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> conn scott/tiger@db01
    Connected.
    SQL> create or replace procedure p is begin null; end;
      2  /
    Procedure created.
    SQL> conn scott/tiger@db02
    Connected.
    SQL> create database link db01 using 'DB01';
    Database link created.
    SQL> begin p@db01; end;
      2  /
    PL/SQL procedure successfully completed.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Donc si ma syntaxe est bonne, le soucis vient certainement du DB LINK ...
    Et après l'avoir recréé, la procédure est bien lue !
    Bon il y a encore un problème mais il est lié à la procédure, donc rien à avoir avec ce forum.
    Merci beaucoup, bonne continuation.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    TEST c'est un utilisateur ou un package?

    Tu ne peux pas executer la procedure d'un package via un dblink

    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
     
    SQL> conn scott/tiger@db01
    Connected.
    SQL> create package test is procedure p; end;
      2  /
    Package created.
    SQL> create package body test is procedure p is begin null; end p; end;
      2  /
    Package body created.
    SQL> conn scott/tiger@db02
    Connected.
    SQL> exec test.p@db01
    ERROR at line 1:
    ORA-06550: line 1, column 12:
    PLS-00302: component 'P' must be declared

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Alors j'ai eu le même problème et je suis tombé sur ce post en cherchant une solution à mon problème
    En parallèle j'avais soumis mon problème à mon DBA qui a résolu le soucis
    A priori il suffit de granter EXECUTE sur le package comme il faut et après éventuellement créer un synonyme pour faire propre mais ça a l'air de marcher ...

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Salut, je réouvre le post parce-que apparemment on n'est pas tous d'accord sur le fait que cela marche.
    Je vous dis où j'en suis, et quelles sont les erreurs que je rencontre:

    J'ai un package compilé sur ma Base B sans soucis:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    --
    CREATE OR REPLACE PACKAGE TEST AS
    --
    PROCEDURE PROC;
    END TEST;
    --
    /
    CREATE OR REPLACE PACKAGE BODY TEST AS
    --
    PROCEDURE PROC IS
    xml_retourWS	xmldom.DomDocument;
    t_NoeudRacine xmldom.DomNode;
    t_clob CLOB;
    parser   xmlparser.parser;
    --
    CURSOR CursDemande (c_DatDoss DATE) IS
    SELECT	DEMANDE_CODE, DEMANDE_INFOXML
    FROM	DEMANDE
    WHERE	DEMANDE_RD > TO_DATE('07/02/2008','dd/mm/yyyy');
    --
    Demande_rec	CursDemande%rowtype;
    --
    t_DatDoss 	DATE;
    --
    begin
    	--
    	t_DatDoss := TO_DATE('07/02/2008','dd/mm/yyyy');
    	--
    	OPEN CursDemande(t_DatDoss);
    		FETCH CursDemande INTO Demande_rec;
    	--
    	WHILE CursDemande%FOUND LOOP
    	--
    		DELETE FROM IDDEMANDEINFOXML WHERE DEMANDE_CODE = Demande_rec.DEMANDE_CODE;
    		--
    	    parser := xmlparser.newParser;
    	    --
    	    -- Conversion CLOB en parse
    	    xmlparser.parseCLOB(parser, Demande_rec.DEMANDE_INFOXML);
    	    -- Conversion parser en DomDocument
    	    xml_retourWS := xmlparser.getdocument(parser);
    		t_NoeudRacine := pkgmajglob02.getNoeudRacine(xml_retourWS);
    		--
    		test2.BoucleNoeudsFils(Demande_rec.DEMANDE_CODE, t_NoeudRacine, 0, 0);
    		--
    		FETCH CursDemande INTO Demande_rec;
    		--
    	END LOOP;
    	--
    	CLOSE CursDemande;
    	--
    END PROC;
    END TEST;
    /
    Et je l'appelle depuis un autre package situé sur la Base A, dont je vous donne la partie qui nous intéresse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare
    v_CodeRet NUMBER;
    begin
    DBMS_OUTPUT.PUT_LINE('Info XML Demande..'||'  Début : '||to_char(SYSDATE,'dd/mm/yyyy HH24:MI:SS'));
    TEST.PROC@LienBaseB;
    --
    EXCEPTION
    WHEN OTHERS THEN
    	DBMS_OUTPUT.PUT_LINE('Chargement espace en erreur Demande Info XML');
    	DBMS_OUTPUT.PUT_LINE(SQLERRM(v_CodeRet));
    	RAISE;
    END;
    /
    Quand je tente de compiler cette partie là, voilà l'erreur que je rencontre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    declare
    *
    ERREUR à la ligne 1 :
    ORA-29532: appel Java arrêté par une exception Java non interceptée : java.lang.NullPointerException
    Donc voilà, je ne pense pas que cela vienne du lien mais plutôt du 1er fichier compilé ... En fait, j'ai du mal à comprendre cette erreur là ... si vous avez des idées ... =)

Discussions similaires

  1. [XL-2010] Appel procédure sur une autre feuille
    Par titom59280 dans le forum Excel
    Réponses: 0
    Dernier message: 06/12/2013, 22h39
  2. Appel de procédures sur une autre base
    Par Chris_Ewoks dans le forum SQL
    Réponses: 5
    Dernier message: 18/04/2008, 12h01
  3. Appeler une procédure d'une autre base ?
    Par Loko dans le forum SQL
    Réponses: 2
    Dernier message: 07/09/2007, 15h23
  4. OPENROWSET sur une autre base de données
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/05/2007, 16h19
  5. [trigger] opérant sur une autre base ?
    Par Den's dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/05/2006, 20h16

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