Prozedur mit Tabellenausgabe

Xbody

Benutzer
Beiträge
9
Code:
CREATE OR REPLACE PROCEDURE LibertyCity(X CHAR) AS
  BEGIN
    IF X LIKE 'la' THEN
        (Select S.Name
        from City S, Country C
        where S.Country = C.Code and C.Code = 'la';)
    IF X LIKE 'tu' THEN
        (Select S.Name
        from City S, Country C
        where S.Country = C.Code and C.Code = 'tu';)
  END;

Ich hoffe man versteht, was ich tun möchte,
ich weiß bloß nicht wie.
Verwende Oracle SQL Developer.

Da kommt ein Fehler
Code:
Error(4,10): PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:    ( - + case mod new not null <an identifier>    <a double-quoted delimited-identifier> <a bind variable>    continue avg count current exists max min prior sql stddev    sum variance execute forall merge time timestamp interval    date <a string literal with character set specification>    <a number> <a single-quoted SQL string> pipe    <an alternatively-quoted string literal with character set specification>    <an alternat
 
Werbung:
Fertig! Hab bloß noch eine Tabelle
BLABLA
erstellt in die ich einfüge.

Code:
CREATE OR REPLACE PROCEDURE LibertyCity(X CHAR) AS
  BEGIN
    IF X = 'la' THEN
      INSERT INTO BLABLA
        Select S.*
        from City S, Country C
        where S.Country = C.Code and C.Code = 'la';
    END IF;
    IF X = 'tu' THEN
      INSERT INTO BLABLA
        Select S.*
        from City S, Country C
        where S.Country = C.Code and C.Code = 'tu';
    END IF;
  END;
 
Werbung:
Ich bin jetzt nicht so fit in Oracle aber ich denke da gibt es Verbesserungspotenzial. Zum einen kannst du bei mehreren IF Abfragen auch gut eine CASE Schleife verwenden, etwa so:
Code:
CREATE OR REPLACE PROCEDURE LibertyCity(X CHAR) AS
  BEGIN
    ( CASE
    WHEN    X = 'la' THEN
      INSERT INTO BLABLA
        Select S.*
        from City S, Country C
        where S.Country = C.Code and C.Code = 'la'
    WHEN    X = 'la' THEN
      INSERT INTO BLABLA
        Select S.*
        from City S, Country C
        where S.Country = C.Code and C.Code = 'tu'
    END )
  END;
Zum Anderen kannst du auch alles in einem Select durchführen, da braucht es kein IF oder CASE.
Code:
CREATE OR REPLACE PROCEDURE LibertyCity(X CHAR) AS
  BEGIN
      INSERT INTO BLABLA
        Select S.*
        from City S, Country C
        where S.Country = C.Code and C.Code = X
  END;
Natürlich nur wenn es sich wirklich so simpel verhält.
 
Zurück
Oben