Insert-Prozedur
Beitrag geschrieben von PriHost am 2007-11-29
Kurzbeschreibung:
Beispielcode zum erstellen einer gespeicherten Prozedur zum einfügen eines Datensatzes in eine Tabelle.
Beispielcode zum erstellen einer gespeicherten Prozedur zum einfügen eines Datensatzes in eine Tabelle.
Hier soll die Prozedur mit dem Namen "INS_item" erstellt werden, welche eine Datensatz in die Tabelle "ITEM".
Inserts über Prozeduren zu erstellen ermöglicht das Überprüfen der übergebenen Parametern direkt in der Datenbank. Diese ist schneller als wenn ich Sicherheitüberprüfungen in der Software vornehme und dadurch extra auf die Datenbank zugreifen muss.
Wenn ein Fehler auftritt wird die Error-Ausgabe in p_Error geschrieben und die Prozedur abgebrochen. Dabei wird der Fehler p_Error ausgegeben.
p_CategoryId, p_TypeId usw. sind übergabeparameter, die von der Software übergeben werden.
p_Error OUT VARCHAR2 => OUT zeigt, das es sich um ein Ausgabeparameter handelt.
v_Help, v_ObjCount , usw. sind Variablen die in der Prozedur Deklariert werden.
PRIHOST.ITEM_SQ_ITEM.NEXTVAL => gibt den nächsten PrimaryKey
Der Block:
Exception's tauchen auf, wenn ein Fehler auftaucht. In diesem Fall wird der Fehler in die Variable p_Error geschrieben und ausgegeben bzw. an die Software übergeben.
Inserts über Prozeduren zu erstellen ermöglicht das Überprüfen der übergebenen Parametern direkt in der Datenbank. Diese ist schneller als wenn ich Sicherheitüberprüfungen in der Software vornehme und dadurch extra auf die Datenbank zugreifen muss.
Code:
CREATE OR REPLACE PROCEDURE INS_item (
p_CategoryId IN INT,
p_TypeId IN INT,
p_UserId IN INT,
p_Name IN VARCHAR2,
p_Description IN VARCHAR2 DEFAULT NULL,
p_Link IN VARCHAR2 DEFAULT NULL,
p_Content IN LONG DEFAULT NULL,
p_InsertDateTime IN DATE DEFAULT NULL,
p_Image IN BLOB DEFAULT NULL,
p_ImageLink IN VARCHAR2 DEFAULT NULL,
p_SP_Help CHAR DEFAULT '0',
p_Error OUT VARCHAR2
)
AS
v_Help varchar2(1000);
v_ObjCount int;
v_InsertDateTime DATE;
BEGIN
-- *********************************************************************
-- Prozedur zum einfügen eines Datensatzes in die Tabelle item
--
-- erstellt von: Manuel Münch
-- Datum: 29.11.2007
-- Version: 1.0
-- *********************************************************************
p_Error := '';
v_Help := 'Prozedure zur Füllen der Tabelle item.';
-- IF p_SP_Help > 0 THEN
-- OPEN p_OUT_CC FOR
-- SELECT * FROM v_Help;
-- RETURN;
--END IF;
SELECT COUNT(1) INTO v_ObjCount FROM All_objects WHERE owner = 'PRIHOST' AND Object_Name = 'ITEM';
IF v_ObjCount = 0
THEN
p_Error := 'Die Tabelle item existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM ITEM_CATEGORY WHERE CategoryId=p_CategoryId;
IF v_ObjCount = 0
THEN
p_Error := 'Die Kategory existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM ITEM_TYPE WHERE TypeId=p_TypeId;
IF v_ObjCount = 0
THEN
p_Error := 'Der Type existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM "USER" WHERE UserId=p_UserId;
IF v_ObjCount = 0
THEN
p_Error := 'Der User existiert nicht.';
RETURN;
END IF ;
v_InsertDateTime := Nvl(p_InsertDateTime,SYSDATE());
INSERT INTO ITEM (
ItemId,
CategoryId,
TypeId,
UserId,
Name,
Description,
Link,
Content,
InsertDateTime,
Image,
ImageLink
) VALUES (
PRIHOST.ITEM_SQ_ITEM.NEXTVAL,
p_CategoryId,
p_TypeId,
p_UserId,
p_Name,
p_Description,
p_Link,
p_Content,
v_InsertDateTime,
p_Image,
p_ImageLink
);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
p_Error := 'INS_item: Es ist ein Fehler aufgetreten - '||SQLCODE||' -ERROR- '||SQLERRM;
END ;
END INS_item;
p_CategoryId IN INT,
p_TypeId IN INT,
p_UserId IN INT,
p_Name IN VARCHAR2,
p_Description IN VARCHAR2 DEFAULT NULL,
p_Link IN VARCHAR2 DEFAULT NULL,
p_Content IN LONG DEFAULT NULL,
p_InsertDateTime IN DATE DEFAULT NULL,
p_Image IN BLOB DEFAULT NULL,
p_ImageLink IN VARCHAR2 DEFAULT NULL,
p_SP_Help CHAR DEFAULT '0',
p_Error OUT VARCHAR2
)
AS
v_Help varchar2(1000);
v_ObjCount int;
v_InsertDateTime DATE;
BEGIN
-- *********************************************************************
-- Prozedur zum einfügen eines Datensatzes in die Tabelle item
--
-- erstellt von: Manuel Münch
-- Datum: 29.11.2007
-- Version: 1.0
-- *********************************************************************
p_Error := '';
v_Help := 'Prozedure zur Füllen der Tabelle item.';
-- IF p_SP_Help > 0 THEN
-- OPEN p_OUT_CC FOR
-- SELECT * FROM v_Help;
-- RETURN;
--END IF;
SELECT COUNT(1) INTO v_ObjCount FROM All_objects WHERE owner = 'PRIHOST' AND Object_Name = 'ITEM';
IF v_ObjCount = 0
THEN
p_Error := 'Die Tabelle item existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM ITEM_CATEGORY WHERE CategoryId=p_CategoryId;
IF v_ObjCount = 0
THEN
p_Error := 'Die Kategory existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM ITEM_TYPE WHERE TypeId=p_TypeId;
IF v_ObjCount = 0
THEN
p_Error := 'Der Type existiert nicht.';
RETURN;
END IF ;
v_ObjCount := 0;
SELECT COUNT(1) INTO v_ObjCount FROM "USER" WHERE UserId=p_UserId;
IF v_ObjCount = 0
THEN
p_Error := 'Der User existiert nicht.';
RETURN;
END IF ;
v_InsertDateTime := Nvl(p_InsertDateTime,SYSDATE());
INSERT INTO ITEM (
ItemId,
CategoryId,
TypeId,
UserId,
Name,
Description,
Link,
Content,
InsertDateTime,
Image,
ImageLink
) VALUES (
PRIHOST.ITEM_SQ_ITEM.NEXTVAL,
p_CategoryId,
p_TypeId,
p_UserId,
p_Name,
p_Description,
p_Link,
p_Content,
v_InsertDateTime,
p_Image,
p_ImageLink
);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
p_Error := 'INS_item: Es ist ein Fehler aufgetreten - '||SQLCODE||' -ERROR- '||SQLERRM;
END ;
END INS_item;
Wenn ein Fehler auftritt wird die Error-Ausgabe in p_Error geschrieben und die Prozedur abgebrochen. Dabei wird der Fehler p_Error ausgegeben.
p_CategoryId, p_TypeId usw. sind übergabeparameter, die von der Software übergeben werden.
p_Error OUT VARCHAR2 => OUT zeigt, das es sich um ein Ausgabeparameter handelt.
v_Help, v_ObjCount , usw. sind Variablen die in der Prozedur Deklariert werden.
PRIHOST.ITEM_SQ_ITEM.NEXTVAL => gibt den nächsten PrimaryKey
Der Block:
Code:
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
p_Error := 'INS_item: Es ist ein Fehler aufgetreten - '||SQLCODE||' -ERROR- '||SQLERRM;
END ;
WHEN OTHERS THEN
BEGIN
ROLLBACK;
p_Error := 'INS_item: Es ist ein Fehler aufgetreten - '||SQLCODE||' -ERROR- '||SQLERRM;
END ;
Exception's tauchen auf, wenn ein Fehler auftaucht. In diesem Fall wird der Fehler in die Variable p_Error geschrieben und ausgegeben bzw. an die Software übergeben.


