【发布时间】:2012-11-13 17:35:09
【问题描述】:
我有以下数据库结构:
CREATE TABLE songs (_id SERIAL PRIMARY KEY, _artist TEXT, _name TEXT);
CREATE TABLE cafes (_id SERIAL, _ip TEXT PRIMARY KEY);
CREATE TABLE users (_id SERIAL UNIQUE, _imei TEXT PRIMARY KEY);
CREATE TABLE votes (_id SERIAL PRIMARY KEY, _cafe TEXT, _user INTEGER, _song INTEGER, _vote INTEGER);
我有一个存储过程来检查某些行是否存在,如果不存在则创建它们。
存储过程:
CREATE OR REPLACE FUNCTION testfunc(user_imei text, cafe_ip text, song_artist text, song_name text) RETURNS void AS $$
DECLARE
id_cafe INTEGER;
id_user INTEGER;
id_song INTEGER;
temp_row RECORD;
BEGIN
IF NOT EXISTS (SELECT _id FROM users WHERE _imei = user_imei) THEN
insert into users (_imei) values (user_imei);
END IF;
IF NOT EXISTS (SELECT _id FROM cafes WHERE _ip = cafe_ip) THEN
insert into cafes (_ip) values (cafe_ip);
END IF;
IF NOT EXISTS (SELECT _artist FROM songs WHERE _artist = song_artist AND _name = song_name) THEN
insert into songs (_artist, _name) values (song_artist, song_name);
END IF;
END;
$$ LANGUAGE plpgsql;
毕竟我想在表 vote 中插入一个新行,其中:
_cafe = cafes._id
_song = 歌曲._id
_user = users._id
有人可以帮帮我吗?
【问题讨论】:
-
因此,您希望这三个表中的
_id值与函数的参数匹配,并且您希望在需要时创建它们,对吗?users._imei、cafes.cafe_ip或(_artist.song_artist, _artists.song_name)是否有任何唯一性约束? -
为什么
votes表中有_cafe TEXT而不是_cafe integer? -
关于咖啡馆 - 你说得对。它是整数。
标签: sql database postgresql stored-procedures plpgsql