Announcement

Collapse
No announcement yet.

dynamische Datenbank-Links in einem Cursor

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dynamische Datenbank-Links in einem Cursor

    Hallo,

    möchte mittels eines Cursor eine Abfrage an verschiedene identische Rechner ausführen.
    Hierzu verwende ich Datenbanklinks.
    Jetzt möchte ich natürlich nur einen und nicht x-Cursor deklarieren, in welchem dann zur Laufzeit der Name des Datenbanklinks verändert wird. Ist das möglich?
    Habs mal folgendermaßen (ohne Erfolg) versucht:
    cursor crs_VORHANDENE_TABELLEN_N1 (Zentrale_in varchar2) is select TNAME, TABTYPE from tab@dbl_Zentrale_in where TABTYPE='Table' and substr(TNAME,1,17)= 'AKT_PROGRAMM_LZA_';

    danke christoph

  • #2
    Hallo Christoph,

    da der Cursor bereits zur Compilierzeit validiert wird, kannst du dort keine Variablen für Objekte verwenden. Hier hilft nur dynamisches SQL das erst zur Laufzeit zusammengebaut wird. Das Zusammenbauen und öffnen kannst du ja in eine FUNCTION packen und als ERGEBNIS den Cursor als REF CURSOR zurückgeben.

    z.B.:<pre><code>
    TYPE MY_CUR IS REF CURSOR;
    function getCursor(pLink VARCHAR2)
    return MY_CUR;
    cRes MY_CUR;
    begin
    open cRes for
    'select TNAME, TABTYPE
    from tab@' || pLink || '
    where TABTYPE=''table''
    and substr(TNAME,1,17)= ''AKT_PROGRAMM_LZA_''';
    return cRes;
    end;</code></pre>

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      Vielen Dank für den Beispielcode.
      Zu Cursor habe ich bisher leider wenig Bespielroutinen gefunden.
      .
      Gruß
      Reinhold P

      Comment


      • #4
        Hallo Falk,

        erstmal danke...

        Frage noch:
        kann ich die Function in die Prozedure Packen oder muss ich die Extra deklarieren?

        habs mal folgendermaßen versucht:
        procedure ss_AktProgrammLZA_erstellen is

        type MY_CUR is REF CURSOR;


        function getCursor(pLink varchar2) return MY_CUR;
        cRes MY_CUR;
        begin
        open cRes for
        'select TNAME, TABTYPE from tab@dlb_'||pLink||' where TABTYPE=''TABLE'' and substr(TNAME,1,17)=''AKT_PROGRAMM_LZA_''';
        return cRES;

        end;



        Zentrale varchar2(5);
        SQL_Befehl varchar2(5000);
        Tagesstempel varchar2(6);
        Tabelle varchar2(20);

        begin

        --Vorbelegen des SQL_STATEMENTS
        SQL_Befehl := 'create snapshot ss_AktProgrammLZA tablespace T_TAG as ';

        leider meldet er mir hier bei Zentralen den Fehler:
        "PLS-00103: Encountered the symbol "ZENTRALE" "

        danke
        christop

        Comment


        • #5
          Hallo Christoph,

          da hab ich in der Eile wohl Header und Body der FUNCTION zusammengeworfen. Wenn du die Function innerhalb der Procedure deklarieren möchtest, dann so:
          function getCursor(pLink varchar2) return MY_CUR <b>as</b>
          cRes MY_CUR;
          ...

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Achso, und die Reihenfolge mußt du auch einhalten. Nach einer Funktions- oder Procedurdeklaration im DECLARE-Teile einer Funktion darf <b>keine</b> weitere Variablen-Deklaration erfolgen.

            Also
            Zentrale varchar2(5);
            SQL_Befehl varchar2(5000);
            Tagesstempel varchar2(6);
            Tabelle varchar2(20);
            vor der function getCursor notieren.

            Gruß Fal
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              muchas gracias!!!!

              Comment

              Working...
              X