13
Mai
2005

Oracle - Schnell FAQs

1. Ora oder OCI?
2. Ich habe Oracle-Support mit --with-oci8 in PHP eincompiliert, nun startet der Apache nicht mehr.
3. Der Webserver verbraucht jetzt viel mehr Speicher als ohne Oracle, mache ich was falsch?
4. Umlaute, die in die Datenbank eingetragen wurden, werden nicht korrekt dargestellt.
5. Gibt es auto_increment unter Oracle?
6. Ich verwende das obige Beispiel. Wie kann ich nun mysql_insert_id() emulieren?
7. Wie selektiere ich nur bestimmte Zeilen (LIMIT unter MySQL)?
8. Wie speichere ich Datensätze mit mehr als 2000 Zeichen ab?
9. Wie bearbeite ich LOBs mit PHP?
10. Wie nenne ich Spalten um?
11. Wie kann ich SQL Skriptdateien in Oracle ausführen?
12. Welche freien Tools gibts für Oracle?
13. Ich bekomme ein Oracle Fehlernummer ORA-XXXXX, wo stehen die Fehlercodes?
14. Welche Bücher zu Oracle sind empfehlenswert?

Org Link

Gibt es auto_increment unter Oracle?


Nein. Jedoch kann auto_increment via Trigger emuliert werden.

Wer von MySQL nach Oracle portiert vermisst wohl als erstes das auto_increment Feature von MySQL Spalten. Dieses läßt sich jedoch unter der Nutzung von Sequences und Triggern bei Oracle erstellen:
rem Wir brauchen zum einen einen Zähler,
rem der hochzählt (dazu die Sequence)

create sequence zaehler_der_tabelle_xy
       increment by 1 start with 1 cache 2;

rem Jetzt die eigentliche Tabelle

CREATE TABLE xy (
        id_xy NUMBER(20,0) PRIMARY KEY,
        bla_xy VARCHAR2(4000)
);

rem Nun ist noch ein Trigger vonnöten, der
rem die neue Id von der Sequence übergeben
rem bekommt und vor dem insert diesen Wert
rem auf die entsprechende Spalte überträgt:

CREATE TRIGGER trigger_primary_key BEFORE INSERT ON xy
       REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
Begin
select zaehler_der_tabelle_xy.nextval into :NEW.id_xy from DUAL;
End;
/
Bei jedem insert wird nun der Wert von id_xy automatisch hochgesetzt. Zu beachten ist, dass es besser ist, für jede Tabelle eine eigene Sequence zu erstellen, denn sonst müssen sich alle Tabellen die fortlaufenden Zahlen teilen.

Alternativ kann auch ohne Trigger gearbeitet werden und die nächste Zahl per Hand selektiert werden:
$stmt=OCIParse($conn, "SELECT zaehler_der_tabelle_xy.nextval FROM DUAL");
OCIExecute($stmt);
OCIFetch($stmt);
$nextid=OCIResult($stmt, "NEXTVAL");
Der aktuellen Wert der Sequenz zaehler_der_tabelle_xy kann durch Verwendung von currval (abgeleitet von Current Value) ermittelt werden. Mit dem folgenden Codestück ist es möglich, den zuletzt eingefügten Wert abzufragen:
// INSERT in die Tabelle

$stmt = OCIParse($conn, "INSERT INTO xy (BLA_XY) VALUES 'BLA'");
OCIExecute($stmt, OCI_DEFAULT);

//Abfrage der Sequence
$stmt = OCIParse($conn,"SELECT zaehler_der_tabelle_xy.currval
                 AS CV FROM DUAL");
OCIExecute($stmt, OCI_DEFAULT);
OCIFetch($stmt);
$last_id=OCIResult($stmt, "CV");
OCICommit($conn);
Achtung: Das selektieren des currval funktioniert nur innerhalb derselben Transaktion (daher auch beim OCI_DEFAULT). Will man den aktuellen höchsten ID-Wert ermitteln, ist es besser, unter Verwendung der SQL-Funktion MAX() den höchsten Wert direkt aus der Tabelle abzufragen.


Org. Link
logo

vireas

Suche

 

Aktuelle Beiträge

C i s c o  V...
can get always the latest version of C i s c o  V...
vireas - 12. Jul, 11:07
WM5: Custom text on today...
You can set a small custom text message on the bottom...
vireas - 15. Mai, 21:44
WM5: Increase Performance...
Boost Windows Mobile 5 performance up to 20 percent [HKLM\System\Stor ageManager\FATFS]...
vireas - 15. Mai, 21:42
WM5: Speed Up your Pocket...
This tweak might help improving visual performance...
vireas - 15. Mai, 21:41
Windows Ordner
-Es ist nicht möglich unter Windows einen Ordner anzulegen...
vireas - 22. Feb, 13:37

Archiv

Mai 2005
Mo
Di
Mi
Do
Fr
Sa
So
 
 
 
 
 
 
 1 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
11
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
 
 
 
 

Status

Online seit 7702 Tagen
Zuletzt aktualisiert: 12. Jul, 11:07
vireas-plug

KnowHow
KnowHow - Mobiles
Tools
Profil
Abmelden
Weblog abonnieren