AUTO_INCREMENT στην SQL*plus της ORACLE

Συζητήσεις για την Oracle, Oracle Forms και Oracle Reports

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
ZauZ
Δημοσιεύσεις: 408
Εγγραφή: 12 Οκτ 2003 23:29
Τοποθεσία: Ηράκλειο
Επικοινωνία:

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από ZauZ » 26 Μάιος 2005 16:23

Mages please doste ta fota sas , giati prepei na paradoso ergasia kai me keei to thema. Mallon einai kati entelos aplo , alla ayti ti stigmh distixos de boro na to vro , oso kai an exo psaksei to Manual tis SQL plus.

Loipon stin MySQL kanoyme ena pedio p.x ID to opio einai NOT NULL , kai primary key kai sti sinexeia to vazoume os AUTO_INCREMENT diladi exo ton kodika :

CREATE TABLE `table_zauz` (
`id_zauz` INT NOT NULL AUTO_INCREMENT ,
`id_name` TEXT NOT NULL ,
PRIMARY KEY ( `id_zauz` )
);

pou dimiourgeit o table sti MySQL.

Pos tha kano stin SQL PLUS to id_zauz na ginete AUTO_INCREMENT opos parapano ??? To leo giati aytos o kodikas de leitoyrgei opos einai stin SQL PLUS :(

Please opios borei na voithisei ! :)

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27620
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από cordis » 26 Μάιος 2005 16:42

Γεια σου μόρτη, όταν λες SQL plus τι εννοείς;
Αν λες για την SQL*Plus της ORACLE δεν υπάρχει κάτι αντίστοιχο... θα πρέπει να φτιάξεις ένα sequence και στο pre_insert trigger του table να βάζεις τιμή στην κολόνα από το sequence...
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
ZauZ
Δημοσιεύσεις: 408
Εγγραφή: 12 Οκτ 2003 23:29
Τοποθεσία: Ηράκλειο
Επικοινωνία:

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από ZauZ » 26 Μάιος 2005 16:46

Sclave eisai asteri !!!! Nai akrivos ayto ithela :)
Enoousa tin SQL*Plus tis Oracle ! Eixa vrei ayto poy les ,alla den eixame sovares sigrousis gia to pos borei na ginei !!

Thanks !!!!

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27620
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από cordis » 26 Μάιος 2005 17:01

Και επειδή είσαι καλό παιδί.. πάρε κι ένα κώδικα για παράδειγμα... ;)

-- Create sequence

Κώδικας: Επιλογή όλων

create sequence SEQ_MY_TABLE
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
-- Create table

Κώδικας: Επιλογή όλων

create table MY_TABLE
(
  MY_ID    NUMBER(14) not null,
  MY_NAME  VARCHAR2(35) not null)
tablespace USERS
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints

Κώδικας: Επιλογή όλων

alter table MY_TABLE
  add constraint PK_MY_TABLE primary key (MY_ID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- create before insert trigger

Κώδικας: Επιλογή όλων

create or replace trigger TR_BI_MY_TABLE BEFORE INSERT
ON MY_TABLE FOR EACH ROW
BEGIN
    --  COLUMN "MY_ID" USES SEQUENCE SEQ_MY_TABLE
    SELECT SEQ_MY_TABLE.NEXTVAL INTO :NEW.MY_ID FROM DUAL;

END;

Κώδικας: Επιλογή όλων

INSERT INTO MY_TABLE (MY_ID, MY_NAME)
VALUES (null, 'JOHN');

Κώδικας: Επιλογή όλων

SELECT * FROM MY_TABLE;
Output:
1 JOHN
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από skeftomilos » 27 Μάιος 2005 04:56

Άψογος! Καταπληκτικό το παράδειγμα! :D

Πάντως αυτή η SQL*Plus μοιάζει να κάνει τα εύκολα δύσκολα, αλλά θα υπάρχει λόγος φαντάζομαι.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

random
Δημοσιεύσεις: 12
Εγγραφή: 10 Ιαν 2004 12:14

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από random » 27 Μάιος 2005 21:31

skeftomilos, όντως η sql+ ειναι ενα αίσχος, ειδικα αν σκεφτεις ποσες χιλιαδες κοστίζει η oracle.

Αν θελεις να κανεις κατι σοβαροτερο απο select from dual, και παιζεις σε windows (το development, άσχετα αν η βαση ειναι σε win/unix), κατέβασε το toad απο www.quest.com
οι commercial versions ειναι φοβερά εργαλεία για προγραμματιστες και admin.

υπάρχει και δωρεάν έκδοση, με λιγοτερες δυνατότητες, αλλα για αρχάριο ειναι υπεραρκετές
http://www.toadsoft.com/lic_agree.html

(το ιδιο εργαλειο υπάρχει σε beta για mysql, ms-sql )

-----------------------------------------------------------------


Ως προς τα oracle sequences, υπάρχει μια βασική διαφορά απο αλλα παρόμοια features σε αλλες db (autonumber of Access, autoincrement of Mysql)

ο μετρητής αυξάνει ακριβως την στιγμη που εκτελείς το
SELECT SEQ_MY_TABLE.NEXTVAL FROM DUAL;

και δεν γυρίζει πίσω, ανεξάρτητα αν θα πετύχει το insert που ακολουθεί.
επισης αυξάνει ανεξαρτητα απο commit/rollback, και για ολους τους χρηστες (schema) της db.
Ετσι εξασφαλιζεται οτι αν 2 χρηστες ζητησουν NEXTVAL την ιδια στιγμή, δεν θα παρουν ποτέ το ίδιο.
αλλα αν τα χρησιμοποιεις για table PK δημιουργούνται κενά (οταν "χτυπισει" το insert λόγω σφάλματος, ή αν εκτελεσεις το select nextval απο sql+ ).

με SELECT SEQ_MY_TABLE.CURRVAL FROM DUAL; βλέπεις που εχει σταματήσει ο μετρητής.

Για αλλαγες στο sequence, υπάρχει το ALTER SEQUENCE...

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από skeftomilos » 29 Μάιος 2005 07:38

Πολύ χρήσιμες οι πληροφορίες! :D
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27620
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

AUTO_INCREMENT στην SQL*plus της ORACLE

Δημοσίευση από cordis » 31 Μάιος 2005 18:14

Τα auto numbering των SyBase και MS SQL Server είναι άχρηστα σε μεγάλες και πολύπλοκες εγκαταστάσεις που κάθε εγγραφή που μπαίνει μέσα στην βάση επηρεάζει άλλες 3-4 σε άλλους πίνακες και όταν θέλει ο developer να έχει τον πλήρη έλεγχο του transaction.

Σε τέτοιες περιπτώσεις στις προαναφερόμενες βάσεις δεδομένων είναι αναγκασμένος να καταφύγει σε hand made λύσεις με user functions και stored procedures και με βοηθητικούς πίνακες που κρατάνε την αριθμοδότηση ενώ η ORACLE (και όχι η SQL*plus) το έχει αυτό ενσωματωμένο στα sequence.
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Απάντηση

Επιστροφή στο “Oracle”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες