首先,我是pl/pgsql的新手.需要它用于项目.
我坚持这个(简化)问题.
我的db模式有一个到m的关系(作者,书籍,author_books)
现在我想要一个pl/psgsql函数insert_book.(我知道所有作者肯定已经在作者表中,所以我只想传递他们的主键).
这个功能大纲是我的想法.
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;
Run Code Online (Sandbox Code Playgroud)
作为论据我想通过类型书的记录和编写它的作者.但这究竟是如何工作的呢?我用Google搜索了一下,似乎无法弄清楚这一点......
问题1:功能大纲是否"正确"/是否有意义?
问题2:如何将记录簿插入表格书?我是否必须遍历书籍的所有领域(title,isbn,publisher,...)并将它们添加到INSERT INTO语句中,还是有"更智能"的方式?
问题3:如何调用我的函数insert_book?我在这里找到了这个例子(http://dbaspot.com/postgresql/206142-passing-record-function-argument-pl-pgsql.html),但这对我没有帮助.出于测试目的,我使用shell,但稍后我们将使用Java和JDBC.
非常感谢您的帮助.
我想知道在将表拆分成多对多关系时如何最好地迁移我的数据.我已经做了一个简化的例子,我还会发布一些我想出的解决方案.我正在使用Postgresql数据库.
迁移之前
表人
ID Name Pet PetName
1 Follett Cat Garfield
2 Rowling Hamster Furry
3 Martin Cat Tom
4 Cage Cat Tom
Run Code Online (Sandbox Code Playgroud)
迁移后
表人
ID Name
1 Follett
2 Rowling
3 Martin
4 Cage
Run Code Online (Sandbox Code Playgroud)
表宠物
ID Pet PetName
6 Cat Garfield
7 Hamster Furry
8 Cat Tom
9 Cat Tom
Run Code Online (Sandbox Code Playgroud)
表PersonPet
FK_Person FK_Pet
1 6
2 7
3 8
4 9
Run Code Online (Sandbox Code Playgroud)
笔记:
我的解决方案
ALTER …Run Code Online (Sandbox Code Playgroud) 我有一个n对米之间关系Author和Book.
表作者
ID Name
1 Follett
2 Rowling
3 Martin
Run Code Online (Sandbox Code Playgroud)
表书
ID Title Category
1 A Dance with Dragons Fantasy
2 Harry Potter Fantasy
3 The Key to Rebecca Thriller
4 World without end Drama
Run Code Online (Sandbox Code Playgroud)
表book_author
authorId bookId
1 3
2 2
3 1
1 4
Run Code Online (Sandbox Code Playgroud)
系统中有更多的作者和书籍.现在我想选择所有拥有" 幻想 " 类型书籍的作者.
这是我到目前为止提出的:
select distinct a.id
from author a, book b, written w
where w.authorId = a.id and w.bookId = b.id and b.category = "Fantasy";
Run Code Online (Sandbox Code Playgroud)
我想知道如何优化这个查询,因为特别是桌面书真的很大.
我有一个执行的PreUpdate方法,但是在刷新entityManager时,相关实体上的更改不会持久保存。
以下是我的最小(非)工作示例:
实体
@Entity
@Table(name = "HOUSE")
public class House {
@Id
@Column(name = "ID")
private long id;
@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "INFO_ID")
private HouseInfo info;
@PreUpdate
protected void komplettiereEingabeWerte() {
info.setCode("TEST");
}
//getters and setters
}
@Entity
@Table(name = "HOUSE_INFO")
public class HouseInfo {
@Id
@Column(name = "ID")
private long id;
@Column(name = "CODE")
private String code;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
测试用例
@Test
@Transactional(TransactionMode.ROLLBACK)
public void testPreUpdate() {
House house = entityManager.find(House.class, 1L);
house.setInfo(new HouseInfo());
entityManager.flush();
entityManager.clear();
house …Run Code Online (Sandbox Code Playgroud) 我想知道如何使用AndroidPlot更改网格间距.我的网格目前有9条域用于域,9条用于范围,我不知道它来自何处.
此外,如果你碰巧知道如何使图形线更厚一点,将非常感激.
这是应该修复的最后两点,我现在已经搜索了一段时间.
我几乎已经发现如何"让其他一切看起来很漂亮".
非常感谢你的帮助和时间.
我有一个像这样的简单 TextArea:
TextArea {
id: my_text_area
anchors.margins: 5
anchors.fill: parent
textFormat: TextEdit.RichText
}
Run Code Online (Sandbox Code Playgroud)
用户可以在 TextArea 中输入文本。我现在想在输入的文本中找到模式并通过使它们加粗、红色或下划线来突出显示它们。
我将文本传递给这样的 js 函数:
Functions.doSomething(my_text_area.text)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是:我在文本中搜索特定模式,而 RichText 的整个 html 标记弄乱了模式。
是否有我错过的功能允许我以纯文本格式传递文本?或者是否有一些“简单”的方法可以使用 javascript 函数删除所有 html 标记?或者有其他方法可以解决这个问题吗?
到目前为止我尝试过的:
我试图在传递文本之前将 textFormat 设置为 TextEdit.PlainText,但这不起作用。我还想过有一个 RichText TextArea 和一个纯文本 TextArea 并且一次只显示一个(例如,用户在纯文本区域中输入文本,程序在富文本区域中显示它),但问题是用户应该一旦突出显示,就可以编辑文本。
我有一个方法,如:
private List<Person> findFilteredPersons(List<Person> persons,
Predicate<Person> filter) {
return persons
.stream()
.filter(filter)
.sorted(BY_NAME.thenComparing(BY_AGE))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
现在我想在几个地方使用这个方法,但在一个地方我不需要过滤列表,我只想对它进行排序.实现这一目标的最佳方法是什么?
我有一个plpgsql函数,它接受一个整数[]作为输入.
整个设置可以在这个问题中找到: 将记录作为函数参数PL/pgSQL传递
简短版本:我有一个从书本到作者的n到m关系,其中包含一个名为books_author的链接表.我现在有一个看起来像这样的函数:
create function f_insert_books(title varchar, isbn varchar, publisher varchar,
author_id integer[]) returns void as $$
begin
--insert book
--insert link to authors into the books_author table
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
我现在想在书中添加number_of_authors.有没有一种简单的方法来确定author_id数组的大小,或者您是否会建议将"number_of_authors int"作为输入参数传递?
我发现了这个建议,但我对这种方法的表现有点担心.所以也许有更简单/更快的东西. http://archives.postgresql.org/pgsql-sql/2000-06/msg00169.php
非常感谢您的帮助.
postgresql ×3
plpgsql ×2
sql ×2
android ×1
androidplot ×1
eclipselink ×1
java ×1
java-8 ×1
java-stream ×1
javascript ×1
jpa ×1
many-to-many ×1
qml ×1
sql-insert ×1
types ×1