Helpex - Trao đổi & giúp đỡ Đăng nhập
7

Tôi là một người mới nên hy vọng một số kiên nhẫn. :)

Tôi đang cố gắng điền vào hai bảng nếu một giá trị không tồn tại. Về cơ bản tôi có:

TABLE b
(
    id VARCHAR(254) PRIMARY KEY NOT NULL
);


TABLE d
(
    id VARCHAR(254) PRIMARY KEY NOT NULL,
    relay INT NOT NULL,
    FOREIGN KEY ( relay ) REFERENCES b ( id )
);

vì vậy tôi đang cố gắng viết một hàm điền vào hai bảng một giá trị mới, nếu nó không tồn tại hoặc bỏ qua nó, nếu không ... tất nhiên được bao bọc trong một giao dịch:

IF (NOT EXISTS(SELECT * FROM b where id='something'))
    insert into b values('something')
    insert into d values(1, 'something')
END

Cách hiệu quả nhất để đạt được những thứ như thế này là gì? Nếu vấn đề quan trọng, tôi đang sử dụng POstgreSQL 9.1 nhưng tôi muốn giữ nó khá chung chung.

(EDIT) Đây là các định nghĩa bảng hiện tại của tôi (được đơn giản hóa cho mục đích minh họa):

object d extends Table[(String, String, Int)]("d")
{
  def id=column[String]("id", O.PrimaryKey)

  def relay=column[Int]("relay")
  def relay_ref=foreignKey("d2b.fk", relay, b)(_.id)
  def * = id ~ relay
}
object b extends Table[(String)]("b")
{
  def id=column[String]("id", O.PrimaryKey)
  def * = id
}
7 hữu ích 0 bình luận 4.0k xem chia sẻ
10

Trong Slick 1.0.1

db.withTransaction{ implicit session : Session =>
  if( ! Query(b).filter(_.id==="something").exists.run ){
    b.insert( "something" )
    d.insert( (1,"something") )
  }
}

Trong Slick 2.0

val b = TableQuery[b]
db.withTransaction{ implicit session =>
  if( ! b.filter(_.id==="something").exists.run ){
    b += "something"
    d += (1,"something")
  }
}
10 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ database scala slick scalatra , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading