SNOWMAN Geschrieben 17. Juni 2004 Teilen Geschrieben 17. Juni 2004 Hi, hab ne tabelle mit 15 Zeilen, diese sollen alle in ne andere Tabelle jeweils mit unterschiedlichen AutragIDs. Jetzt kollabier ich gleich an diesem ******* INSERT Ich hab nun also den Cursor der mir die 8 Spalten per fetch in 8 Variablen speichert. Diese sollen nun per insert verarbeitet werden. dazu hab ich in 2 Büchern gelesen, des eine buch hält es dabei nicht nötig mit cursorvariablen zu arbeiten, nein es definiert sie einfach von vornherein fest, die daten... des andere hält es nicht nötig eine gute erklöärung für insert zu schreiben, der befehl wird zwar in jedem beispiel verwendet, aber wirklich zu sagen wie es geht... pfff........ so, wie gehts nun? cursor Auftrag_c is ... insert into Kunde_Aufpos(AuftragsID,...) values (Auftrag_c.AuftragsID, ...) oder insert into Kunde_Aufpos(AuftragsID,...) values (AuftragsID, ...) beides hab ich gefunden... welches geht nun? Test is leider nich drin da die tabellen auf der produktivmaschine laufen und ich als azubi da (noch) nich ran darf Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 17. Juni 2004 Teilen Geschrieben 17. Juni 2004 ... welches geht nun? insert into Kunde_Aufpos(AuftragsID,...) values (@dievariablen, ...) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 17. Juni 2004 Teilen Geschrieben 17. Juni 2004 @snowman Poste doch am besten mal dein komplettes Statement, irgendwie werd ich aus dem bisherigen nicht schlau... Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 18. Juni 2004 Autor Teilen Geschrieben 18. Juni 2004 ok, wie du willst Ich habst jetzt einfach mal so wie ich mein das es richtig ist: VARIABLE startwert NUMBER VARIABLE endwert NUMBER VARIABLE counter NUMBER EXECUTE :startwert := &Startwert EXECUTE :endwert := &Endwert DECLARE CURSOR auftrag_c is Select rownum, '31' postyp, 'AD_DE' katalog, '0' bnegiert, '0' bnull, 'Admin=SQL' strfeld, 'XXX' stroperator,mlfb from( select distinct mlfb from artikel a, artikel_preis ap, artikel_map am where a.intart_id = ap.intart_id and a.intart_id = am.intart_id and ap.preis > '0' and a.intbereich=1 and a.reg='INT' and a.status='000' and a.loekz = 'N' and a.ka ='#' and ap.preisart='LP0' and ap.strfreg='DE' and ap.pmenge=1 and am.intft_sysid=5 and am.loekz != 'N' ), kunde_auftrag; rownum_v kunde_aufpos.posnr%TYPE; postyp_v kunde_aufpos.postyp%TYPE; katalog_v kunde_aufpos.ft_group_id_k%TYPE; bnegiert_v kunde_aufpos.bnegiert%TYPE; bnull_v kunde_aufpos.bnull%TYPE; strfeld_v kunde_aufpos.strfeld%TYPE; stroperator_v kunde_aufpos.stroperator%TYPE; mlfb_v kunde_aufpos.strbedingung%TYPE; BEGIN OPEN auftrag_c; counter := 0; LOOP IF counter = 15 THEN startwert := startwert + 1; counter := 0; END IF; WHILE startwert <= enstwert FETCH auftrag_c INTO rownum_v, postyp_v, katalog_v, bnegiert_v, bnull_v, strfeld_v, stroperator_v, mlfb_v; INSERT INTO kunde_aufpos (AUFTRAGSID, POSNR, POSTYP, FT_GROUP_ID_K, BNEGIERT, BNULL, STRFELD, STROPERATOR, STRBEDINGUNG) VALUES (startwert, rownum_v, postyp_v, katalog_v, bnegiert_v, bnull_v, strfeld_v, stroperator_v, mlfb_v); dbms_output.put_line ('Dem Auftrag ' || startwert || ' wurde eine MLFB hinzugefügt.'); counter :=counter + 1; END LOOP; --COMMIT; EXCEPTIION WHEN TIMEOUT_ON_RESOURCE THEN dbms_output.put_line ('Time-Out wärend des warten auf Ressourcen') WHEN VALUE_ERROR THEN dbms_output.put_line ('Ein Value Error ist aufgetreten') WHEN INVALID_CURSOR THEN dbms_output.put_line ('Es wurde versucht eine unerlaubte Cursorfunktion aus zu führen') WHEN OTHERS THEN dbms_output.put_line ('Es ist ein unbekannter Fehler aufgetreten') CLOSE auftrag_c; END; / P.S. den ganzen schotter mit cursor und variablen und exceptions und so hab ich mir jetzt in 3 Tagen selber beigebracht *miraufdieschulterklopf* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
johnhaltonx Geschrieben 18. Juni 2004 Teilen Geschrieben 18. Juni 2004 ok, und welche fehlermeldung gibts beim kompilieren? oder ist das syntaktisch korrekt und er macht die inserts nur nicht richtig ? Wenn er kompilierungsfehler hat entweder im Enterprise Manager schauen was er für Fehler wirft oder auf dem sqlplus prompt nach dem Kompileversuch "show err" eingeben. ups hab gerade erst gelesen das dus nicht testen kannst ? Gibts keine test umgebung ? oder hast du keinen Login wo du dir einfach mal die Tabellen als dummy anlegen kannst? gleiche struktur mit 20 rows dummy daten? mfg john Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 21. Juni 2004 Teilen Geschrieben 21. Juni 2004 Hi Snowman! Sorry, dass ich jetzt erst schreibe, war unterwegs... Du brauchst zunächst im DECLARE-Teil eine zusätzliche Variable, z.B. v_auftrag auftrag_c%rowtype; In diese Variable musst du dann beim FETCH-Statement einlesen FETCH auftrag_c INTO v_auftrag; Jetzt kannst du auch auf die verschiedenen Felder zugrifen, die du beim Cursor angegeben hast, z.B. INSERT INTO kunde_aufpos ( posnr, ... ) VALUES ( v_auftrag.rownum, ... ); Ich hoffe ich konnte Dir weiterhelfen! Gruss, Axl PS. Bei der Gelegenheit würde ich mir auch mal das Handling von Cursor in Verbindung mit FOR-Schleifen ansehen. Würde meines Erachtens bei deinem Programm ganz sinnvoll sein... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 24. Juni 2004 Autor Teilen Geschrieben 24. Juni 2004 Thx Axl, hat funktioniert! Hat mir viel Kopfzerbrechen bereitet die aufgabe... aber etz ist geschafft und ich wurde ins Marketing verfrachtet ^^ @johnhaltonx: ne, aufs produktivsystem und Qualitätssystem hab ich zwar zugriff, darf da aber nur selects machen, is ja klar, wenn ich mist bau steht alles und da freut sich mr. kunde nicht und auf die testmaschine durft ich nich, weil da grad andere tests laufen und wenn ich die dann abschies wärs blöd weil die "anderen wichtigen" tests bereits seit 72 Stunden liefen ... was nach aussage vom kollegen schlecht sei weils nach 8 stunden fertig sein solle ... und deshalb is der wichtiger als meiner ? O_o Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.