Je suis nouveau avec PL/SQL et j'ai besoin dernier ID inséré dans le tableau de données après instruction d'insertion.SELECT IDENT_CURRENT (« tablename ») dans Oracle
Comme sur MS SQL SELECT IDENT_CURRENT ('tablename')
Je suis nouveau avec PL/SQL et j'ai besoin dernier ID inséré dans le tableau de données après instruction d'insertion.SELECT IDENT_CURRENT (« tablename ») dans Oracle
Comme sur MS SQL SELECT IDENT_CURRENT ('tablename')
Il n'y a pas intégré dans les champs de autoincrement dans Oracle, vous le créez des séquences en utilisant:
CREATE TABLE some_tab(
rec_id INTEGER,
some_data VARCHAR2(300)
);
CREATE SEQUENCE some_tab_seq;
CREATE OR REPLACE TRIGGER trig_BI
BEFORE INSERT
ON some_tab
FOR EACH ROW
BEGIN
IF :NEW.rec_id IS NULL
THEN
:NEW.rec_id := some_tab_seq.NEXTVAL ;
END IF;
END;
Puis, en PL/SQL, vous pouvez chercher la valeur actuelle de la séquence par
your_var := some_tab_seq.CURRVAL
aussi en version plus ancienne d'Oracle vous ne pouvez pas lire directement NEXTVAL/i CURRVAL Nto var et doivent faire:
SELECT some_tab_seq.CURRVAL
INTO your_var
FROM DUAL;
CURRVAL ne fonctionne que si nous avons précédemment sélectionné un NEXTVAL dans la séquence de la session. – APC
faute de frappe: rec_id <> id_rec –
Vous pouvez également regarder sélectionnez sequence_name, LAST_NUMBER de user_sequences, mais la mise en cache et la concurrence (en particulier sur le RAC) en font inexact. –
Vous pouvez utiliser la clause RETURNING:
insert into mytable(x,y) values (1,2) returning id into v_id;
Cela fonctionne bien quand il y a un déclencheur qui remplit une colonne d'identité, de sorte que vous n'avez pas besoin " sélectionnez seq.currval à partir de dual "chose.
Oracle ne met pas en œuvre des colonnes d'identité. Il utilise des séquences qui génèrent des nombres uniques qui peuvent être utilisés comme valeurs PK dans n'importe quelle table.
Ainsi, l'expression IDENT_CURRENT ('my_table') est mieux traduite en MySequence.CURRVAL de la séquence d'alimentation PK de la table.
En règle générale, vous souhaitez récupérer la valeur PK insérée dans MS SQL par:
INSERT INTO MyTable ...
SELECT @PK = SCOPE_IDENTITY()
Dans Oracle, utilisez l'INSERT RETOURNER clause pour obtenir des fonctionnalités similaires
DECLARE PK ...;
INSERT INTO MyTable
RETURNING TableID INTO PK;
Dans SQL Server, si vous vous voulez l'ID d'une ligne que vous venez d'insérer, vous devez utiliser 'scope_identity'. 'ident_current' renvoie la dernière valeur d'identité sur toutes les sessions et toutes les étendues. Vous pouvez donc obtenir une valeur pour une insertion dans une autre session. http://msdn.microsoft.com/en-us/library/ms175098.aspx –