0

私のクエリでは、for ループを使用しています。forループが実行されるたびに、最後にいくつかの値をテーブルに挿入する必要があります。for ループには多くのレコードがあるため、これには時間がかかります。このため、for ループが実行されるたびに挿入が行われます。forループが実行された後、最後に挿入を実行する他の方法はありますか?

For i in 1..10000 loop .... 
    --coding 
    insert into datas.tb values(j,predictednode); -- j and predictednode are variables which will change for every loop
End loop;

毎回挿入する代わりに、最後に挿入する必要があります。

4

2 に答える 2

1

変数がどのように計算されるかを示すと、次のようなものを構築できる可能性があります。

insert into datas.tb
select
    calculate_j_here,
    calculate_predicted_node_here
from generate_series(1, 10000)
于 2013-09-14T12:10:05.003 に答える
0

One possible solution is to build a large VALUES String. In Java, something like

StringBuffer buf = new StringBuffer(100000); // big enough?
for ( int i=1; i<=10000; ++i ) {
    buf.append("(")
       .append(j)
       .append(",")
       .append(predicted_node)
       .append("),"); // whatever j and predict_node are
}
buf.setCharAt(buf.length()-1, ' '); // kill last comma
String query = "INSERT INTO datas.tb VALUES " + buf.toString() + ";"
// send query to DB, just once

The fact j and predict_node appear to be constant has me a little worried, though. Why are you putting a constant in 100000 times?

Another approach is to do the predicting in a Postgres procedural language, and have the DB itself calculate the value on insert.

于 2013-09-18T17:17:54.847 に答える