Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Erstellung eine komplexe SQL Prozedur

1056259Nov 22 2013 — edited Nov 25 2013

Hallo,

ich möchte eine SQL Prozedur erstellen, welche Folgendes tuen soll.

Ich habe zwei Spalten: SUPPLIER_NAME, SUPPLIER_ADDRESS

SUPPLIER_NAME = Name der Lieferanten gespeichert (es gibt auch Zeilen, welche keine Name eingetragen ist, aber die Lieferantenadressen ist immer eingetragen.

SUPPLIER_ADDRESS = Adresse der Lieferanten gespeicher.

Ich möchte mit eine Prozedur, die leere Zeilen in SUPPLIER_NAME finden,

nachdem ich es gefunden habe, nehme ich die dazugehörige Lieferantenadresse und möchte mit den anderen Lieferantenadressen vergleichen.

Bei eine Übereinstimmung, nehme ich das SUPPLIER_NAME von der übereinstimmten SUPPLIER_ADDRESS und schreibe die in die leere SUPPLIER_NAME.

Ich hoffe, ich habe mich verständlich ausgedruckt.

Dazu habe ich folgende Code erstellt.

CREATE OR REPLACE PROCEDURE SEARCH_AND_FILL_IN (TABLE_SUPPLIER IS TABLE OF VARCHAR2 INDEX BY BINARY_INTEGER, TABLE_SUPPLIER_ADDRESS IS TABLE OF VARCHAR2 INDEX BY  BINARY_INTEGER) IS

        INDEX_SUPPLIER BINARY_INTEGER;

        INDEX_SUPPLIER_ADDRESS BINARY_INTEGER; 

        ROW TABLE_SUPPLIER%ROWTYPE;

  BEGIN

    INDEX_SUPPLIER := 1

      INDEX_SUPPLIER_ADDRESS :=1

    FOR EACH ROW IN TABLE_SUPPLIER LOOP

      IF TABLE_SUPPLIER(INDEX_SUPPLIER) IS NULL THEN

        FOR EACH ROW IN TABLE_SUPPLIER_ADDRESS LOOP

          IF TABLE_SUPPLIER_ADRESS(INDEX_SUPPLIER_ADDRESS) IS TABLE_SUPPLIER(INDEX_SUPPLIER) THEN

            UPDATE TABLE_SUPPLIER SET TABLE_SUPPLIER(INDEX_SUPPLIER) = TABLE_SUPPLIER(INDEX_SUPPLIER_ADDRESS);

          ELSE

            INDEX_SUPPLIER_ADDRESS := INDEX_SUPPLIER_ADDRESS + 1;

          END IF;

        END LOOP;

        INDEX_SUPPLIER_ADDRESS := 1;

      END IF;

      INDEX_SUPPLIER := INDEX_SUPPLIER +1;

    END LOOP;

END;

Wenn ich es ausführe bekomme ich folgende Meldung:

FUNCTION AMI_CHAR2NUMBER kompiliert

Errors: check compiler log

die dazugehörige compiler log

Projekt: sqldev.temp:/IdeConnections%23Ebis1.jpr

    C:\Users\Hasan H. Gümüs\AppData\Roaming\SQL Developer\EbisBereinigung.sql

        Fehler(1,46): PLS-00103: Encountered the symbol "IS" when expecting one of the following:     in out <an identifier> <a double-quoted delimited-identifier>    ... long double ref char time timestamp interval date binary    national character nchar

        Fehler(1,90): PLS-00103: Encountered the symbol "," when expecting one of the following:     . ( @ % ; not null range alter character

Wenn ich danach meine Prozedure mit folgende Zeile ausführe:

EXECUTE SEARCH_AND_FILL_IN(STAGE2_PURCHASES.SUPPLIER, STAGE2_PURCHASES.SUPPLIER_ADDRESS);

Bekomme ich folgende Meldung:

Fehler beim Start in Zeile 200 in Befehl:

EXECUTE SEARCH_AND_FILL_IN(STAGE2_PURCHASES.SUPPLIER, STAGE2_PURCHASES.SUPPLIER_ADDRESS)

Fehlerbericht:

ORA-06550: line 1, column 43:

PLS-00357: Table,View Or Sequence reference 'STAGE2_PURCHASES.SUPPLIER' not allowed in this context

ORA-06550: line 1, column 7:

PL/SQL: Statement ignored

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:

und die dazugehörige Compiler log zieht folgendermaßen aus:

Projekt: sqldev.temp:/IdeConnections%23Ebis1.jpr

    C:\Users\Hasan H. Gümüs\AppData\Roaming\SQL Developer\EbisBereinigung.sql

        Fehler(15,1): PLS-00103: Encountered the symbol "UPDATE"

Könnt ihr mir hierbei helfen?

Was habe ich denn bei meine Prozedur falsch gemacht?

Vielen Dank im Voraus

Gruss

Hasan

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Dec 23 2013
Added on Nov 22 2013
2 comments
1,566 views