Вставка нескольких строк в Oracle

@ MrAlek's Ответ для swift3

optional func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    print(#function)

    var i = -1;
    for view in views {
        i += 1;
        if view.annotation is MKUserLocation {
            continue;
        }

        // Check if current annotation is inside visible map rect, else go to next one
        let point:MKMapPoint  =  MKMapPointForCoordinate(view.annotation!.coordinate);
        if (!MKMapRectContainsPoint(self.mapView.visibleMapRect, point)) {
            continue;
        }

        let endFrame:CGRect = view.frame;

        // Move annotation out of view
        view.frame = CGRect(origin: CGPoint(x: view.frame.origin.x,y :view.frame.origin.y-self.view.frame.size.height), size: CGSize(width: view.frame.size.width, height: view.frame.size.height))

        // Animate drop
        let delay = 0.03 * Double(i)
        UIView.animate(withDuration: 0.5, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations:{() in
            view.frame = endFrame
            // Animate squash
            }, completion:{(Bool) in
                UIView.animate(withDuration: 0.05, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations:{() in
                    view.transform = CGAffineTransform(scaleX: 1.0, y: 0.6)

                    }, completion: {(Bool) in
                        UIView.animate(withDuration: 0.3, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations:{() in
                            view.transform = CGAffineTransform.identity
                            }, completion: nil)
                })

        })
    }
}
12
задан Community 23 May 2017 в 12:01
поделиться

3 ответа

С точки зрения производительности эти запросы идентичны.

UNION ALL не повлияет на производительность, поскольку Oracle оценивает UNION обрабатывает запрос только тогда, когда это необходимо, он не кеширует результаты сначала.

Синтаксис SELECT более гибкий в том смысле, что вы можете более легко управлять запросом SELECT , если вы хотите что-то изменить.

Например, этот запрос:

insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
          select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual

можно переписать как

INSERT
INTO    pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
SELECT  7999 + level, 0, 'Multi ' || 7999 + level, 1
FROM    dual
CONNECT BY
        level <= 2

Заменив 2 на соответствующий номер, вы можете получить любое количество строк, которое хотите.

] В случае INSERT ALL вам придется продублировать описание целевой таблицы, которое будет менее читаемым, если вам нужно, скажем, 40 строк.

7
ответ дан 2 December 2019 в 20:19
поделиться

Я подозреваю, что решение 1 - это своего рода хитрость, которая работает и, вероятно, менее эффективна, чем разработанная альтернатива Insert ALL.

Insert all действительно предназначена для вы должны вставить много строк в более чем одну таблицу в результате выбора, например:

Insert ALL
into 
  t1 (c1, c2) values (q1, q2)
  t2 (x1, x2) values (q1, q3)
select q1, q2, q3 from t3 

Если вы хотите загрузить тысячи строк , а их еще нет в базе данных , я не думаю это лучший способ сделать это - если ваши данные находятся в файле, вы хотите просмотреть внешние таблицы или загрузчик SQL, чтобы эффективно вставить строки для вас.

3
ответ дан 2 December 2019 в 20:19
поделиться

Оператор, использующий UNION ALL , теоретически имеет небольшой недостаток производительности, поскольку он должен объединить результаты всех операторов, прежде чем может произойти вставка. INSERT ALL не имеет этого недостатка, так как конечный результат уже может быть обработан построчно.

Но на практике оптимизатор внутри Oracle должен сделать разницу незначительной, и это зависит от ваших предпочтений. какой способ вы выберете.

По моему мнению, вариант INSERT ALL лучше читается человеком из двух, в то время как вариант UNION ALL занимает меньше места, когда такой вариант вставка создается автоматически.

2
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: