У меня есть оператор обновления в динамическом SQL, как это:Использование связываемых переменных для динамического SQL Update
varDynQuery := 'UPDATE TABLE SET B0 = ' || A0;
IF(A1 IS NOT NULL) THEN
varDynQuery := varDynQuery || ', B1 = ' || A1;
END IF;
IF(A2 IS NOT NULL) THEN
varDynQuery := varDynQuery || ', B2 = ' || A2;
END IF;
Я хотел бы изменить его, чтобы использовать переменные связывания вместо того, чтобы предотвратить SQL-инъекции
varDynQuery := 'UPDATE TABLE SET B0 = :A0';
IF(A1 IS NOT NULL) THEN
varDynQuery := varDynQuery || ', B1 = :A1';
END IF;
IF(A2 IS NOT NULL) THEN
varDynQuery := varDynQuery || ', B2 = :A2';
END IF;
EXECUTE IMMEDIATE varDynQuery USING
A0, A1, A2;
Однако из-за того, что A1 и A2 не всегда присутствуют, это может вызвать ошибку во время выполнения процедуры.
Есть ли способ сформировать инструкцию SQL, чтобы все переменные могли быть успешно связаны без обновления тех, которые необходимо исключить?
Примечание: хотелось бы избежать использования коалесценции.
Я предполагаю, что 'A1! =" "' Вы имеете в виду 'A1 не null 'и' varDynQuery: 'вы имеете в виду' varDynQuery: = varDynQuery || '. –