SQL::Translator::Producer::Oracle - Oracle SQL producer
Contents
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 );
