Сначала я действительно новичок в pl/pgsql. Это нужно для проекта.
Я застрял в этой (упрощенной) проблеме.
Моя схема db имеет отношение n к m (автор, книги, author_books)
Теперь я хочу иметь функцию insert/book pl/psgsql. (Я знаю, что все авторы, безусловно, уже находятся в таблице автора, поэтому я просто хочу передать их первичные ключи).
Этот контур функции - это то, что я имею в виду.
create or replace function insert_book(book_to_insert book, authors integer[])
returns void as $$
begin
-- insert book into table books
-- for each author add an entry to author_books table
end;
$$ language plpgsql;
В качестве аргументов я решил передать запись типа книги и авторов, которые ее написали. Но как именно это будет работать? Я немного искал Google и не могу понять этого...
Вопрос 1: Является ли схема функции "правильной" /имеет смысл?
Вопрос 2: Как вставить книгу в книжную книгу? Должен ли я перебирать все поля книги (название, isbn, publisher,...) и добавлять их в инструкцию INSERT INTO или есть более "умный" способ?
Вопрос 3: Как я могу назвать свою функцию insert_book? Я нашел этот пример здесь (http://dbaspot.com/postgresql/206142-passing-record-function-argument-pl-pgsql.html), но это на самом деле не помогает мне. Для целей тестирования я использую оболочку, но позже мы будем использовать Java с JDBC.
Большое спасибо за вашу помощь.