2012-03-19 22 views
7

Postgres noobie burada.Postgres sql işlevlerinde adlandırılmış parametrelere nasıl başvurulur?

Bir SQL Server saklanan proramı bir Postgres işlevine dönüştürmeye çalışıyorum. Şu anda bu SQL hattının Postgres'e nasıl dönüştürüleceğini anlayamıyoruz.

SQL Server:

input: @name = null 

SELECT * 
FROM table 
WHERE name = ISNULL(@name, name) 

Postgres:

input: n = null 

SELECT * 
FROM table 
WHERE name = COALESCE(n, name) 

hata alıyorum "sütunu n yok." Postgres işlevlerindeki select deyimlerindeki parametreleri nasıl referanslarım?

GÜNCELLEME:

CREATE OR REPLACE FUNCTION fn_name (n VARCHAR(32) = NULL, name OUT varchar(32), description OUT varchar(64)) 
RETURNS setof record 
AS 
$$ 
    SELECT u.name 
     , u.description 
    FROM table_a u 
    WHERE u.name = COALESCE(n, u.name); 

$$ 
LANGUAGE sql; 

cevap

13

Parametre adları, işleviniz language SQL içinde olduğunda yalnızca dekorasyonlardır. Parametreleri, language plpgsql olarak tanımlanan saklı yordamlarda adla kullanabilirsiniz.

Sonuç olarak, X'in işlev argüman listesine başvurması gerekir; burada X, işlevin argüman listesinin (1 ile başlayarak) ordinal konumudır. Başka bir yanıta @a_horse_with_no_name 'ın noktası başına

CREATE OR REPLACE FUNCTION fn_name (
    n VARCHAR(32) = NULL, 
    OUT name varchar(32), 
    OUT description varchar(64)) 
RETURNS setof record 
AS 
$$ 
    SELECT u.name 
     , u.description 
    FROM table_a u 
    WHERE u.name = COALESCE($1, u.name); 
$$ 
LANGUAGE sql; 
+0

adında destek 9.2 http://www.postgresql.org/docs/9.2/static/xfunc-sql.html#XFUNC-SQL- beri var İŞLEV-aRGÜMANLAR –

8

Sen language = SQL ile tanımlanan bir işlev parametreleri adında kullanmayın edemez Postgres fonksiyonunun

tanımı.

Yer tutucuyu 1 $ kullanmanız gerekir.

CREATE OR REPLACE FUNCTION fn_name (n VARCHAR(32) = NULL, name OUT varchar(32), description OUT varchar(64)) 
RETURNS setof record 
AS 
$$ 
    SELECT u.name 
     , u.description 
    FROM table_a u 
    WHERE u.name = COALESCE($1, u.name); 

$$ 
LANGUAGE sql; 

Bu davranış kılavuzunda belgelenmiştir: http://www.postgresql.org/docs/9.0/static/xfunc-sql.html

Yani kendisi söz konusu olduğunda, SQL fonksiyonu olarak bu adlar sadece dekorasyon vardır; Hala fonksiyon gövdesi içinde $ 1, $ 2, vb gibi parametrelere başvurmalıdır

Düzenleme o (düz) SQL fonksiyonu ile adlandırılmış parametreleri kullanmak mümkündür sürümü 9.2 bu yana


http://www.postgresql.org/docs/9.2/static/xfunc-sql.html#XFUNC-SQL-FUNCTION-ARGUMENTS

İlgili konular