Update SQL’inde “Cannot perform this operation on field” Hatası

MapInfo’nun MapBasic penceresinde

update mahalle set ilce_kodu = 5 where mahalle_kodu = 1

gibi bir SQL çalıştırıldığında

Cannot perform this operation on field mahalle_kodu.

hatası neden alınıyor?

MapInfo SQL inin diğer ilişkisel veritabanlarına göre bazı kısıtları vardır. Bunlardan biri  update işleminde geçerlidir. MapInfo SQL inde update işlemini tek SQL ile yapmanın tek yolu where kısmında

rowid = <değer>

kullanmaktır. Mesela aşağıdaki SQL geçerlidir:

update mahalle set ilce_kodu = 5 where rowid = 10

Bu SQL 10. kaydın ilce_kodu değerini 5 olarak günceller.

Ama mesela

update mahalle set ilce_kodu = 5 where rowid <= 10

şeklinde bir SQL geçerli değildir. Çünkü update işleminde rowid şartında sadece 1 kayıt olabilir. Bu SQL de olduğu gibi birden fazla kayıt (10 tane) update edilmeye çalışılırsa aşağıdaki hata mesajı alınır:

Alınan hata: Found [<] while searching for [=].

Görüldüğü gibi tek kayıt güncellemek istediğimizde bunu rowid kolonu üzerinden yapabiliyoruz. Fakat pratikte bu her zaman işimizi görmeyebilir. Üstelik aynı anda birden fazla kaydı da güncelleyemeyiz.

Bu problemin çözümü önce güncellenecek kayıtları seçmek ve daha sonra seçime update işlemi uygulamaktır. Örneğin mahalle_kodu 10 veya 10 dan küçük mahallelerin ilce_kodu değerlerini 5 yapmak için aşağıdaki gibi ard arda iki SQL çalıştırmamız gerekir:

select * from mahalle where mahalle_kodu <= 10
update selection set ilce_kodu = 5

Veya seçime bir alias vererek de yapabiliriz:

select * from mahalle where mahalle_kodu <= 10 into guncellenecekler
update guncellenecekler set ilce_kodu = 5
  1. No comments yet.
  1. No trackbacks yet.

Leave a comment