After building the same agent stack twice by hand I wrote a tool to generate it, and deliberately banned the model from writing any of the SQL. Where a language model earns its place in a code generator, and where determinism matters more.
Registering your own PL/SQL functions as agent tools, and running numpy inside the database through OML4Py. Plus the authentication problem: a stored credential cannot be read back, but an OCI Vault secret can, which removes the hardcoded password entirely.