Neue PL/SQL-Person hier. Ich habe eine (erfolgreich kompiliert) PL/SQL-Funktionsblock, der durch Hinzufügen eines neuen Begriffs es eine Tabelle in meiner Datenbank manipuliert:ORACLE PL/SQL: Gespeicherte Prozedurfunktion mit mehreren Parametern aufrufen (DML-Abfrage)
create or replace FUNCTION add_new_term
(TERM_ID_IN IN NUMBER, TERM_IN IN VARCHAR2, IS_METATERM_IN IN NUMBER)
RETURN VARCHAR2
IS
add_term CV_TERMS.TERM_NAME%TYPE; --TERM_NAME is VARCHAR2 type
BEGIN
INSERT INTO CV_TERMS (TERM_ID, TERM_NAME, IS_METATERM)
VALUES (TERM_ID_IN, TERM_IN, IS_METATERM_IN);
dbms_output.put_line('New term successfully added to CV_TERMS table: ' || TERM_IN);
RETURN add_term;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
raise_application_error (-20001, 'You have tried to insert a duplicate term.');
WHEN OTHERS THEN
raise_application_error (-20002, 'An error has occurred inserting a term - '|| SQLCODE ||' -ERROR- '|| SQLERRM);
END add_new_term;
ich diese Funktion aufrufen wie eine gespeicherte Prozedur aufrufen:
DECLARE
add_term_success cv_terms.term_name%type;
BEGIN
add_term_success := add_new_term(cv_terms_pk.NEXTVAL, 'TESTTT', 0);
END;
SQLDeveloper teilt mir mit, dass die Prozedur erfolgreich abgeschlossen wurde, der Begriff wurde jedoch nicht zur Tabelle hinzugefügt. Ich habe die Sequenz cv_terms_pk
unabhängig erstellt (nicht in der Tabelle CV_TERMS 'SQL). Muss es da sein? Übergebe ich es falsch? Oder stimmt etwas nicht mit meiner add_term
Deklaration? Ideen?
tun Sie irgendwo begehen? – tbone
Haben Sie die Tabelle abgefragt, um zu verifizieren, dass sie nicht da ist? Ich habe festgestellt, dass Sie 'add_term' zurückgeben, aber niemals einen Wert festlegen. Ebenso geben Sie eine Ausgabezeile zurück, nachdem Sie die Ausführung aufgrund der Rückgabe bereits beendet haben. Der Rückgabewert ist also immer 'NULL' und es wird niemals eine Ausgabe in der Konsole angezeigt. –
@HepC Ich habe tatsächlich den Tisch abgefragt. Sie schreiben auf den Tisch. Wie dumm von mir. Als ich vorher in der Tabelle nach ihnen gesucht habe, sind sie nicht aufgetaucht. So funktioniert alles außer der Konsolenausgabe. Könntest du ein bisschen mehr erklären? Ich verstehe, dass ich die Rückleitung nach der Rückkehr (ich habe es geschaltet), aber so weit wie einen Wert auf "add_term" setzen? @ tbone Ich habe mich nicht verpflichtet. – snl330