Merhabalar Aziz Bey,
Siz select sp_test('ali verli',14); şeklinde sorgu gönderdiğinizde aslında sp_test(character varying, integer) şeklinde bir fonksiyon arıyor. Yani siz 14 yazdığınızda bu smallint değil integer olduğu için postgres buna uygun bir fonksiyon arıyor, olmadığı için de bulamadım diye hata dönüyor. Bunu birkaç şekilde çözebilirsiniz.
1. Fonksiyonu çağırırken gönderdiğiniz değeri smallint'e cast ederek gönderirsiniz.
select sp_test('ali veli',14::smallint);
2. Fonksiyonu int ile oluşturursunuz ama smallint'e cast ederek insert yaparsınız.
CREATE OR REPLACE FUNCTION public.sp_test(_adsoyad character varying,_yas int)
RETURNS integer AS
$$
insert into test_tbl (adsoyad,yas) values ($1,$2::smallint)
RETURNING id;
$$
LANGUAGE sql VOLATILE
3. Bir ara fonksiyon yazarsınız, bu fonksiyon int kabul eder ve sizin ana fonksiyonunuzu çağırır.
CREATE OR REPLACE FUNCTION public.sp_test(_adsoyad character varying,_yas int)
RETURNS integer AS
$$
select sp_test($1,$2::smallint);
$$
LANGUAGE sql VOLATILE
4. Tablonuzdaki bu alanı integer'a dönüştürür, fonksiyonu da integer ile oluşturursunuz.
İyi çalışmalar.
İyi çalışmalar.
Samed YILDIRIM
13.12.2016, 19:55, "AZiZ CiZMECi" <azizcizmeci@gmail.com>:
Merhaba.
Pgadmin kullanarak aşağıdaki gibi bir function tanımladım;
CREATE OR REPLACE FUNCTION public.sp_test(_adsoyad character varying,_yas smallint)
RETURNS integer AS
$$
insert into test_tbl (adsoyad,yas) values ($1,$2)
RETURNING id;
$$
LANGUAGE sql VOLATILE
Bu functionu, pgadmin üzerinde select sp_test('ali veli',14) şeklinde çalıştırdığımda
"No function matches the given name and argument types. You might need to add explicit type casts."
hatası aldım. Hatayı araştırdıktan sonra, her ne kadar mantıklı gelmese de, select sp_test('ali veli','14') şeklinde integer değerin de string tipinde gönderilmesi gerektiğini gördüm ve sorun çözüldü. (Sorunun çözümünün bu olup olmadığına emin değilim)
Fakat bu functionu java tarafında aşağıdaki gibi
CallableStatement sp_test = vt.prepareCall("{call sp_test(?,?)}");
sp_test.setString(1,"ali veli");
sp_testads6.setInt(2,14);
kullandığımda yine
"ERROR: function sp_testads6(character varying, integer) does not exist İpucu: No function matches the given name and argument types. You might need to add explicit type casts."
hatası aldım. int değeri Stringe çevirip göndermeye çalıştım yine olmadı.
Bu hata konusunda yardımcı olursanız memnun olurum. Bir de, postgresql function tanımlamaları konusunda püf noktalarını kısaca anlatabilirmisiniz?
İyi çalışmalar.