Fernando,
It's very naive to view this is just a task for "split /;/".
Sqlplus has its own little language, with a grammar and
sytntax, variable substitution, etc. Consider this sqlplus
script:
@defines
whenever sqlerror exit failure
create table &&prefix._snafu(col varchar2(10))
/
whenever sqlerror continue
insert into &&prefix._snafu values (:prefix)
/
set scan off
insert into some_table values ('this & that');
and it's depdendent script @defines.sql
define prefix='fubar'
var prefix varchar2(30)
exec :prefix := '&prefix'
This is a contrived example, but not at all unrealistic for
real-world sqlplus. Perl's 'split' won't be quite enough :-).
You also need to add support for:
- amper substitution variables
- bind variables, define statements
- sqlplus exec function
- sqlplus 'set' commands and their effect on interpreting sql code
- included "@" files (and finding them, following $ENV{SQLPATH}, etc
- etc, etc, etc......
I suggest you step way back and ask yourself various key questions,
such as:
- who controls the source code that is the input to your module?
- what control do you have over them?
- what do you _really_ need to accomplish here?
(especially in light of the fact that you have a working
shell-script solution, no?)
The gist is that unless you can exert complete control over the
sql source code, you will be taking on a potentially endless hassle
because if the programmers generating the source are writing for
sqlplus, you will have to effectively implement a sqlplus emulator.
What's the point? You will spend a _lot_ of time, and how will the
end result be different (better) from your current solution? I'm not
saying it can't be better, but rather saying that you should have
a very clearly identified and defined objective of what exactly
that added value will be, and ask yourself if it will be worth the
price, and/or if there isn't some simpler way to add that value.
Cheers,
Mark
--- Fernando Luna <[EMAIL PROTECTED]> wrote:
> The only problem I see with the approach of stripping out semi-colons
> before passing DDL statements to Oracle is that CREATE PACKAGE
> statements have semi-colons all over the place... in fact, you can't
> have a PACKAGE Specification and body without the semi-colons which
> terminate each statement in PL/SQL.
>
> Will $dbh->do() cough and gag on that?
>
> > One problem you may be facing in your current approach is
> > the semicolons -- remember they may have to be stripped off
> > before being
> > passed to a $dbh->do(), at least some DBDs don't want to see
> > the semicolons.
> >
> > --
> > Jeff
> >
> >
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com