Announcement

Collapse
No announcement yet.

mit procedure sequence neu erstellen?

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

  • mit procedure sequence neu erstellen?

    hallo,

    möchte an jedem Tageswechsel ne sequence zurücksetzen.

    hab mir gedacht, ich schreib folgenade procedure, die vom dbms_job immer um mitternacht ausgeführt wird:

    create or replace procedure ID_reset is

    begin
    drop sequence ID_gen;

    create sequence ID_gen
    increment by 1
    start with 1
    maxvalue 10000
    minvalue 1
    nocycle
    no cache;

    end;

    leider krieg ich dabei nen kompilierungsfehler....

    danke
    christoph

  • #2
    hier

    create or replace procedure ID_reset is
    begin
    execute immediate
    'drop sequence ID_gen';
    execute immediate
    'create sequence ID_gen
    increment by 1
    start with 1
    maxvalue 10000
    minvalue 1
    nocycle
    no cache';
    end;

    Comment


    • #3
      super.... dank

      Comment


      • #4
        hallo nochmal,

        jetzt hab ich doch noch ein problem:
        und zwar erscheint beim ausführen der procedure
        die meldung
        insufficient privileges

        und das obwohl ich
        execute any procedure
        und
        create any sequence

        als Berechtigung habe...

        danke
        christop

        Comment


        • #5
          Hallo Alfons,

          Proceduren und Packages werden unter ORACLE i.A. unter dem Berechtigungsschema ausgeführt, unter dem die Procedure/das Package erstellt wurde! Der Nutzer der die procedure mit create or replace ... anlegt, benötigt (neben CREATE PROCEDURE) entweder CREATE SEQUENCE zum Anlegen und löschen von Sequenzen im eigenen Schema oder CREATE ANY SEQUENCE UND DROP ANY SEQUENCE um Sequenzen in anderen Schemas anlegen und löschen zu können.
          Der Nutzer welcher die Procedure dann nutzt benötigt nur ein EXECUTE ON NUTZER1.ID_reset oder ein EXECUTE ANY PROCEDURE, um ID_reset ausführen zu können. Ein Recht zum anlegen von Sequenzen ist für diesen Nutzer nicht notwendig.

          Noch mal zusammengefasst:
          Nutzer1: CREATE PROCEDURE, CREATE SEQUENCE
          Nutzer2: EXECUTE ON Nutzer1.ID_reset

          Nutzer1 legt dann mit CREATE OR REPLACE... die procedure an. Nutzer2 kann mit Nutzer1.ID_reset darauf zugreifen.
          Ist Nutzer2 = Nutzer1, dann muß EXECUTE ON Nutzer1.ID_reset NICHT erteilt werden, da jeder auf seine erstellten Objekte auch zugreifen darf.

          Mit dem Erteilen von ANY-Rechten würde ich jedoch immer sehr sparsam umgehen.

          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
            super,

            danke....

            eine kleine frage hätte ich noch:

            wenn ich den startvalue nun in der procedure übergeben will
            (create or replace procedure ID_reset (in_start_value in number) is
            begin
            ....
            end;

            wie muss dann die zeile mit
            startvalue
            im execute immediate statement der sequenz lauten?

            dank

            Comment


            • #7
              create or replace procedure ID_reset(in_start_value in number) is
              begin
              execute immediate
              'drop sequence ID_gen';
              execute immediate
              'create sequence ID_gen
              start with '||in_start_value||
              'increment by 1
              start with 1
              maxvalue 10000
              minvalue 1
              nocycle
              no cache';
              end;

              Comment

              Working...
              X