Linux上的PostgreSQL 8.4。我有一個函數:PostgreSQL問題與函數中的命名參數
CREATE OR REPLACE FUNCTION production.add_customer (
name varchar(100),
email_address varchar(300),
street_address text,
city varchar(50),
state varchar(2),
zip varchar(10),
secret1 bytea,
secret2 bytea,
secret3 bytea,
secret4 bytea,
referrer text)
RETURNS integer as $$
BEGIN
INSERT INTO customers (name, email_address, street_address, city, state, zip, secret1, secret2, secret3, secret4, create_date, referrer) VALUES
(name, email_address, street_address, city, state, zip, create_date, referrer
pgp_sym_encrypt(secret1, 'reallylongrandomstring'),
pgp_sym_encrypt(secret2, 'reallylongrandomstring'),
pgp_sym_encrypt(secret3, 'reallylongrandomstring'),
pgp_sym_encrypt(secret4, 'reallylongrandomstring'),
current_timestamp, referrer);
RETURNING customer_id;
END;
$$ LANGUAGE plpgsql;
當我嘗試了創建它即返回該錯誤:
ERROR: syntax error at or near "$1"
LINE 1: INSERT INTO customers ($1 , $2 , $3 , $4 , $5 , $6 , ...
^
QUERY: INSERT INTO customers ($1 , $2 , $3 , $4 , $5 , $6 , $7 , $8 , $9 , $10 , create_date, $11) VALUES ($1 , $2 , $3 , $4 , $5 , $6 , create_date, $11 pgp_sym_encrypt($7 , 'reallylongrandomstring'), pgp_sym_encrypt($8 , 'reallylongrandomstring'), pgp_sym_encrypt($9 , 'reallylongrandomstring'), pgp_sym_encrypt($10 , 'reallylongrandomstring'), current_timestamp, $11)
CONTEXT: SQL statement in PL/PgSQL function "add_customer" near line 8
myserver=#
我都試過ALIAS FOR
,沒有運氣。想法?
這解決了我的問題。那味道有點不妙? Oracle或SQL Server都沒有這種格式的問題。非常感謝SimonJ! – Craig 2009-11-30 01:17:40
我不確定他們是否認爲它是一個錯誤,因爲在文檔中討論了多少討論主題。如果沒有其他的東西,它鼓勵通過強制非重疊名稱的良好做法! – SimonJ 2009-11-30 01:35:00
哦,並且很可能與Oracle有類似的(但也許更微妙的)混亂 - 我曾經看到無辜的'SELECT'查詢在有人引入了與列名稱相同的本地變量時突然中斷,或者反之亦然... – SimonJ 2009-11-30 01:38:19