SQL Pl/sql create table

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo @ all,

ich möchte via PL/SQL Prozedur eine Tabelle anlegen. Dazu habe ich folgende Prozedur geschrieben:

Code:
CREATE OR REPLACE PROCEDURE mytest AS

BEGIN

    execute immediate 'create table test123 (n number ,b varchar2(20))';
    commit;

END;

Aufrufen möchte ich die Prodezedut über SQL:

Code:
execute mytest;

Die Tabelle wird jedoch nicht angelegt, und ich kriege auch keine Fehlermeldung. Die Prozedur wird scheinbar korekt kompiliert.

Kann mir da jemand weiterhelfen?
Vielen Dank im Voraus!
 
Das ist eigentlich Standard in Oracle, wäre mir neu dass das falsch ist.

Mit CREATE OR REPLACE erzeugst du alles mögliche in Oracle, von Triggern bis hin zu Paketen. Es besagt lediglich, dass im Falle des vorhandenseins der Prozedur diese neu angelegt werden soll.

Das "musst" du schon alleine machen, wenn du etwas an der Prozedur geändert hast und sie neu kompilieren willst. Ohne Replace schmeist er einen Fehler.

Alternativ könnte man diese von Hand vor dem Kompilieren löschen, was mir recht umständlich erscheint.
 
Helios co. schrieb:
"CREATE OR REPLACE ..." besagt in Oracle lediglich, dass im Falle des Vorhandenseins der Prozedur diese neu angelegt werden soll.

Hab das eben nachgeschaut, du hast recht.
Oracle mag viele gewöhnungsbedürftige und inkompatible Eigenheiten haben,
aber das ist echt Mal eine nützlich kurze Schreibweise (z.B. gegenüber TSQL).
Zumindest bis man sich zum Ersten Mal etwas ungewollt überschreibt...

Ohne Replace schmeist er einen Fehler.
Welchen denn?

Ist vielleicht das fehlende "/" nach dem "END;" entscheidend?
Zumindest wurde dies in diesem Beispiel so gemacht.

Bin wie gesagt leider nicht weiter mit Oracle vertraut,
würde im Nebel rumstochern und schreibe deshalb nichts mehr.
 
Zuletzt bearbeitet:
bin mir garnicht ischer ob du bei execute ien procedur aufrufen kannst
würdes es mittels ein anonymen block versuchen?
 

Nur das die Funktion/Prozedir etc. bereits existiert. Also quaso dasselbe als würdest du eine Tabelle erstellen die bereits existiert.

Ich habe die Prizedur in einem Paket definiert, da ist der / nur dür das Paketende relevant (glaube ich zumindest).

...würde im Nebel rumstochern und schreibe deshalb nichts mehr.

Trotzdem vielen Dank!

bin mir garnicht ischer ob du bei execute ien procedur aufrufen kannst
würdes es mittels ein anonymen block versuchen?

Hmm das klingt gut. Danke für Tip! Habe die Prozedur nun innerhalb eines annonymen Blocks aufgerufen und folgenden Fehler bekommen:

Code:
ORA-01031 insufficient privileges

Daraufhin habe ich die Prozedur erweitert um

Code:
CREATE OR REPLACE PROCEDURE mytest [B]AUTHID CURRENT_USER [/B]AS

Das hat aber auch nicht viel gebracht.

Aber: Wenn ich die Prozedur in der SQL Plus Konsole ausführe (wie gewohnt via exec Kommando) wird die Tabelle wie gewünscht erstellt. D.h. es handelt sich letzten Endes um ein Rechte-Problem, das ih aber nicht verstehe (der User hat alle Rechte die man nur vergeben kann).

Das bringt mich aber leider nicht wirklich weiter (glaube ich). Wenn es in der IDE (HORA) nicht funzt dann wird es wohl auch nicht durch meine Anwendung klappen (in beiden Fällen kommt ja eigentlich JDBC zum Einstatz)?

Weiß jemand Rat?
 
Zuletzt bearbeitet:
diese fehler meldung kommt mir bekannt vor.
dein account brauch EXPLIZITE create Tabelle rechte
und nicht nur die create rechte über einer rule.
 
Hmm selbst wenn ich mich als SYSDBA anmelde, kommt folgender Fehler
Code:
ORA-00990: missing or invalide privilege

Nachtrag:

Hat geklappt, allerdings nur über den EM. Keine Ahnung warum!

Vielen herzlichen Dank AlbertLast!
 
Zuletzt bearbeitet:
Zurück
Oben