основная причина - пхп это не типизированный язык, тяжелую бизнес логику на таком писать моветон. оракловый pl/sql типизированный язык, глубоко интегрирован с данными. в пхп ты обновил код и только можешь помолиться, что код пхп ожидает те самые данные, что в базе. если кто-то удалил таблицу, пхп код об этом ничего не знает. процедуры в оракле знают к каким таблицам обращаются, знают какие типы колонок. т.е. если ты накатил на базу кривой патч, сразу это видно, затронутые процедуры станут инвалидными и оракл не позволит целиком запустить кривую процедуру. пхп код же пока не наткнется на косяк, не будет подозревать о засаде.
плюс тяжелую бизнес логику на pl/sql проще писать, т.к. можно привязаться к типу таблицы объявляя table1.name%type, table1%rowtype. плюс можно писать гораздо более эффективный код, оперируя данными конструкциями типа bulk collect, bulk insert.