Deutsches Application Express Forum (ApEx) -- Installation , Engine / SQL , Anwendungen
HTMLDB Engine :  Oracle Apex The fastest message board... ever.
Alles in HTMLDB, Applikationen, Berichte, SQL ... 
Re: Fehler bei neuen Werten
geschrieben von: christian_goto (---.dip0.t-ipconnect.de)
Datum:

würde ja gerne helfen aber das mit deinen ID's verstehe ich nicht.
also im wiki steht zu ID,es wäre irgendwas zur identifikation.ich nehme ID's auch zur identifikation,und zwar von datensätzen.die ID ist bei mir auch immer primary key. und unique,ganz wichtig.wäre die nicht eindeutig,wäre der datensatz nicht eindeutig ,ganz übel.
das ist auch genau der grund,warum ich niemals IDs von hand vergebe.da kann man sich schnell vertun.wenn ich beispielsweise 4000 datensätze habe kann ich ja nicht 4000 IDs durchzählen und schauen,ob ich die schon habe.
ich mache das vielmehr so,dass ich mit dem plsql oder sql developer einen trigger anlege in der datenbank,speziell für eine tabelle.der hat mit apex überhaupt nichts zu tun!
so ein trigger könnte beispielsweise so ausehen:
----------------------
create or replace trigger MITARBEITER_BIU_TRG before insert OR UPDATE on "MITARBEITER" for each row
begin
if inserting then
select ID_SEQ.nextval,SYSTIMESTAMP(6) into :NEW."ID",:NEW."INS_TS" from dual;
:NEW."TS" := :NEW."INS_TS";
else
select SYSTIMESTAMP(6) into :NEW."TS" from dual;
:NEW."INS_TS" := :OLD."INS_TS";
:NEW."ID" := :OLD."ID";
end if; end;
----------------------------
interessant ist eigentlich nur die stelle: before insert OR UPDATE...
insert meint neuer datensatz,update meint alten datensatz ändern.

aussdem hab ich noch eine passende sequence angelegt(ID_SEQ).die ist dafür da hochzuzählen.

man muss sich das so vorstellen:
über apex will man beispielsweise einen datensatz anlegen.in dem moment des anlegens läuft im hintergrund auf der datenbank der trigger an (if inserting then...) und will einen neuen wert in die spalte ID schreiben.um dafür den richtigen wert zu finden bemüht der trigger die sequence.

wenn apex gar nicht läuft und ich mal mit dem sqldeveloper mal händisch einen datensatz anlegen will lass ich die spalte ID einfach leer und der trigger und die sequence funktionieren auch OHNE apex und legen die ID AUTOMATISCH an.

in deinem fall scheint der trigger zu fehlen,auch die sequence.und ganz übel ist dass bei deinen datensätzen die ID (null) ist. ausserdem wäre auch die frage,warum man eine ID überhaupt ändern oder sogar noch mit Buchstaben kombinieren will.
damit wäre der eigentliche sinn einer ID komplett verloren,so wie ich das verstehe.

daher habe ich in allen tabellen die ID als primary key.und primary key darf sowieso nicht (null)sein. wäre die ID NULL ist der ganze datensatz für mich wertlos.
weil meine berichtabfrage beispielsweise so ausieht:

select NAME from MITARBEITER where ID=12345

wenn die ID leer ist wird natürlich kein name gefunden und der bericht wirft nur ein "keine Daten gefunden" zurück.

des weiteren scheinst du über die ID auch was sortieren zu wollen,weiss der wind warum.vieleicht fehlt dir auch noch die ein oder andere spalte.

das mit den IDs ist hier natürlich nur vereinfacht.viele arbeiten mit SYS_GUID

zitat:"Die Funktion SYS_GUID generiert eine global eindeutige ID, die als RAW(16) zurückgegeben wird."...
aus
[sql-plsql-de.blogspot.com]

oracle zu dem thema SYS_GUID:
[download.oracle.com]

die IDs sehen dann beispielsweise so aus:
2,30287864714681E38



der code für eine auswahliste um einen bericht zu filtern würde dann evt. so aussehen:

select NAME display_value, ID return_value
from MITARBEITER
order by name

in der liste sieht man dann später nur die namen(display_value) und kann auch einen auswählen.zurückgegeben wir jedoch die ID(return_value)

natürlich könnte man auch sowas schreiben:

select ID display_value, ID return_value
from MITARBEITER

dann würde man in der auswahliste hinterher eines solcher monster: 2,30287864714681E38 auswählen können,was aber nicht wirklich jemanden weiterbringt

u.u. willst du aber einem datensatz einen wert zuweisen in irgendeiner spalte,nur die ID spalte im eigentlichen sinne würde ich dafür nicht nehmen.

fazit: mru ist fehlgeschlagen,weil du der IDart keinen wert mitgegeben hast.entweder von hand reinschreiben jedesmal oder per trigger automatisch erledigen lassen.

gruss






























Thema Neugierige geschrieben von geschrieben
Fehler bei neuen Werten 2500 Droggelbecher
Re: Fehler bei neuen Werten 1998 christian_goto


In diesem Forum dürfen nur registrierte Benutzer schreiben.
This forum powered by Phorum.