2010-02-26 16 views
18

'daki bir sonraki dizi değerini seçmek için "doğru" yolun, bir sonraki değerimi seçmenin doğru yolu olan TEST_SEQ adı verilen bir dizilim var mı? Bu işe yaramazsa:HSQLDB 2.0.0-rc8

select next value for TEST_SEQ

muhtemelen bir "DAN" maddesini bekler çünkü. hazırda içinde HSQLDialect.getSequenceNextValString() bakarak ben bu bkz: 2.0.0-rc8 için çalışmaz

select next value for TEST_SEQ from dual_TEST_SEQ

(i: benim durumumda böyle bir şey neden olacaktır

"select next value for " + sequenceName + " from dual_" + sequenceName

sadece bu ön-2,0 sürümlerinde çalışır varsayalım - sığınak doğrulanmadı) Bu (oracle tarzı çalışacak durumda ÇİFT denilen 1 satırda ile basit tablo,) oluşturmayı içeren bir solüsyon rastladım:

select next value for TEST_SEQ from DUAL

fakat hsqldb bu tabloyla birlikte kutudan çıkmıyor ve "ilk önyükleme" işleminde böyle bir tablo oluşturmak için hazırda bekletme konusunda emin değilim.

Kutunun dışında bir sıra için bir sonraki değeri elde etmenin bir yolu olması gerektiğini düşünüyorum ve sadece onu özlüyorum. herhangi bir fikir?

cevap

23

TEST_SEQ adında bir sıram var, bir sonraki değeri seçmenin doğru yolu nedir?

documentation diyor iken:

bir sekans için bir sonraki değer SELECT dahil edilebilir

, aşağıdaki örnekte olduğu gibi INSERT ve UPDATE ifadeleri:

SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>; 

" Doğru "yol (çünkü daha basit, çünkü HSQLDB'nin sahip olmadığı bir dilsiz DUAL tablosu gibi bir tablo içermiyor):

Bu1.7.2 çıktı ve bu onun aslında Hazırda hazırda Çekirdek "yeni" versiyonlarının HSQLDialect yılında dizileri nasıl işleyeceğini ( HHH-2839 bakınız).

Ve gerçekten, bu şimdiye gördüklerinizi olduğu HSQLDialecthibernate-core-3.3.0.SP1.jar ait:

public String getSequenceNextValString(String sequenceName) { 
    return "call next value for " + sequenceName; 
} 

Yani benim tavsiyem: hazırda daha yeni bir sürüme yükseltme, çok büyük olasılıkla Hazırda Core 3.2.5 veya önceki kullanıyorsunuz .

+0

@ hatchetman82 Rica ederim. BTW: İyi bir cevabı kabul etmenin yaygın yolu onu geri almak;) –

+1

@ hatchetman82 Sorun değil. Sadece bir cevabı iyi bir cevap olarak kabul ederseniz (ki bunu kabul ederseniz çok muhtemeldir), o zaman IMO'yu kabul etmek mantıklıdır, işte budur. –

+0

Merhaba, bu ilişkili olabilir. Apache's DdlUtils'i kullanarak, başlangıçta bu xml'yi kullanarak başlangıçta veritabanı oluşturmak için kullanıyorum: ''. Nesneleri eklerken yeni bir anahtar değer elde etmek için ne yapmalıyım? Ben de iBatis kullanıyorum. –

2

Eğer

SET DATABASE SQL SYNTAX PGS

o zaman da http://hsqldb.org/doc/guide/dbproperties-chapt.html

select nextval('sequence_name') gibi standart Postgres sözdizimi kullanarak sorgulayabilir (PGS Postgres için ayakta) çalıştırın dikkat Anlaşılan eğer bir kez bu tipik HSQLDB yaparsanız call NEXT VALUE FOR SEQUENCE_NAME gibi dizi artık çalışmayacaktır.

İlgili konular