57

Generating Code with Oracle SQL Developer Data Modeler

Embed Size (px)

Citation preview

Page 1: Generating Code with Oracle SQL Developer Data Modeler
Page 2: Generating Code with Oracle SQL Developer Data Modeler

Code Generation with Oracle SDDMRob van den Berg

Page 3: Generating Code with Oracle SQL Developer Data Modeler

Code Generation with Oracle SDDMPresenter information

VX Company IT Services b.v.

Email [email protected]

Twitter twitter.com/rob_vd_berg

Blog rvdbergblog.wordpress.com

Page 4: Generating Code with Oracle SQL Developer Data Modeler

Code Generation with Oracle SQL Developer Data Modeler

IntroductionSDDM Features supporting Code GenerationCode Generation

Agenda

Page 5: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerIntroduction

Introduction

Page 6: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerMain Features - Introduction

Last version as of December 21, 2015 is 4.1.3.901

FreeCreate, browse and edit relational models

Create, browse and edit multi-dimensional models

Forward and reverse engineering

Integrated source code controlSince July 1, 2009

Jeff Smith

Heli Helskyaho

Page 7: Generating Code with Oracle SQL Developer Data Modeler

– This presentation is about Application Code Generation– Focussing on:

application code that implements Business Rules– Code as complex as Entity Rules, Inter Entity Rules,

Change Event Rules, etc.– In short: Code Beyond DDL– Supporting: thick database design

(Toon Koppelaars, Bryn Llewellyn)

Oracle SQL Developer Data ModelerMain Features – Introduction – Presentation subject

Page 8: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerSetting the stage

FeaturessupportingApplicationCode Generation

Page 9: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – “Oh, pretty pictures – I can do that !!”

Page 10: Generating Code with Oracle SQL Developer Data Modeler

– ER diagramming (Barker, Bachman or IE notation)– Engineering to and from relational models– Supertypes and subtypes, arcs– Compare and merge with logical model in another design

Oracle SQL Developer Data ModelerFeatures – Logical Models

Page 11: Generating Code with Oracle SQL Developer Data Modeler

Explore different kinds of modeling!

Page 12: Generating Code with Oracle SQL Developer Data Modeler

– Database design and generation tool– Model driven approach– Models:

– Logical– Data types– Dimensional– Relational– Data Flow diagrams– Physical models

Oracle SQL Developer Data ModelerFeatures

Page 13: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Other types of models

Page 14: Generating Code with Oracle SQL Developer Data Modeler

– Importing – from Designer, Erwin (XML) and more– Version Support – team development (Subversion)

Oracle SQL Developer Data ModelerFeatures – import your model, put it in your VCS

Page 15: Generating Code with Oracle SQL Developer Data Modeler

Bring some color to your designs!

Page 16: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Logical Models

Page 17: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Logical Models – Actual Footage ! Corporate Identity applied !

Barker (Oracle Designer)

Page 18: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Logical Models – Actual Footage ! Corporate Identity applied !

Bachman

Barker (Oracle Designer)

Information Engineering

Page 19: Generating Code with Oracle SQL Developer Data Modeler

– Subviews can be used to represent objects related to given subject area

– Subviews can be nested(linked) thus allowing to build network (or hierarchy) of related subviews – navigation between linked subviews is supported

Oracle SQL Developer Data ModelerFeatures - Subject Area Management

Page 20: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures - Subviews

Page 21: Generating Code with Oracle SQL Developer Data Modeler

Do you have naming standards ?Get some!

Page 22: Generating Code with Oracle SQL Developer Data Modeler

– Name structure for elements in Logical and Relational models

– Model level restrictions for – name length, possible characters, used letter case

– Name translation during engineering between logical and relational models

– Naming templates for table constraints and indexes– Prefix management

Oracle SQL Developer Data ModelerFeatures – Naming Standards

Page 23: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Naming Standards

Right mouse menu on designproperties->settings->naming standard

Page 24: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Naming Standards

Page 25: Generating Code with Oracle SQL Developer Data Modeler

– Supports validation rules;– Easy exchange and synchronization of domains;– Assignable to group of attributes and columns

in different models;– Set “Default value” property at domain level. This can be

updated at column/attribute level.

Oracle SQL Developer Data ModelerFeatures - Domains

Example:domain = Country Codesmandatory = Truevalues = (NL = The Netherlands, UK = Great Britain)default = NL

Page 26: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Object Model

The design is stored as an object modelThat can be manipulated programmatically(which is NOT the subject of this presentation)That can be queried programmaticallyWhich enables you to synthesize PL/SQL scripts based on the design and each detailed property of the design

Page 27: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerRelational Model AFTER some tuning ….

Page 28: Generating Code with Oracle SQL Developer Data Modeler

Design import needs tuning? Transform !

Page 29: Generating Code with Oracle SQL Developer Data Modeler

– A few transformation scripts are pre-supplied– Like adding default columns to a range of tables, or– Like re-ordering columns after engineering from logical– Add your own transformation scripts

Oracle SQL Developer Data ModelerFeatures – Relational Models – Transformation scripts

Page 30: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Relational Model – Custom Transformation Scripts

Page 31: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerFeatures – Relational Model – Custom Transformation Scripts

Page 32: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerOracle Nashorn

Page 33: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerCode Generation

Code Generation

Page 34: Generating Code with Oracle SQL Developer Data Modeler

Transformations is your Code Generator

Page 35: Generating Code with Oracle SQL Developer Data Modeler

– Add a custom transformation– Set it up to output modeled design to the file system– Model design properties– Dynamic properties

Oracle SQL Developer Data ModelerHow to generate code

Page 36: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is JavaScript //

application_name = model.getName();appfolder = "Documents/Oracle/SDDM/sql/"+application_name+"/";

