AND status =' || 'Approved' || 'AND
Это неправильно. Удалите операторы конкатенации, и мы получим ...
AND status =ApprovedAND
... который не является допустимым SQL. Для ссылки на строковые литералы вам нужно экранировать одинарные кавычки. Самый простой способ - использовать два из них:
AND status =''Approved'' AND
Вам нужно исправить все строковые литералы в вашем коде.
Динамический SQL сложен, потому что он превращает ошибки компиляции в ошибки времени выполнения. Вы можете упростить отладку своего кода, включив несколько простых инструментов. Если бы в вашем коде была эта строка до EXECUTE IMMEDIATE, вы могли бы увидеть выполненный оператор и, вероятно, заметили шаровую муфту для себя.
dbms_output.put_line(v_sql);