Самый эффективный и безопасный способ определить, существует ли строка, с помощью FOR-LOOP ... Вам даже не будет сложного времени, если вы хотите вставить строку или сделать что-то на основе строки НЕ но это, безусловно, поможет вам, если вам нужно определить, существует ли строка. См. Пример кода ниже для входов и выходов ...
Если вас интересует только то, что в вашем потенциальном множественном наборе ответов существует 1 запись, вы можете выйти из цикла после того, как она впервые попадает в нее.
Петля вообще не вводится, если запись не существует. Вы не получите никаких жалоб от Oracle или таких, если строка не существует, но вы обязательно узнаете, что она делает независимо.Это то, что я использую 90% времени (конечно, в зависимости от моих потребностей) ...
Пример:
DECLARE
v_exist varchar2(20);
BEGIN
FOR rec IN
(SELECT LOT, COMPONENT
FROM TABLE
WHERE REF_DES = (SELECT REF_DES FROM TABLE2 WHERE ORDER = '1234')
AND ORDER = '1234')
LOOP
v_exist := "IT_EXISTS"
INSERT INTO EAT_SOME_SOUP_TABLE (LOT, COMPONENT)
VALUES (rec.LOT, rec.COMPONENT);**
--Since I don't want to do this for more than one iteration (just in case there may have been more than one record returned, I will EXIT;
EXIT;
END LOOP;
IF v_exist IS NULL
THEN
--do this
END IF;
END;
--This находится вне петли прямо здесь IF-CHECK чуть выше будет запустите независимо, но тогда вы узнаете, является ли ваша переменная нулевой или неправильной!?. Если бы не было никаких возвращенных записей, он пропустил бы цикл и просто перешел сюда к следующему коду ... Если (в нашем случае выше), было возвращено 4 записи, я бы вышел после первой итерации из-за моего EXIT ; ... Если этого не было, 4 записи будут проходить через и вставлять их во все. Или, по крайней мере, попробуйте тоже.
Кстати, я не говорю, что это единственный способ, которым Вы должны рассмотреть делать это ... Вы можете
SELECT COUNT(*) INTO v_counter WHERE ******* etc...
Затем проверьте его как
if v_counter > 0
THEN
--code goes here
END IF;
Там больше способов ... Просто определите, когда возникнет ваша потребность. Помните о производительности и безопасности.
(Очень старый вопрос, я знаю ...) Иногда мне нужно сделать простую проверку для «это действительный идентификационный номер» (то есть он уже существует) из серверной программы (PHP), поэтому я в итоге делаю простой SQL-запрос: 'SELECT null FROM table_name WHERE id =: id' (с использованием подготовленных операторов,': id'). Если какие-либо строки были возвращены, ответ будет да. В противном случае нет. Фактические возвращенные данные неактуальны. – user128216