logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

SQL::Translator::Producer::Oracle - Oracle SQL producer

Authors

       Ken   Youens-Clark   <kclark@cpan.org>,   Alexander   Hartmaier   <abraxxa@cpan.org>,    Fabien    Wernli
       <faxmodem@cpan.org>.

Credits

       Mad props to Tim Bunce for much of the logic stolen from his "mysql2ora" script.

Description

       Creates an SQL DDL suitable for Oracle.

Name

       SQL::Translator::Producer::Oracle - Oracle SQL producer

Notes

Autoincrementalprimarykeys
       This producer uses sequences and triggers to autoincrement primary key columns, if necessary. SQLPlus and
       DBI  expect  a  slightly  different  syntax of CREATE TRIGGER statement. You might have noticed that this
       producer returns a scalar containing all statements concatenated  by  newlines  or  an  array  of  single
       statements depending on the context (scalar, array) it has been called in.

       SQLPlus expects following trigger syntax:

           CREATE OR REPLACE TRIGGER ai_person_id
           BEFORE INSERT ON person
           FOR EACH ROW WHEN (
            new.id IS NULL OR new.id = 0
           )
           BEGIN
            SELECT sq_person_id.nextval
            INTO :new.id
            FROM dual;
           END;
           /

       Whereas if you want to create the same trigger using "do" in DBI, you need to omit the last slash:

           my $dbh = DBI->connect('dbi:Oracle:mysid', 'scott', 'tiger');
           $dbh->do("
               CREATE OR REPLACE TRIGGER ai_person_id
               BEFORE INSERT ON person
               FOR EACH ROW WHEN (
                new.id IS NULL OR new.id = 0
               )
               BEGIN
                SELECT sq_person_id.nextval
                INTO :new.id
                FROM dual;
               END;
           ");

       If  you  call  this  producer  in  array  context,  we  expect  you want to process the returned array of
       statements using DBI like "deploy" in DBIx::Class::Schema does.

       To get this working we removed the slash in those statements in version 0.09002 of  SQL::Translator  when
       called  in  array  context.  In scalar context the slash will be still there to ensure compatibility with
       SQLPlus.

Producer_Args

       delay_constraints
           This option remove the primary key and other key constraints from the CREATE TABLE statement and adds
           ALTER TABLEs at the end with it.

       quote_field_names
           Controls whether quotes are being used around column names in generated DDL.

       quote_table_names
           Controls whether quotes are being used around table, sequence and trigger names in generated DDL.

See Also

       SQL::Translator, DDL::Oracle, mysql2ora.

perl v5.40.0                                       2024-11-23             SQL::Translator::Producer::Oracle(3pm)

Synopsis

         use SQL::Translator;

         my $t = SQL::Translator->new( parser => '...', producer => 'Oracle' );
         print $translator->translate( $file );

See Also