Oracle
 sql >> база данни >  >> RDS >> Oracle

Използване на последователност на Oracle за вмъкване на регистрационен номер в 2 таблици от jdbc?

Като цяло, избирането на MAX(log_id) няма да ви даде същата стойност като logid_seq.nextval предоставени. Ако приемем, че това е система с много потребители, някой друг потребител може да е вмъкнал друг ред с по-голям log_id стойност от реда, който току-що сте вмъкнали, преди вашата заявка да бъде изпълнена.

Ако приемем, че и двете INSERT операторите се изпълняват в една и съща сесия, най-простият вариант вероятно е да използвате logid_seq.currval във втория INSERT изявление. currval ще върне последната стойност на последователността, която е върната към текущата сесия, така че винаги ще връща същата стойност, която е генерирана от nextval повикване в първия израз.

INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG) 
  VALUES( logid_seq.currval, ?, ? )

Като алтернатива можете да използвате RETURNING клауза в първия ви израз, за ​​да извлечете стойността на последователността в локална променлива и да я използвате във втория INSERT изявление. Но това вероятно е повече работа от простото използване на currval .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CLOB стойност при изход/връщане от plsql (посочен невалиден LOB локатор:ORA-22275)

  2. Oracle 11g Отчети и свойства на формуляри Масови актуализации

  3. Свързване на таблици с LIKE (SQL)

  4. Грешка в буфера на символния низ е твърде малък в съхранената процедура на Oracle

  5. sql грешка при изпълнение на скрипт. опитайте да изтриете хранилището, преди да създадете хранилище