2017-02-07 9 views
0

Я пытаюсь показать запись после вставки ее на стол. Однако мой первичный ключ является подстрока с последовательностью, так что я не могу найти способ, чтобы сохранить это значение ... это мой кодpl/sql oracle как проверить или как сохранить текущее значение последовательности

SET SERVEROUTPUT ON 


ACCEPT MARQUE PROMPT "Entrez la marque de la moto " 
ACCEPT ANNEE PROMPT "Entrez l annee de la moto: " 
ACCEPT PRIX PROMPT "Entrez le prix de la moto: " 

DECLARE 


myMarque VARCHAR2(50):='&MARQUE'; 
myAnnee VARCHAR2(6):='&ANNEE'; 
myPrix NUMBER(6,2):=&PRIX; 
lecode VARCHAR2(12); 

BEGIN 

    IF myAnnee = 2013 THEN 

     INSERT INTO MOTO (CODE, MARQUE, ANNEE, PRIX) VALUES (UPPER(SUBSTR(myMarque, 1,3)||MASEQ.nextval), myMarque, myAnnee, myPrix); 
     COMMIT; 

    ELSIF myAnnee = 2014 THEN 

     INSERT INTO MOTO (CODE, MARQUE, ANNEE, PRIX) VALUES (UPPER(SUBSTR(myMarque, 1,3)||MASEQ.nextval), myMarque, myAnnee, myPrix); 
     COMMIT; 

    ELSIF myAnnee = 2015 THEN 

     INSERT INTO MOTO (CODE, MARQUE, ANNEE, PRIX) VALUES (UPPER(SUBSTR(myMarque, 1,3)||MASEQ.nextval), myMarque, myAnnee, myPrix); 
     COMMIT; 

    ELSIF myAnnee = 2016 THEN 

     INSERT INTO MOTO (CODE, MARQUE, ANNEE, PRIX) VALUES (UPPER(SUBSTR(myMarque, 1,3)||MASEQ.nextval), myMarque, myAnnee, myPrix); 
     COMMIT; 
    ELSE 
     DBMS_OUTPUT.PUT_LINE('Annee invalide SVP VERIFIEZ'); 
    END IF; 



END; 
/

Короче, что мне нужно это, чтобы показать запись после того, как совершить, любые идеи ? Я попытался сохранить значение в переменной lecode, но он не работал.

+0

Возможно, вам нужно вставить последний идентификатор http://stackoverflow.com/q/3131064/2298301? –

ответ

3

Используйте предложение RETURNING на ваших INSERTS и т.д .:

DECLARE 
    strLast_code MOTO.CODE%TYPE; 
BEGIN 
    INSERT INTO MOTO 
    (CODE, MARQUE, ANNEE, PRIX) 
    VALUES 
    (UPPER(SUBSTR(myMarque, 1,3)||MASEQ.nextval), myMarque, myAnnee, myPrix) 
    RETURNING CODE INTO strLast_code; 
END; 
+0

спасибо, что это хорошо работает. я не знал, что вы могли бы это сделать –

0

sequence_name.currval даст текущее значение последовательности.

так же, как sequence_name.nextval вы можете получить sequence_name.currval

0

Другим решением было бы выбрать непосредственно из метаданных базы данных:

select last_number from all_sequences where sequence_name='MASEQ';