SQL - для дублирования цикла - PullRequest
0 голосов
/ 02 декабря 2011

Просто интересно, как бы я изменил следующий SQL, чтобы вставка происходила только для уникальных экземпляров link_row. Поэтому, если в выборке возвращаются те же самые значения, я хочу выполнить цикл и вставить первый раз.

BEGIN   
      FOR LINK_ROW IN ( SELECT LINKTEXT, LINKURL, CORPID FROM LINKS )
      LOOP
          //Do insert here

Когда я запускаю скрипт, я получаю ошибки при нарушении первичного ключа, так как один и тот же элемент вставляется дважды в цикл.

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011

Вы можете использовать ключевое слово UNIQUE или DISTINCT, чтобы ограничить выбранные результаты.

НО было бы намного лучше сделать вставку и выбрать в одном выражении.

INSERT INTO <table>
 VALUES (linktext, linkurl, corpid)
 SELECT UNIQUE linktext, linkurl, corpid
   FROM links;
4 голосов
/ 02 декабря 2011

Вы можете использовать ключевое слово DISTINCT для выбора только уникальных записей из таблицы ССЫЛКИ:

BEGIN   
      FOR LINK_ROW IN ( SELECT DISTINCT LINKTEXT, LINKURL, CORPID FROM LINKS )
      LOOP

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...