# Oracle Funktion erstellen: PL/SQL: ORA-00984: Spalte hier nicht zuläss



## sabbergesicht (1. Juli 2013)

Hallo Community,

ich erstelle gerade eine Visual Composer Application zu deren Datenhaltung und Verarbeitung mir eine Oracle Datenbank zur Verfügung steht.
Dabei will ich gerade eine Funktion anlegen mit der ich übergebene Werte (diese stammen aus der GUI und werden beim Funktionsaufruf übergeben) in eine extra Tabelle schreiben möchte.

Leider erhalte ich den im Titel eingetragenen Fehler. Ich habe bereits mehrere Einträge zu diesem Fehler in diesem und anderen Foren gefunden, leider war nichts hilfreiches dabei.
Ich bin, was die Datenbank programmierung angeht, eigentlich auch ziemlich unerfahren.

Die Funktion soll wie folgt aussehen.


```
create or replace
FUNCTION COP_PRUEFLIST_EINTRAG (
                  p_ordernr IN VARCHAR2,
                  p_copland IN VARCHAR2,
                  p_pruefart IN VARCHAR2,
                  p_variante IN VARCHAR2,
                  p_datum IN DATE
                  )
  RETURN VARCHAR2
IS
  PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN
  
    INSERT INTO COP_PRUEFLISTEFZG ( ORDERNR,
                                    LAND,
                                    PRUEFART,
                                    VARIANTE,
                                    STATUS,
                                    DATUM,
                                    BEMERKUNG)
    VALUES (p_ordenr,
            p_copland,
            p_pruefart,
            p_variante,
            'geplant',
            p_datum,
            '');   
        
        COMMIT;
        
        RETURN NULL;
       
END;
```

Der Fehler meldet die Zeile mit "BEMERKUNG" aus dem Insert Into Eintrag.
Die Tabelle existiert, wenn ich das insert Statement manuell ausführe funktioniert das auch.

Vielen Dank für die Hilfe.

Gruß
Benni


----------



## Yaslaw (1. Juli 2013)

Und was für eine Meldung erscheint?


----------



## diel2001 (1. Juli 2013)

Vielleicht ist "STATUS" eine Schlüsselwort in Oracle. Die Codedarstellung hier im Forum hebt diese Spalte hervor.


----------



## BaseBallBatBoy (1. Juli 2013)

Du verwendest eine FUNCTION.

Es ist allgemein gute Praxis FUNCTION's nur für "read-only" calls zu verwenden. 
Für DML tasks hingegen eine PROCEDURE.

Du solltest eine PROCEDURE brauchen anstelle der FUNCTION weil du ja INSERT machen willst.

http://www.techonthenet.com/oracle/procedures.php


----------



## sabbergesicht (1. Juli 2013)

Hallo,

die Meldung die erscheint ist folgende:

Fehler(21,13): PL/SQL: ORA-00984: Spalte hier nicht zulässig

Die Spalte Status wird zwar hervorgehoben aber hätte das dann nicht schon beim anlegen der Tabelle aufzeigen müssen?
Ich werde mal versuchen STATUS in "" zu setzen.

Gruß
Benni


----------



## sabbergesicht (1. Juli 2013)

Hi,

die verwendung einer Prozedur geht leider nicht, da ich diese nicht mit dem VC aufrufen kann. Ich könnte höchstens eine FUNCTION bauen die eine PROZEDUR aufruft und blind die Übergabeparameter durchreicht, das wäre für künftige Betreuer allerdings alles andere als schön.

Also die ""-Variante hat das Problem nicht behoben. Ich habe auch nochmal exisiterende Tabellen durchforstet und in einer ähnlichen Anwendung gibt es auch eine Spalte STATUS die keine Probleme verursacht.

Gruß
Benni


----------



## sabbergesicht (1. Juli 2013)

Das Problem ist gefunden:

Im Abschnitt Values, hat sich ein Tipfehler eingeschlichen den ich gekonnt überlesen habe (immer und immer wieder).
Statt des Parameters p_ordernr habe ich dort p_ordenr verwendet (ein r fehlt).

Vielen Dank für die Hinweise und Lösungsansätze.

Gruß
Benni


----------

