Erstellen der Gespeicherten Prozedur in Oracle 11g-pl/sql zu verwenden, WENN und DANN
Ich hatte ein Problem erstellen dieser gespeicherten Prozedur und hatte einige Fehler bei der Ausführung. Fehler Bestand in der SQL-Anweisung ignoriert und der SQL-Befehl nicht korrekt beendet. Ich dachte alle, der code war ziemlich sauber.
- Gibt die gesamten Datensätze und fügt Sie in die RECORD_COUNT variable aus der Tabelle "TABELLE1".
- Zustand zu sehen, wenn RECORD_COUNT ist größer als null und speichert Daten zu löschen Tabelle "TABELLE1".
- Zustand zu sehen, wenn RECORD_COUNT gleich null ist, um das einfügen in die Tabelle "TABELLE1" aus der EXTERNAL_TABLE Tabelle.
Bitte helfen.
CREATE OR REPLACE PROCEDURE sp_INSERT
(RECORD_COUNT OUT NUMBER)
IS
BEGIN
SELECT COUNT(*)
INTO RECORD_COUNT
FROM TABLE1;
IF RECORD_COUNT > 0 THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE1'
END IF;
IF RECORD_COUNT = 0 THEN
INSERT INTO TABLE1
(
JOB_ID,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
)
(SELECT JOB_ID,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
FROM EXTERNAL_TABLE)
COMMIT;
END IF;
END;
Hi, die Fehlermeldungen sollten helfen - Sie geben Zeilennummern. Sie verpassen eine Anzahl von Semikolons und TRUNCATE ist DDL und kann daher nicht vorgeformt werden in PL/SQL außerhalb von dynamischem SQL.
InformationsquelleAutor Fabe Dole | 2013-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten: Sie müssen
;
am Ende eines jeden instrauction in Ihrem Verfahren.Zweiten:
TRUNCATE
ist ein DDL Befehl DDL-Befehle sind nicht gültig in plsql, können SieDELETE
Befehl, Ausgabe, oder verwenden Sie EXECUTE IMMEDIATE-Anweisung:Dritten: Für
insert-select statement
siehe hier und hier.Sie sind herzlich eingeladen pal.
InformationsquelleAutor Mohsen Heydari
Ihnen fehlt ein Semikolon nach Ihrem
SELECT
- Anweisung. Man bräuchte so etwas wieKönnen Sie auch nicht DDL (wie
TRUNCATE
) in PL/SQL-Code als statische SQL. Müssten Sie dynamisches SQL verwenden. Sie müssen auch ein Semikolon am Ende der Anweisung.Buchung die genaue Fehler-stack (einschließlich der Zeilennummern) ist immer hilfreich-Compiler sind in der Regel sehr viel besser bei der Erkennung von syntax-Fehlern als Menschen, Lesen Beiträge im forum.
InformationsquelleAutor Justin Cave
Beide Antworten geht in die gute Richtung.
Hier ist eine weitere alternative sehen, wenn die Lautstärke in der Tabelle macht kein problem bei DELETE-Befehl:
Und Beispiel für die Ausgabe:
InformationsquelleAutor igr
CREATE OR REPLACE PROCEDURE EMP_INSERT
(RECORD_COUNT NUMMER)
IST
BEGINNEN
InformationsquelleAutor joh