Zum Inhalt springen

pel

Mitglieder
  • Gesamte Inhalte

    45
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von pel

  1. Musterlösung von Lehrerin: create or replace PROCEDURE STUE14 AS BEGIN declare cursor c_Bestellung is select * from BestellungenUe14 where Lfr_code not in (select Lfr_code from LieferantenUe14) for update; B_Satz BestellungenUe14 %ROWTYPE; fehlercode number; fehlernachricht varchar2(255); lfr_not_found exception; falscherLfr_code BestellungenUe14.Lfr_code%TYPE; -- B_Satz.Lfr_code in exception nicht -- bekannt! Begin dbms_output.enable; if SQL%NOTFOUND then dbms_output.put_line('keine fehlerhaften Tupel in B-Tab.'); else for B_Satz in c_Bestellung loop insert into FalscheBestellungenUe14 values (B_Satz.Bestellnr, B_Satz.Lfr_code, B_Satz.B_Datum, B_Satz.Betrag); delete BestellungenUe14 where current of c_Bestellung; falscherLfr_code:= B_Satz.Lfr_code; raise lfr_not_found; end loop; end if; commit; exception when NO_DATA_FOUND then dbms_output.put_line('keine fehlerhaften Tupel in Bestell-Tab.'); when lfr_not_found then dbms_output.put_line('Lieferant: '||falscherLfr_code||' ex. nicht'); when others then fehlercode:= SQLCODE; fehlernachricht:= SQLERRM; end; DDL code von Lehrerin: CREATE TABLE BESTELLUNGENUE14 ( "BESTELLNR" NUMBER(10,0), "LFR_CODE" CHAR(3), "B_DATUM" CHAR(8), "BETRAG" NUMBER(7,2) ) ; Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (175,'004','19880227',395.51); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (181,'009','19890306',577.22); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (190,'014','19850313',659.84); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (191,'013','19850313',1211.41); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (200,'004','20040314',72); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (201,'004','19850326',221.25); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (202,'014','19850326',530.43); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (203,'019','19850401',556.6); Insert into BESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (205,'013','20010225',300); CREATE TABLE FALSCHEBESTELLUNGENUE14 ( "BESTELLNR" NUMBER(10,0) NOT NULL ENABLE, "LFR_CODE" CHAR(3), "B_DATUM" CHAR(8), "BETRAG" NUMBER(7,2) ) ; ALTER TABLE FALSCHEBESTELLUNGENUE14 ADD CONSTRAINT "FALSCHEBESTELLUNGENUE18_PK" PRIMARY KEY ("BESTELLNR") ENABLE; Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (174,'003','20010225',117.5); Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (184,'022','19990306',240); Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (186,'020','19850311',414.05); Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (192,'035','20030313',317.52); Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (197,'035','19850314',928.27); Insert into FALSCHEBESTELLUNGENUE14 (BESTELLNR,LFR_CODE,B_DATUM,BETRAG) values (204,'034','19850401',492.53); CREATE TABLE LIEFERANTENUE14 ( "LFR_CODE" CHAR(3) NOT NULL ENABLE, "LFR_NAME" VARCHAR2(20), "ADRESSE" VARCHAR2(25), "WOHNORT" VARCHAR2(15) ) ; ALTER TABLE LIEFERANTENUE14 ADD CONSTRAINT "LIEFERANTENUE18_PK" PRIMARY KEY ("LFR_CODE") ENABLE; Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('004','HOVEN G.H.','SANDWEG 50','LINZ'); Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('009','BAUMGARTEN R.','TANKSTRASSE 13','HANNOVER'); Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('011','STRAUCH GMBH','BEERENWEG 1','LINZ'); Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('013','SPITZMANN','HINTERGARTEN 9','AALEN'); Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('014','DEZAIER L.J.','IM GRUND 101','LINZ'); Insert into LIEFERANTENUE14 (LFR_CODE,LFR_NAME,ADRESSE,WOHNORT) values ('019','SCHOENE F.A.','SOMMERSTR. 24','AALEN'); Compiliert OK, doch beim ausführen der Prozedur kommt dieser fehler: Source does not have a runnable target. Habe auch gegoogelt doch da steht was von Packages macht aber net wirklich sinn, vielleicht weißt du mehr mit deiner Masse ERahrung an pl/sql!? :uli
  2. kennst du noch ein Programm sollte freeware sein, dass pl/sql code darstellt mit syntax highlighting, da ich meinen Code farbig ausdrucken möchte, um zu lernen ach vergiß die frage, ich installier einfach sql developer bei der Freundin daheim...
  3. CREATE OR REPLACE PROCEDURE COLLECTIONTEST AS TYPE MaTab is table of Mitarbeiter%ROWTYPE index by binary_integer; MaSatz MaTab; Begin -- ///////// Spaltenwerte in eine Collections einlesen ///////////// select * into MaSatz(1) from mitarbeiter where ma_nr = 1; dbms_output.put_line('Mitarbeiternummer: '||masatz(1).MA_NR||' Vorname: '||masatz(1).MA_Vorname||' Mitarbeitergehalt: '||masatz(1).MA_Gehalt); End; END COLLECTIONTEST; Fehler: Error(12,1): PLS-00103: Fand das Symbol "END" ??
  4. warum meckert der compiler aber, wenn untenstehends declare von mir entfernt wird? Es ist eine Prozedur sollte doch laut dir kein declare enthalten? CREATE OR REPLACE PROCEDURE COLLECTIONTEST AS BEGIN declare TYPE MaTab is table of Mitarbeiter%ROWTYPE index by binary_integer; MaSatz MaTab; Begin -- ///////// Spaltenwerte in eine Collections einlesen ///////////// select * into MaSatz(1) from mitarbeiter where ma_nr = 1; dbms_output.put_line('Mitarbeiternummer: '||masatz(1).MA_NR||' Vorname: '||masatz(1).MA_Vorname||' Mitarbeitergehalt: '||masatz(1).MA_Gehalt); End; END COLLECTIONTEST; Beende ich ein Case mit end case; kommt Fehler. nur mit end; kein fehler?? In wikipedia steht aber end case; so beenden :confused: irgendwie scheint mir pl/sql noch in den Kinderschuhen zu stecken oder die leute blickens net... quelle: http://de.wikipedia.org/wiki/PL/SQL#Simple_CASE beides zu erlauben ist auch quark!
  5. Keine Ahnung was Du da drumherumprogrammiert hast. Auf jeden Fall ist dein Cursor unnötig und versaut dir dein Ergebnis. Du brauchst keine Schleife und keinen Cursor - dein UPDATE Befehl macht alles in einem Rutsch. so gehts: ok ich versuchte immer eine update auf einzelne Zeilen zu machen, wobei update ja beinhaltet, dass die ganze TAbelle betroffen ist :schlaf: create or replace PROCEDURE UPDATE_PRAEMIE AS BEGIN BEGIN update Mitarbeiter set MA_Praemie = case when MA_Praemie > 9000 then MA_Praemie * 1.15 when MA_Praemie > 5000 then MA_Praemie * 1.10 when MA_Praemie > 1000 then MA_Praemie * 1.05 else MA_Praemie end; END; COMMIT; END UPDATE_PRAEMIE; meine Verwirrung insgesamt beruht auf diesen 2 Lösungen der Lehrerin... create or replace PROCEDURE I33UPDATE1_PRAEMIE AS BEGIN declare cursor cur_mitarbeiter is select * from i33mitarbeiter for update; MA_Daten i33mitarbeiter%ROWTYPE; BEGIN for MA_Daten in cur_mitarbeiter loop if MA_Daten.MA_Praemie > 9000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.15; -- Alternative: -- then update i33mitarbeiter set MA_Praemie = MA_praemie * 1.15 where current of cur_mitarbeiter elsif MA_Daten.MA_Praemie > 5000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.1; -- s.o. elsif MA_Daten.MA_Praemie > 1000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.05; -- s.o. end if; -- für alternative Lösung nicht: update i33mitarbeiter set MA_Praemie = MA_Daten.MA_Praemie where MA_Nr = MA_Daten.MA_Nr; end loop; end; commit; END I33UPDATE1_PRAEMIE; create or replace PROCEDURE I33UPDATE2_PRAEMIE AS BEGIN declare cursor cur_mitarbeiter is select * from i33mitarbeiter for update; MA_Daten i33mitarbeiter%ROWTYPE; BEGIN open cur_mitarbeiter; loop fetch cur_mitarbeiter into MA_Daten; if MA_Daten.MA_Praemie > 9000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.15; -- Alternative: -- then update i33mitarbeiter set MA_Praemie = MA_praemie * 1.15 where current of cur_mitarbeiter elsif MA_Daten.MA_Praemie > 5000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.1; -- s.o. elsif MA_Daten.MA_Praemie > 1000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.05; -- s.o. end if; -- für alternative Lösung nicht update i33mitarbeiter set MA_Praemie = MA_Daten.MA_Praemie where MA_Nr = MA_Daten.MA_Nr; exit when cur_mitarbeiter%NOTFOUND; end loop; close cur_mitarbeiter; end; commit; END I33UPDATE2_PRAEMIE;
  6. ja die prozedur habe ich nur 1x aufgerufen, doch was 8 mal passiert ist dies: das ist doch richtig so, dass für jedes element im cursor die Prämie geupdated wird, was ist daran falsch? laut meinem ergebnis müsste bei 8 tupel ja 8 durchläufe und dazu je 8 updates geschehen tuts doch aber nicht, sorry steh auf dem Schlauch FOR MA_Daten IN Mitarbeiter_Cursor -- Für jeden Datensatz MA_Daten der sich in dem Cursor(-Array) Mitarbeiter_Cursor befindet mache folgendes: LOOP -- ********************************************************************************************************** -- FETCH Mitarbeiter_Cursor INTO ma_daten; update Mitarbeiter set MA_Praemie = case when MA_Praemie > 9000 then MA_Praemie * 1.15 when MA_Praemie > 5000 then MA_Praemie * 1.10 when MA_Praemie > 1000 then MA_Praemie * 1.05 else MA_Praemie end; EXIT WHEN Mitarbeiter_Cursor%NOTFOUND; END LOOP; -- *****************************************************************************************************
  7. super man deine Antworten sind echt hilfreich! Syntax von Select: SELECT column_name(s) FROM table_name warum dann das? cursor cur_mitarbeiter is select * from i33mitarbeiter for update; warum das for update hinten? würde es nicht auch so ok sein?: cursor cur_mitarbeiter is select * from i33mitarbeiter ; warum brauche ich in einer Funktion kein declare(compiler meckert) aber in einer Prozedur schon? Wo ist da der Sinn?
  8. wie du gesagt hast keine fachliche logik in einen trigger.... kann ich dann ich einem trigger eine Funktion/Prozedur aufrufen, die dann z.B. Prämien updated oder wäre das doppelt gemoppelt? Was ist denn der praktische/alltäglich Anwendungsfall von Triggern, sprich Datensatz wird gelöscht/updated/inserted und dann?? was passiert dann hier meistens? Das habe ich noch vom oracle forum gefällt mir auch gut: update Mitarbeiter set MA_Praemie = case when MA_Praemie > 9000 then MA_Praemie * 1.15 when MA_Praemie > 5000 then MA_Praemie * 1.10 when MA_Praemie > 1000 then MA_Praemie * 1.05 else MA_Praemie end also open cursor nur mit der for ...in... cursor schleife OK! Kannst du erkennen warum ich hier für eine Prämie von 8000 (+10%) einen wert von 22390.. bekomme ??? create or replace PROCEDURE UPDATE_PRAEMIE AS BEGIN DECLARE CURSOR Mitarbeiter_Cursor is select * from Mitarbeiter for update; MA_Daten Mitarbeiter%ROWTYPE; -- Die Datensatzstruktur Spalten/Datentypen befinden sich nur im Datensatz MA_Daten BEGIN --OPEN Mitarbeiter_Cursor; FOR MA_Daten IN Mitarbeiter_Cursor -- Für jeden Datensatz MA_Daten der sich in dem Cursor(-Array) Mitarbeiter_Cursor befindet mache folgendes: LOOP -- ********************************************************************************************************** -- FETCH Mitarbeiter_Cursor INTO ma_daten; update Mitarbeiter set MA_Praemie = case when MA_Praemie > 9000 then MA_Praemie * 1.15 when MA_Praemie > 5000 then MA_Praemie * 1.10 when MA_Praemie > 1000 then MA_Praemie * 1.05 else MA_Praemie end; EXIT WHEN Mitarbeiter_Cursor%NOTFOUND; END LOOP; -- ***************************************************************************************************** --CLOSE Mitarbeiter_Cursor; END; COMMIT; END UPDATE_PRAEMIE;
  9. Wenn ich den cursor nicht öffne gehts sprich keine Fehlermeldung mehr doch die Prämien werden nicht geupdatet... ABER man muss doch einen Cursor öffnen das verstehe ich jetzt net... Weiterhin verwirrt mich und ich habe auf Wikipedia geschaut: MA_Daten Mitarbeiter_Cursor%ROWTYPE; Mitarbeiter_Cursor ist ein Cursor! Lehrerin schreibt in der Lösung die net funzt...: MA_Daten Mitarbeiter%ROWTYPE; Mitarbeiter ist eine Tabelle! Wie ist die Syntax jetzt richtig? MA_Daten <Tabellename>%ROWTYPE oder MA_Daten <Cursorname>%ROWTYPE ??
  10. ok ist jetzt nur noch 1 Fehler ^^ Frage: Das unten ist Muster-Code-Lösung... declare cursor cur_mitarbeiter is select * from i33mitarbeiter for update; MA_Daten i33mitarbeiter%ROWTYPE; müsste der hintere codeteil nicht so heißen: MA_Daten cur_mitarbeiter%ROWTYPE ?? grrrr... EDIT: OK habe den Fehler gefunden es fehlte ein BEGIN UNd habe die Prozedur ausgeführt: bekomme diese Meldung im Log: Connecting to the database MyConnection. ORA-06511: PL/SQL: Cursor wurde bereits geöffnet ORA-06512: in "PEL.UPDATE_PRAEMIE", Zeile 5 ORA-06512: in "PEL.UPDATE_PRAEMIE", Zeile 11 ORA-06512: in Zeile 2 Prozess beendet. Disconnecting from the database MyConnection. Beispiel error: ORA-06512 at string line string Cause: Backtrace message as the stack is unwound by unhandled exceptions. Action: Fix the problem causing the exception or write an exception handler for this condition. Or you may need to contact your application administrator or database administrator. Was kann das ein? Dazu muss ich sagen, dass manche Mitarbeiter eine Prämie von 0 haben. Spielt das ein Problem?
  11. ok danke dir so wollte ich das auch! CREATE OR REPLACE PROCEDURE UPDATE_PRAEMIE AS eine mehr philosophische Frage... 1.) Warum steht nach jedem Methodennamen "AS" ??? Ich meine was bringt das oder Sinn? Erschaffe oder ersetze eine Prozedur soundso als ?? als was ? 2.) Ich bekomme hierbei Fehlermeldungen 2 Stück doch was ist an der Syntax falsch? CREATE OR REPLACE PROCEDURE UPDATE_PRAEMIE AS declare cursor Mitarbeiter_Cursor is select * from Mitarbeiter for update; MA_Daten Mitarbeiter%ROWTYPE; -- Die Datensatzstruktur Spalten/Datentypen befinden sich nur im Datensatz MA_Daten BEGIN OPEN Mitarbeiter_Cursor; FOR MA_Daten IN Mitarbeiter_Cursor -- Für jeden Datensatz MA_Daten der sich in dem Cursor(-Array) Mitarbeiter_Cursor befindet mache folgendes: LOOP -- **************************** if MA_Daten.MA_Praemie > 9000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.15; -- 15 % mehr Praemie elsif MA_Daten.MA_Praemie > 5000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.1; -- 10 % mehr Praemie elsif MA_Daten.MA_Praemie > 1000 then MA_Daten.MA_Praemie:= MA_Daten.MA_Praemie * 1.05; -- 5 % mehr Praemie end if; END LOOP; -- *************************** CLOSE Mitarbeiter_Cursor; END UPDATE_PRAEMIE; Fehler: Error(4,3): PLS-00103: Fand das Symbol "DECLARE" als eines der folgenden erwartet wurde: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> form current cursor external language Das Symbol "begin" ersetzte "DECLARE", um fortzufahren. Error(22,54): PLS-00103: Fand das Symbol "end-of-file" als eines der folgenden erwartet wurde: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe Alternative else if Lösung: update Mitarbeiter set MA_Praemie = MA_praemie * 1.15 where current of Mitarbeiter_Cursor Ich habe gegoogelt verstehe das where current of <cursorname> trotzdem nicht... kann mir das jemand kurz erklären? grob übersetzt: update Mitarbeiter Tabelle und dessen Spalte MA_Praemie mit 15 % wo der Cursor aktuell draufzeigt ?? Ist das so richtig gedünkt?
  12. für so abwegig halte ich das gar net... zu meiner vorherigen Aufgabe: UPDATE rechnung SET r_datum = SYSDATE Where rechnungsnr =:old.rechnungsnr; es scheint zu funzen mit dem DAtum oder würdest du obigen code noch umschreiben/optimieren?
  13. verständlicher net doch ich denke ich habs zu 70% ^^ kapiert jetzt: betrag - (wert wird ausgerechnet mit altem art_code) ABER nur da wo die alte rechnungsnr gleich der rechnungsnr in der Rechnung Tabelle ist wird upgedatet.
  14. ne ich wills ja so wie du machen ;-) ok danke dir geht! Frage: So müsste es doch auch gehen oder? mir gefällt die Syntax besser... UPDATE rechnung SET betrag = betrag - (select :old.anzahl*preis from artikel where art_code=:old.art_code AND rechnungsnr=:old.rechnungsnr); Ausgabe: DELETE FROM "PEL"."RECHNUNG" WHERE ROWID = 'AAADZEAAEAAAADdAAB' AND ORA_ROWSCN = '452495' and ( "RECHNUNGSNR" is null or "RECHNUNGSNR" is not null ) also gehts net weißt du warum? ...zu NULL nicht möglich... hm... One error saving changes to table "PEL"."RECHNUNG": Row 2: ORA-01407: Aktualisieren von ("PEL"."BESTELLPOS"."RECHNUNGSNR") zu NULL nicht möglich
  15. hehe das hat halt unsere Lehrerin behauptet die eh kein plan hat... Ich poste mal die gesamte aufgabe damit klarer wird was ich will: Teillösung in worten... : der temporäre Betrag ist = Rechnung.betrag * Bestellpos.anzahl Wo ART_Code = alter ART_Code ist ? danach: neuer Rechnung.betrag = alter Rechnung.betrag - temporärer Betrag In Worten und von der Logik dürfts hinkommen doch wie ich das in pl/sql ausdrücke komme ich net weiter, da die Unterlagen die ich hier habe unvollständig und verwirrend sind und so fühle ich mich auch... Frage: Wie greife ich auf das "old" einer andere Tabelle als Bestellpos zu ? Kennst du vielleicht einfach gehaltene trigger beispiele zum durchlesen etc?
  16. CREATE OR REPLACE TRIGGER TRIGGER1 After Insert or Delete ON BESTELLPOS FOR EACH ROW Declare my_anzahl number; BEGIN SELECT :old.anzahl INTO my_anzahl FROM bestellpos; dbms_output.put_line('anzahl: '||my_anzahl); END; Fehler: DELETE FROM "PEL"."BESTELLPOS" WHERE ROWID = 'AAADZIAAEAAAAD9AAD' AND ORA_ROWSCN = '448030' and ( "POSNR" is null or "POSNR" is not null ) One error saving changes to table "PEL"."BESTELLPOS": Row 4: ORA-04091: Tabelle PEL.BESTELLPOS wird gerade geändert, Trigger/Funktion sieht dies möglicherweise nicht ORA-06512: in "PEL.TRIGGER1", Zeile 6 ORA-04088: Fehler bei der Ausführung von Trigger 'PEL.TRIGGER1' Ich weiß das ist ein trigger Problem wegen mutating table bla und sollte mit new und old gelöst werden doch ich habe ja oben :old.anzahl ??
  17. super danke dir ich suchte immer nach output nicht dbms_output kannst du mir sagen wie ich innerhalb dieses trigger nicht auf die tabelle Bestellpos sondern auf eine andere Tabelle bzw. deren Spalte Betrag in der DB zugreifen kann nennen wir sie: Rechnung z.B. Declare my_rechnung Rechnung%ROWTYPE Begin my_rechnung.Betrag (würde das so stimmen) ?? obwohl ich nicht: REFERENCING OLD AS old FOR EACH ROW ganz oben angab, funkioniert der Trigger vom 1.post, woher kommt das?
  18. Edit: sorry für neuen post, konnte nicht editieren? 3.) Wie kann ich werte aus Spalten auslesen dessen Zeile gelöscht wurde, ich aber nicht weiß welche Zeile gelöscht wurde? Dies steht ja erst zur Laufzeit fest...
  19. Hallo, 1.)Ich habe z.B. diesen Trigger: anzahl ist eine Tabellenspalte. BestellPos ist die TAbelle Aufgabenstellen: Nachdem Tupel gelöscht wird soll von diesem Tupel in der Spalte anzahl der Wert in die variable varanzahl geschrieben werden. Ist der code richtig so? bekomme keinen compile-error aber auch keine Ausgabe siehe unten... CREATE OR REPLACE TRIGGER TRIGGER1 After DELETE ON BESTELLPOS declare varanzahl number; BEGIN dbms_output.enable; select anzahl into varAnzahl from bestellpos; dbms_output.put_line('anzahl: '|| varanzahl); END; 2.)Ich suche das Ausgabefenster in dem sql developer oracle tool wo die Ausgabe "varanzahl" stehen müsste finde aber nichts? Handbuch, HIlfe , google halfen nicht weiter...

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...