2012-05-29 5 views
0

Я хочу, чтобы убедиться, что, когда я выполнить мой запрос, что он будет соответствовать только один разВставить только один раз

INSERT INTO SERVICEPAYANT (TYPE_FLUX, DELAI) VALUES (160,'9999'); 
INSERT INTO SERVICEPAYANT (TYPE_FLUX, DELAI) VALUES (161,'9999'); 
INSERT INTO SERVICEPAYANT (TYPE_FLUX, DELAI) VALUES (162,'9999'); 
INSERT INTO SERVICEPAYANT (TYPE_FLUX, DELAI) VALUES (163,'9999'); 
+1

Если вы хотите, чтобы предотвратить повторяющиеся вставки, то вы (или кто-то else) ДОЛЖЕН добавить ограничения к таблице. Ограничения соблюдаются для всех запросов, а не только для тех, кто хочет проверить предыдущее существование до вставки! –

ответ

0
INSERT INTO SERVICEPAYANT 
      (TYPE_FLUX, 
      DELAI) 
SELECT 161, 
     '9999' 
FROM dual 
WHERE NOT EXISTS (SELECT 1 
        FROM SERVICEPAYANT 
        WHERE TYPE_FLUX = 161 
          AND DELAI = '9999') 
+0

Благодарим вас за ответ, но как управлять им несколькими вставками? – Mercer

+0

Создайте proc и передайте параметр TYPE_FLUX, DELAI в этом параметре. Теперь используйте запрос poste dby me в этом proc и замените значения параметрами в запросе. –

+0

Обратите внимание, что это не приведет к тому, что повторяющиеся значения будут вставлены, если имеется более одного одновременного сеанса. –

1

Могу ли я считать, что сочетание обеих колонок ваш естественный ключ ? Если это так, вам нужно ограничение уникальности, это будет зависеть от реализации вашей базы данных.

+0

Уникальное ограничение не реализовано в этой таблице – Mercer

+1

не можете ли вы добавить один? –

1

Вы должны пометить столбец TYPE_FLUX или DELAI как UNIQUE KEY, если у вас уже есть PRIMARY KEY на какой-либо другой столбец в таблице. Это приведет к ошибке при вводе 161 в колонке TYPE_FLUX agin или ошибке при вводе '9999' в колонке DELAI еще раз.

Если вы хотите сочетание двух колонок должны быть уникальными, то создать комбинированный UNIQUE KEY это никогда не позволит 161 and '9999' быть введены в таблице снова ВМЕСТЕ

+0

, к сожалению, я не могу изменить ограничения на эту таблицу – Mercer