2015-01-12 2 views
0

У меня есть таблица с некоторыми столбцами:значения Pass UUID в качестве параметра функции

--table 
create table testz 
(
    ID uuid, 
    name text 
); 

Примечание: Я хочу, чтобы вставить ID значения, передавая в качестве параметра функции. Потому что я генерирую ID значение в переднем конце, используя uuid_generate_v4(). Поэтому мне нужно, чтобы передать сформированное значение функции для вставки в таблицу

Моя плохая попытка:

--function 
CREATE OR REPLACE FUNCTION testz 
(
    p_id varchar(50), 
    p_name text 
) 
RETURNS VOID AS 
$BODY$ 
BEGIN 
    INSERT INTO testz values(p_id,p_name); 
END; 
$BODY$ 
LANGUAGE PLPGSQL; 

--EXECUTE FUNCTION 
SELECT testz('24f9aa53-e15c-4813-8ec3-ede1495e05f1','Abc'); 

Getting ошибку:

ERROR: column "id" is of type uuid but expression is of type character varying 
LINE 1: INSERT INTO testz values(p_id,p_name) 

ответ

1

Вам нужен простой бросок, чтобы сделать уверен, что PostgreSQL понимает, что вы хотите вставить:

INSERT INTO testz values(p_id::uuid, p_name); -- or: CAST(p_id AS uuid) 

Или (желательно) Блай) вам нужна функция, с точными типами параметров, как:

CREATE OR REPLACE FUNCTION testz(p_id uuid, p_name text) 
RETURNS VOID AS 
$BODY$ 
BEGIN 
    INSERT INTO testz values(p_id, p_name); 
END; 
$BODY$ 
LANGUAGE PLPGSQL; 

С этим, отливка может потребоваться на вызывающей стороне (но PostgreSQL обычно лучше автоматические слепки с аргументами функции, чем внутри INSERT заявлений).

SQLFiddle

Если функция является то, что просто, вы можете использовать SQL functions тоже:

CREATE OR REPLACE FUNCTION testz(uuid, text) RETURNS VOID 
LANGUAGE SQL AS 'INSERT INTO testz values($1, $2)'; 
Смежные вопросы