Я не вижу проблем с нулями в вашем коде.Там, где есть нули, вставляемое значение будет равно '', что соответствует нулю в Oracle (я знаю, я знаю ...), например,
INSERT INTO foo (col1, col2) VALUES ('XXX','');
, и это работает.
Вы можете создать функцию QUOTE в Oracle следующим образом:
create function quote (p_text varchar2) return varchar2 is
begin
return '''' || replace (p_text, '''', '''''') || '''';
end;
, и тогда ваш SQLLite SQL будет работать и в Oracle.
Остерегайтесь дат и маски формата по умолчанию: вы потеряете всеинформация о времени в исходной таблице, если вы не установили маску формата по умолчанию для ее включения, например,
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
(Это значение должно быть установлено на то же значение при запуске сценария.)
Я отмечаю мнение Маркуса об использовании переменных связывания, но мне кажется, что это один из тех разовых сценариев, которые запускаются, а затем выбрасываются, а не часть производственного кода, который будет выполняться снова и снова, поэтому я неу меня проблемы с литералами.Такие инструменты, как Toad и SQL Developer, имеют средства для генерации вставок с литералами, как на самом деле.