Announcement

Collapse
No announcement yet.

Prüfen ob Tabelle vorhanden mit SQL-Script

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

  • Prüfen ob Tabelle vorhanden mit SQL-Script

    Hallo Oracle-Profis,

    wie kann ich aus einer Procedure/Function heraus prüfen, ob eine Tabelle exsistiert oder nicht, um bei einem nicht exsistieren dann die Tabelle anzulegen.

    MfG

    Jörg Majert

  • #2
    Hallo

    über die Oracle Tabelle USER_TABLES kann herausgefunden werden ob die Tabell exsistiert.

    select count(TABLE_NAME) from user_tables
    where TABLE_NAME = 'NAME'

    wird eine 1 zurückgeliefert , ist die Tabelle vorhanden.

    sofern die Berechtigung zum erstellen von Tabellen vorhanden ist, kann über create table eine Tabelle erstellt werden:

    CREATE TABLE TSK$TA_NAME
    (
    NAME_ID NUMBER NOT NULL,
    NAME VARCHAR2(40) NOT NULL,
    KEY NUMBER(10)
    )

    gruß
    braus

    Comment


    • #3
      Hallo,

      zu beachten ist noch, daß sich DDL nicht ohne weiteres in PL/SQL verwenden läßt! Für das Anlegen der Tabelle (CREATE TABLE...) ist der Einsatz des Package DBMS_SQL notwendig.

      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


      • #4
        Hallo,

        schönen Dank für die Info. Ich hatte mehr an eine fertige Funktion
        gedacht, aber die kann man sich ja auch selber schreiben.

        Schönen Dank für Eure Hilfe.

        Gruß

        Jör

        Comment


        • #5
          Hallo,

          noch eine Anmerkung:
          statt select count(...)
          solltest Du lieber: select null into dummy from user_tables...
          gefolgt von: if sql%notfound then create_table...
          verwenden

          Gruß
          Joachi

          Comment


          • #6
            Hallo Leute,

            schönen Dank für Eure Hilfen. Ich habe mich für eine Funktion entschieden, die True für Tabelle vorhanden und False für nicht vorhanden zurück gibt. Anbei die Source für Verbesserungsvorschläge :

            FUNCTION TABLE_EXSIST ( TableName IN VarChar2)
            RETURN boolean is

            Result boolean;

            cursor UserTable_cur is
            select * from user_tables
            where table_name = upper( TableName );

            UserTable_rec UserTable_cur%rowtype;

            begin
            if not UserTable_cur%isopen then
            open UserTable_cur;
            end if;

            fetch UserTable_cur into UserTable_rec;

            if UserTable_cur%found then
            result := True;
            else
            result := False;
            end if;
            commit;
            close UserTable_cur;

            return Result ;
            end

            Comment


            • #7
              Hallo Jörg,

              du hast es ja so gewollt
              1. Warum ein Cursor über alle Spalten ? Das ist sinnlose Verschwendung von Resourcen um am Ende ein Ja/Nein zu haben!
              2. Warum das Commit? Du führst keine Transaktion aus - es gibt also nichts zu COMMITen. Das führt nur zu Pronblemen, wenn du die Funktion dann wirklich mal in einer Transaktion einsetzt. Außerdem kannst du die Funktion dann nie in SQL verwenden.
              Besser und mglws. schnellerMeines Erachtens)<code>
              FUNCTION TABLE_EXSIST ( TableName IN VarChar2)
              RETURN PLS_Integer is
              iResult PLS_Integer;
              begin
              begin
              select 1 into iResult
              from user_tables
              where table_name = upper( TableName );
              exception
              when NO_DATA_FOUND then
              iResult := 0;
              end;
              return iResult ;
              end; </code>

              Das Ergebnis 0/1 statt des direkten false/true auzuwerten sollte dann kein Problem sein

              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


              • #8
                Hallo Falk,

                dein Vorschlag sieht besser aus. Ich werde ihn so umsetzen.
                Sorry für den schlechten Code. Ich bin leider ein Oracle-Anfänger, der das leider im Selbststudium lernt.

                Gruß

                Jör

                Comment


                • #9
                  Hallo Jörg,

                  Selbststudium ist doch das härteste Studium, Oder ? Dafür ist es aber am dauerhaftesten!

                  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


                  • #10
                    Hallo Falk,
                    Naja es ist mühsam. Aber zum Glück kann man ja hier dumme Fragen stellen.
                    Gruß
                    Jör

                    Comment

                    Working...
                    X