Postgresql PostSQL中的Imorting过程
目标是在PostgreSQL中导入和使用过程(通过pgAdmin和Shell)。我的实验以错误告终 代码示例(来自教程): 在函数生成器(我猜是pgAdmin)中,您已将语言设置为Postgresql PostSQL中的Imorting过程,postgresql,Postgresql,目标是在PostgreSQL中导入和使用过程(通过pgAdmin和Shell)。我的实验以错误告终 代码示例(来自教程): 在函数生成器(我猜是pgAdmin)中,您已将语言设置为SQL,但在实际函数定义中,您有plpgsql,这是正确的选择。您只需要在pgAdmin中更改函数的编写语言,或者简单地将其粘贴到查询窗口并执行(工作正常) 编辑:实际上,您可能在code部分中放了太多的内容,因为pgAdmin可能会为您填充很多内容。如果您转到SQL选项卡,您将看到pgAdmin正在尝试执行的实际查询
SQL
,但在实际函数定义中,您有plpgsql
,这是正确的选择。您只需要在pgAdmin中更改函数的编写语言,或者简单地将其粘贴到查询窗口并执行(工作正常)
编辑:实际上,您可能在
code
部分中放了太多的内容,因为pgAdmin可能会为您填充很多内容。如果您转到SQL
选项卡,您将看到pgAdmin正在尝试执行的实际查询,我确信这没有什么好处。我的建议是在SQL编辑器中以纯SQL方式执行code
。请将错误文本发布到问题中,而不是图像中。这使我们可以更容易地帮助您,并为搜索时的错误消息编制索引。
CREATE OR REPLACE FUNCTION add_event(
title text,
starts TIMESTAMP,
ends TIMESTAMP,
venue text,
postal VARCHAR(9),
country CHAR(2)
)
RETURNS BOOLEAN
AS $$
DECLARE
did_insert BOOLEAN := FALSE;
found_count INTEGER;
the_venue_id INTEGER;
BEGIN
SELECT venue_id INTO the_venue_id
FROM venues v
WHERE v.postal_code=postal
AND v.country_code=country
AND v.name LIKE venue
LIMIT 1;
IF the_venue_id IS NULL THEN
INSERT INTO venues (name, postal_code, country_code)
VALUES (venue, postal, country)
RETURNING venue_id INTO the_venue_id;
did_insert := TRUE;
END IF;
RAISE NOTICE ‘Venue found %’, the_venue_id;
INSERT INTO events (title, starts, ends, venue_id)
VALUES (title, starts, ends, the_venue_id);
RETURN did_insert;
END;
$$ LANGUAGE plpgsql;