Oracle SQL Developer Data ModelerBasic setup: generated code output folder

Page 37: Generating Code with Oracle SQL Developer Data Modeler

– C:\Oracle\datamodeler\datamodeler\xmlmetadata\doc– SQLDeveloperDataModelerScripting.docx– Index.html

Oracle SQL Developer Data ModelerObject Model definition

Page 38: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is JavaScript //

application_name = model.getName();appfolder = "Documents/Oracle/SDDM/sql/"+application_name+"/";

Oracle SQL Developer Data ModelerBasic setup: generated code output folder

Page 39: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is JavaScript //

runFile = new java.io.FileWriter(appfolder+appname+ "_CREATE_ALL.sql");run = new java.io.PrintWriter(runFile);

run.println("-----------------------------------------------------------");run.println("-- Version : 1.0.0");run.println("-- Proces : Zorgsturing");run.println("-- File-name : <app_alias>_CREATE_ALL.sql");run.println("-- Creator : Rob van den Berg");run.println("-- Creation date : "+ today);run.println("-- Description : Master create script");run.println("--");

Oracle SQL Developer Data ModelerBasic setup: include a master script

Page 40: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerCreated Master Script

Page 41: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is (PL/)SQL //

/*Maintain table level constraints on ZST_VERTALINGEN_MPG

Change HistoryWho When What---------------- ---------- --------Rob van den Berg 12/05/2016 Creation*/-- define check constraintsalter table ZST_VERTALINGEN_MPG add constraint ZST_BR_VMP003_TPL check (datum_einde is null or (datum_ingang <= datum_einde));

Oracle SQL Developer Data ModelerImplementation of Tuple Rule

Generated script ZST_VMP_CON.sql

Page 42: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerDefinition of Tuple Rule

Page 43: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is JavaScript //

tables = model.getTableSet().toArray();for (var t = 0; t<tables.length;t++){ // check constraints tccs=table.getCheckConstraints().toArray(); for (var n=0;n<tccs.length;n++){ con.println ( "alter table “ + table_name + " add constraint “ + table.getProperty(tccs[n].getName()) + " check (" + tccs[n].getRule() + ");" ); }}

Oracle SQL Developer Data ModelerLet’s generate customized script layout for check constraints

Page 44: Generating Code with Oracle SQL Developer Data Modeler

– typical Entity Rule “rows should not OVERLAP”– Which typically presumes data definition of

– Column start_date NOT NULL– Column end_date– Some unique key including start_date

next to (optional) columns identifying the group– Analist would phrase the rule like

“Thou shalt not enter any conflicting time period (for the group of tuples identified by X, Y, Z”

Oracle SQL Developer Data ModelerDefinition of Entity Rule

Page 45: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerDefinition of Entity Rule: specify the name identifying the rule

Page 46: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is (PL/)SQL //

/*Maintain Table ZST_VERTALINGEN_MPG……--define unique key(s)alter table ZST_VERTALINGEN_MPG add constraint zst_vmp_un1 unique ( bte_id , mpg_code , oms_extern , datum_ingang );

Oracle SQL Developer Data ModelerImplementation of Entity Rule: unique key including start_date

Generated script ZST_VMP_TAB.sql

START_DATE

OVERLAP can still occur

Page 47: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is (PL/)SQL //

create or replace trigger ZST_VMP_BIRbefore insert on ZST_VERTALINGEN_MPGfor each rowbegin -- support insert change event ZST_VMP_PCK.trg_bir ( p_id => :new.ID… , p_datum_ingang => :new.DATUM_INGANG… , p_datum_einde => :new.DATUM_EINDE );end;/

Oracle SQL Developer Data ModelerImplementation of Entity Rule

Generated script ZST_VMP_TRG.sql

START_DATE

END_DATE

Page 48: Generating Code with Oracle SQL Developer Data Modeler

– Triggers generated within each trigger definition file:– Before insert, update, delete statement– After insert, update, delete statement– Same for row triggers

Oracle SQL Developer Data ModelerImplementation of Entity Rule

Page 49: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is (PL/)SQL //

procedure trg_ais is begin check_br_vmp002_ent;… end trg_ais;

Oracle SQL Developer Data ModelerImplementation of Entity Rule

Generated script ZST_VMP_PCK.sql

Page 50: Generating Code with Oracle SQL Developer Data Modeler

// Code shown below is (PL/)SQL //

… procedure check_br_vmp002_ent is -- Check if any time overlap check does not get violated -- find record overlapping in time cursor c_overlap ( v_not_id in ZST_VERTALINGEN_MPG.ID%TYPE , v_bte_id in ZST_VERTALINGEN_MPG.BTE_ID%TYPE , v_mpg_code in ZST_VERTALINGEN_MPG.MPG_CODE%TYPE……

Oracle SQL Developer Data ModelerImplementation of Entity Rule

Generated script ZST_VMP_PCK.sql

Page 51: Generating Code with Oracle SQL Developer Data Modeler

Where did that get me

Page 52: Generating Code with Oracle SQL Developer Data Modeler

Generating code

– Is efficient– Follows standards and guidelines– Leads to maintainable code. No exceptions.

Oracle SQL Developer Data ModelerConclusions

Page 53: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerAgenda

Improvements

Page 54: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerImprovements – documentation

Page 55: Generating Code with Oracle SQL Developer Data Modeler

Oracle SQL Developer Data ModelerImprovements – documentation

Page 56: Generating Code with Oracle SQL Developer Data Modeler

Questions?

Page 57: Generating Code with Oracle SQL Developer Data Modeler

Code Generation with Oracle SDDMPresenter information

VX Company IT Services b.v.

Email [email protected]

Twitter twitter.com/rob_vd_berg

Blog rvdbergblog.wordpress.com