text: create table ACT_GE_PROPERTY (
      NAME_ NVARCHAR2(64),
      VALUE_ NVARCHAR2(300),
      REV_ INTEGER,
      primary key (NAME_)
  );
  
  insert into ACT_GE_PROPERTY
  values ('schema.version', '5.9', 1);
  
  insert into ACT_GE_PROPERTY
  values ('schema.history', 'create(5.9)', 1);
  
  insert into ACT_GE_PROPERTY
  values ('next.dbid', '1', 1);
  
  create table ACT_GE_BYTEARRAY (
      ID_ NVARCHAR2(64),
      REV_ INTEGER,
      NAME_ NVARCHAR2(255),
      DEPLOYMENT_ID_ NVARCHAR2(64),
      BYTES_ BLOB,
      GENERATED_ NUMBER(1,0) CHECK (GENERATED_ IN (1,0)),
      primary key (ID_)
  );
  
  create table ACT_RE_DEPLOYMENT (
      ID_ NVARCHAR2(64),
      NAME_ NVARCHAR2(255),
      DEPLOY_TIME_ TIMESTAMP(6),
      primary key (ID_)
  );
  
  create table ACT_RU_EXECUTION (
      ID_ NVARCHAR2(64),
      REV_ INTEGER,
      PROC_INST_ID_ NVARCHAR2(64),
      BUSINESS_KEY_ NVARCHAR2(255),
      PARENT_ID_ NVARCHAR2(64),
      PROC_DEF_ID_ NVARCHAR2(64),
      SUPER_EXEC_ NVARCHAR2(64),
      ACT_ID_ NVARCHAR2(255),
      IS_ACTIVE_ NUMBER(1,0) CHECK (IS_ACTIVE_ IN (1,0)),
      IS_CONCURRENT_ NUMBER(1,0) CHECK (IS_CONCURRENT_ IN (1,0)),
      IS_SCOPE_ NUMBER(1,0) CHECK (IS_SCOPE_ IN (1,0)),
      IS_EVENT_SCOPE_ NUMBER(1,0) CHECK (IS_EVENT_SCOPE_ IN (1,0)),
      SUSPENSION_STATE_ INTEGER,
      primary key (ID_)
  );
  
  create table ACT_RU_JOB (
      ID_ NVARCHAR2(64) NOT NULL,
      REV_ INTEGER,
      TYPE_ NVARCHAR2(255) NOT NULL,
      LOCK_EXP_TIME_ TIMESTAMP(6),
      LOCK_OWNER_ NVARCHAR2(255),
      EXCLUSIVE_ NUMBER(1,0) CHECK (EXCLUSIVE_ IN (1,0)),
      EXECUTION_ID_ NVARCHAR2(64),
      PROCESS_INSTANCE_ID_ NVARCHAR2(64),
      RETRIES_ INTEGER,
      EXCEPTION_STACK_ID_ NVARCHAR2(64),
      EXCEPTION_MSG_ NVARCHAR2(2000),
      DUEDATE_ TIMESTAMP(6),
      REPEAT_ NVARCHAR2(255),
      HANDLER_TYPE_ NVARCHAR2(255),
      HANDLER_CFG_ NVARCHAR2(2000),
      primary key (ID_)
  );
  
  create table ACT_RE_PROCDEF (
      ID_ NVARCHAR2(64),
      REV_ INTEGER,
      CATEGORY_ NVARCHAR2(255),
      NAME_ NVARCHAR2(255),
      KEY_ NVARCHAR2(255),
      VERSION_ INTEGER,
      DEPLOYMENT_ID_ NVARCHAR2(64),
      RESOURCE_NAME_ NVARCHAR2(2000),
      DGRM_RESOURCE_NAME_ varchar(4000),
      HAS_START_FORM_KEY_ NUMBER(1,0) CHECK (HAS_START_FORM_KEY_ IN (1,0)),
      SUSPENSION_STATE_ INTEGER,
      primary key (ID_)
  );
  
  create table ACT_RU_TASK (
      ID_ NVARCHAR2(64),
      REV_ INTEGER,
      EXECUTION_ID_ NVARCHAR2(64),
      PROC_INST_ID_ NVARCHAR2(64),
      PROC_DEF_ID_ NVARCHAR2(64),
      NAME_ NVARCHAR2(255),
      PARENT_TASK_ID_ NVARCHAR2(64),
      DESCRIPTION_ NVARCHAR2(2000),
      TASK_DEF_KEY_ NVARCHAR2(255),
      OWNER_ NVARCHAR2(64),
      ASSIGNEE_ NVARCHAR2(64),
      DELEGATION_ NVARCHAR2(64),
      PRIORITY_ INTEGER,
      CREATE_TIME_ TIMESTAMP(6),
      DUE_DATE_ TIMESTAMP(6),
      primary key (ID_)
  );
  
  create table ACT_RU_IDENTITYLINK (
      ID_ NVARCHAR2(64),
      REV_ INTEGER,
      GROUP_ID_ NVARCHAR2(64),
      TYPE_ NVARCHAR2(255),
      USER_ID_ NVARCHAR2(64),
      TASK_ID_ NVARCHAR2(64),
      primary key (ID_)
  );
  
  create table ACT_RU_VARIABLE (
      ID_ NVARCHAR2(64) not null,
      REV_ INTEGER,
      TYPE_ NVARCHAR2(255) not null,
      NAME_ NVARCHAR2(255) not null,
      EXECUTION_ID_ NVARCHAR2(64),
      PROC_INST_ID_ NVARCHAR2(64),
      TASK_ID_ NVARCHAR2(64),
      BYTEARRAY_ID_ NVARCHAR2(64),
      DOUBLE_ NUMBER(*,10),
      LONG_ NUMBER(19,0),
      TEXT_ NVARCHAR2(2000),
      TEXT2_ NVARCHAR2(2000),
      primary key (ID_)
  );
  
  create table ACT_RU_EVENT_SUBSCR (
      ID_ NVARCHAR2(64) not null,
      REV_ integer,
      EVENT_TYPE_ NVARCHAR2(255) not null,
      EVENT_NAME_ NVARCHAR2(255),
      EXECUTION_ID_ NVARCHAR2(64),
      PROC_INST_ID_ NVARCHAR2(64),
      ACTIVITY_ID_ NVARCHAR2(64),
      CONFIGURATION_ NVARCHAR2(255),
      CREATED_ TIMESTAMP(6) not null,
      primary key (ID_)
  );
  
  create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_);
  create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_);
  create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_);
  create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_);
  create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_);
  
  create index ACT_IDX_BYTEAR_DEPL on ACT_GE_BYTEARRAY(DEPLOYMENT_ID_);
  alter table ACT_GE_BYTEARRAY
      add constraint ACT_FK_BYTEARR_DEPL
      foreign key (DEPLOYMENT_ID_) 
      references ACT_RE_DEPLOYMENT (ID_);
  
  create index ACT_IDX_EXE_PROCINST on ACT_RU_EXECUTION(PROC_INST_ID_);
  alter table ACT_RU_EXECUTION
      add constraint ACT_FK_EXE_PROCINST
      foreign key (PROC_INST_ID_) 
      references ACT_RU_EXECUTION (ID_);
  
  create index ACT_IDX_EXE_PARENT on ACT_RU_EXECUTION(PARENT_ID_);
  alter table ACT_RU_EXECUTION
      add constraint ACT_FK_EXE_PARENT
      foreign key (PARENT_ID_) 
      references ACT_RU_EXECUTION (ID_);
      
  create index ACT_IDX_EXE_SUPER on ACT_RU_EXECUTION(SUPER_EXEC_);
  alter table ACT_RU_EXECUTION
      add constraint ACT_FK_EXE_SUPER
      foreign key (SUPER_EXEC_) 
      references ACT_RU_EXECUTION (ID_);
  
  create index ACT_IDX_TSKASS_TASK on ACT_RU_IDENTITYLINK(TASK_ID_);
  alter table ACT_RU_IDENTITYLINK
      add constraint ACT_FK_TSKASS_TASK
      foreign key (TASK_ID_) 
      references ACT_RU_TASK (ID_);
      
  create index ACT_IDX_TASK_EXEC on ACT_RU_TASK(EXECUTION_ID_);
  alter table ACT_RU_TASK
      add constraint ACT_FK_TASK_EXE
      foreign key (EXECUTION_ID_)
      references ACT_RU_EXECUTION (ID_);
      
  create index ACT_IDX_TASK_PROCINST on ACT_RU_TASK(PROC_INST_ID_);
  alter table ACT_RU_TASK
      add constraint ACT_FK_TASK_PROCINST
      foreign key (PROC_INST_ID_)
      references ACT_RU_EXECUTION (ID_);
      
  create index ACT_IDX_TASK_PROCDEF on ACT_RU_TASK(PROC_DEF_ID_);
  alter table ACT_RU_TASK
    add constraint ACT_FK_TASK_PROCDEF
    foreign key (PROC_DEF_ID_)
    references ACT_RE_PROCDEF (ID_);
    
  create index ACT_IDX_VAR_EXE on ACT_RU_VARIABLE(EXECUTION_ID_);
  alter table ACT_RU_VARIABLE 
      add constraint ACT_FK_VAR_EXE
      foreign key (EXECUTION_ID_) 
      references ACT_RU_EXECUTION (ID_);
  
  create index ACT_IDX_VAR_PROCINST on ACT_RU_VARIABLE(PROC_INST_ID_);
  alter table ACT_RU_VARIABLE
      add constraint ACT_FK_VAR_PROCINST
      foreign key (PROC_INST_ID_)
      references ACT_RU_EXECUTION(ID_);
  
  create index ACT_IDX_VAR_BYTEARRAY on ACT_RU_VARIABLE(BYTEARRAY_ID_);
  alter table ACT_RU_VARIABLE 
      add constraint ACT_FK_VAR_BYTEARRAY 
      foreign key (BYTEARRAY_ID_) 
      references ACT_GE_BYTEARRAY (ID_);
  
  create index ACT_IDX_JOB_EXCEPTION on ACT_RU_JOB(EXCEPTION_STACK_ID_);
  alter table ACT_RU_JOB 
      add constraint ACT_FK_JOB_EXCEPTION
      foreign key (EXCEPTION_STACK_ID_) 
      references ACT_GE_BYTEARRAY (ID_);
      
  create index ACT_IDX_EVENT_SUBSCR on ACT_RU_EVENT_SUBSCR(EXECUTION_ID_);
  alter table ACT_RU_EVENT_SUBSCR
      add constraint ACT_FK_EVENT_EXEC
      foreign key (EXECUTION_ID_)
      references ACT_RU_EXECUTION(ID_);
      
  -- see http://stackoverflow.com/questions/675398/how-can-i-constrain-multiple-columns-to-prevent-duplicates-but-ignore-null-value
  create unique index ACT_UNIQ_RU_BUS_KEY on ACT_RU_EXECUTION
     (case when BUSINESS_KEY_ is null then null else PROC_DEF_ID_ end,
      case when BUSINESS_KEY_ is null then null else BUSINESS_KEY_ end);
  