2014-11-15 2 views
0

Надеясь, что свежая пара глаз может определить, что я делаю неправильно, или указать, где я могу исследовать мою проблему дальше. Я создаю функцию, которая включает параметр, переданный как строка json.Postgresql - необъяснимая синтаксическая ошибка в json-операнде

Использование json-оператора -> для доступа к элементу данных в json сообщает о синтаксической ошибке, которая меня пугает. Вот моя функция (вкратце):

CREATE OR REPLACE FUNCTION createUser( 
    email_f character varying(50), 
    mobile_f integer, 
    salt_f character(16), 
    hash_f character(16), 
    encryption_f smallint, 
    iterations_f smallint, 
    fnam_f character varying(16), 
    lnam_f character varying(16), 
    nickname_f character varying(16), 
    fb_f json 
) RETURNS json AS $$ 
/* Example /me response from FB 
{ 
    id: "101...", email: "[email protected]", verified: true, 
    name: "test testlast", first_name: "test", last_name: "testlast", gender: "male", 
    link: "https://www.facebook.com/app_scoped_user_id/101.../", 
    locale: "en_US", timezone: -5, updated_time: "2014-07-01T14:48:27+0000" 
} 
*/ 
BEGIN 
    IF fnam_f IS NULL THEN 
    SET fnam_f = fb_f->'first_name'; 
    SET lnam_f = fb_f->'last_name'; 
    END IF; 
    INSERT INTO users (email,mobile,salt,hash,encryption,iteration,username,fbid) 
    SELECT email_f,mobile_f,salt_f,hash_f,encryption_f,iteration_f,nickname_f,null 
    RETURNING row_to_json(row(*)); 
END; 
$$ LANGUAGE 'plpgsql'; 

Выполнение этого запроса возвращает ошибку синтаксиса:

ERROR: syntax error at or near "->" 
LINE 24: SET fnam_f = fb_f->'first_name'; 

Я нахожу это заблуждение, потому что я, кажется, использует JSon операнд правильно в соответствии с документацией: http://www.postgresql.org/docs/9.3/static/functions-json.html

Благодаря

+0

Опубликовать вывод 'select version()' –

ответ

0

Для переменных, присваивания использовать := вместо:

fnam_f := fb_f->'first_name'; 
lnam_f := fb_f->'last_name'; 

Оператор SET используется для изменения параметров времени выполнения.

+0

хороший глаз. Я исхожу из основного фона T-SQL. Было бы неплохо, если бы ошибка Postgres определила реальную проблему. – Reinsbrain

Смежные вопросы