2017-03-26 3 views
0

Tabelle EMP hat ENAME als Attribut folgende Funktionsfehler gibt:Warnung: Funktion mit Kompilierungsfehler erstellt

SET SERVEROUTPUT ON 
SET ECHO ON 
CREATE OR REPLACE FUNCTION count_emp(e_name varchar(20)) 
RETURN integer IS 
total integer; 
BEGIN 
SELECT count(*) into total 
FROM DEPARTMENTS 
where ENAME = e_name; 
RETURN total; 
END; 
/

warning:function created with compilation error.

Antwort

1

Sie show errors; ausführen können, um zu sehen, welche Kompilierungsfehlern sind.

Der Datentyp des Parameters sollte ohne Länge angegeben werden. Verwenden Sie auch varchar2 anstelle von varchar.

Von Oracle site:

The VARCHAR datatype is synonymous with the VARCHAR2 datatype. To avoid possible changes in behavior, always use the VARCHAR2 datatype to store variable-length character strings.

Try this:

CREATE OR REPLACE FUNCTION count_emp(e_name varchar2) -- here 
RETURN integer IS 
total integer; 
BEGIN 
SELECT count(*) into total 
FROM DEPARTMENTS 
where ENAME = e_name; 
RETURN total; 
END; 
/
+0

danke sir! Arbeiten –

0

Wenn Sie kümmern sich um Tisch EMP, können Sie es in der Funktion verwendet werden soll.

Ich würde schreiben dies als:

CREATE OR REPLACE FUNCTION count_emp (
    in_e_name varchar2 
) 
RETURN integer IS 
    v_total integer; 
BEGIN 
    SELECT COUNT(*) into v_total 
    FROM EMP e 
    WHERE e.ENAME = in_e_name; 

    RETURN v_total; 
END; 

Hinweise:

  • Oracle Funktionen kompilieren und gespeicherte Prozeduren, auch wenn die Objekte nicht (noch) nicht vorhanden sind. Dies wird als "Merkmal" angesehen.
  • Verwenden Sie Namenskonventionen, um Parameter und Variablen von Spalten zu unterscheiden. Dies verwendet in_ für die Eingangsparameter und v_ für die lokalen Variablen.
  • Qualifizieren Sie alle Spaltennamenreferenzen. Dies verringert die Wahrscheinlichkeit einer Kollision zwischen einer Variablen und einem Spaltennamen weiter.
  • Sie brauchen keine Länge für varchar2() Eingänge (was zu varchar() vorzuziehen ist, obwohl vielleicht eines Tages, Oracle wird den Standard zu hüllen).
+0

Danke Herr .. seine Arbeit :) –

Verwandte Themen