小编tar*_*aki的帖子

将记录作为函数参数PL/pgSQL传递

首先,我是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 types plpgsql common-table-expression sql-insert

17
推荐指数
1
解决办法
1万
查看次数

将表拆分为多对多关系:数据迁移

我想知道在将表拆分成多对多关系时如何最好地迁移我的数据.我已经做了一个简化的例子,我还会发布一些我想出的解决方案.我正在使用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)

笔记:

  • 我将特别重复宠物表中的条目(因为在我的情况下 - 由于其他相关数据 - 其中一个可能仍然可由客户编辑而另一个可能不可编辑).
  • 没有唯一标识"Pet"记录的列.
  • 对我而言,3-8和4-9是否在PersonPet表或3-9和4-8中链接无关紧要.
  • 此外,我省略了处理表格模式更改的所有代码,因为这是 - 在我的理解中 - 与此问题无关.

我的解决方案

  1. 创建Pet Table时,临时添加一个包含用于创建此条目的Person Table的id的列.

    ALTER …
Run Code Online (Sandbox Code Playgroud)

sql postgresql many-to-many database-migration

12
推荐指数
1
解决办法
1266
查看次数

SQL选择n到m的关系

我有一个n对米之间关系AuthorBook.

表作者

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)

我想知道如何优化这个查询,因为特别是桌面书真的很大.

sql

7
推荐指数
1
解决办法
1万
查看次数

EclipseLink关于OneToOne关系的PreUpdate不持久

我有一个执行的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)

jpa eclipselink entitylisteners

5
推荐指数
1
解决办法
47
查看次数

AndroidPlot设置网格间距

我想知道如何使用AndroidPlot更改网格间距.我的网格目前有9条域用于域,9条用于范围,我不知道它来自何处.

此外,如果你碰巧知道如何使图形线更厚一点,将非常感激.

这是应该修复的最后两点,我现在已经搜索了一段时间.

我几乎已经发现如何"让其他一切看起来很漂亮".

非常感谢你的帮助和时间.

android androidplot

4
推荐指数
1
解决办法
1959
查看次数

QML:将 RichText 作为纯文本传递

我有一个像这样的简单 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 并且一次只显示一个(例如,用户在纯文本区域中输入文本,程序在富文本区域中显示它),但问题是用户应该一旦突出显示,就可以编辑文本。

javascript qml

4
推荐指数
1
解决办法
928
查看次数

Java 8 Stream API如何重用自定义方法

我有一个方法,如:

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)

现在我想在几个地方使用这个方法,但在一个地方我不需要过滤列表,我只想对它进行排序.实现这一目标的最佳方法是什么?

java java-8 java-stream

2
推荐指数
2
解决办法
307
查看次数

确定输入数组plpgsql的大小

我有一个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 plpgsql

0
推荐指数
1
解决办法
6364
查看次数