2009-04-01 39 views
10

, ben aşağıdaki komutu çalıştırıyorum:Oracle neden doğru bir parantezi kaçırdığımı düşünüyor? Oracle 10i ise

ALTER TABLE jnrvwchnglst ADD 
    (jnrvwchnglst_userid NUMBER(10) NOT NULL DEFAULT 1) 

Evet jnrvwchnglst varolan tablo ve hiçbir jnrvwchnglst_userid varolan sütun değil.

Oracle hata iletisi:

ORA-00907: missing right parenthesis 

bu sorgu nesi var ve neden Oracle bir parantez eksik düşünüyor?

+0

Bu benim mesleğim değil, ama Dünya'da ne tür bir isimle masaya tutuyorsunuz? Junior Volkswagens Değişim Listesi? :) – Quassnoi

+1

@Quassnoi - ORM sistemi jetonları jetonlardan kaldırır çünkü Oracle (mantıksız) 30-char maksimum değerine sahiptir. Yani gerçekten bu "JoinReviewChangelist." –

cevap

19
ALTER TABLE jnrvwchnglst ADD 
    (jnrvwchnglst_userid NUMBER(10) DEFAULT 1 NOT NULL) 
+0

Teşekkürler! Bu çalışmaları doğruladım. –

0

Bu sorunu daha önce bir sütun ekleyemediğinizden ve aynı ifadedeki varsayılan/kısıtlamaları ayarlayamadım. 'Eksik doğru parantez' kırmızı-ringadır. Oracle, parantez ile ilgisi olmayan durumlar için bu hatayı kullanmayı çok seviyor (Benim tahminim onların ayrıştırma mantığının 00907'ye düşmesidir).

deneyin

ALTER TABLE jnrvwchnglst ADD (nrvwchnglst_userid NUMBER(10)); 
ALTER TABLE jnrvwchnglst ALTER (nrvwchnglst_userid SET DEFAULT 1); 
UPDATE jnrvwchnglst SET nrvwchnglst_userid = 1 WHERE nrvwchnglst_userid IS NULL; 
ALTER TABLE jnrvwchnglst ALTER (nrvwchnglst_userid SET NOT NULL); 
+1

Darn it =) Ya da sadece bir işlem sorunu sırası olabilir. bah =) – JasonRShaver

+0

Bu, örn. TIMESTAMP. Ancak Quassnoi'nin kodu işe yarıyor. Teşekkürler! –

2

"(NOT) NULL" geçen deyim olmalıdır mevcut, bu yüzden Oracle görünce zaman sözdizimsel "ALTER" - ve bir sonraki Char ki (senin "DEFAULT" stmt-) beklenen sonlanmadı ")", hatayı attı.

+0

Umarım bu daha fazla açıklar NEDEN, diğer benzer senaryoları çözmeye yardımcı olmak için hatayı aldım. – user1172173