(!******************************************************
Mosel Example Problems
======================
file unioninout.mos
```````````````````
Reading/writing unions from/t databases via ODBC.
- Using 'initializations from' with odbc IO driver -
(c) 2021 Fair Isaac Corporation
author: S. Heipcke, Apr. 2021
*******************************************************!)
model "Union handling (ODBC)"
uses 'mmodbc', 'mmsystem'
parameters
! Use mysql database `uniondata' (not provided)
! CNCTIO = 'mmodbc.odbc:debug;DSN=mysql;DB=uniondata'
! Use SQLite database 'uniondata.sqlite' via ODBC
! CNCTIO = 'mmodbc.odbc:debug;DSN=sqlite;DATABASE=uniondata.sqlite'
! Use SQLite database 'uniondata.sqlite' directly
CNCTIO = "mmodbc.odbc:debug;uniondata.sqlite"
end-parameters
declarations
L,L2: list of any
L3: list of text or real
LS: list of text
end-declarations
! Date and time formats
(! Access and Excel:
setparam("timefmt", "%y-%0m-%0d %0H:%0M:%0S")
setparam("datefmt", "%y-%0m-%0d")
setparam("datetimefmt", "%y-%0m-%0d %0H:%0M:%0S")
!)
(! mysql:
setparam("timefmt", "%0H:%0M:%0S")
setparam("datefmt", "%y-%0m-%0d")
setparam("datetimefmt", "%y-%0m-%0d %0H:%0M:%0S")
!)
(! SQLite:
setparam("timefmt", "%0H:%0M:%0S")
setparam("datefmt", "%y-%0m-%0d")
setparam("datetimefmt", "%y-%0m-%0d %0H:%0M:%0S")
!)
setparam("SQLverbose",true)
! Reading data of different types from a database
initializations from CNCTIO
L as "UnionTab"
L2 as "UnionLst"
L3 as "UnionTab"
end-initializations
write("L orig: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Date and time types are read in textual form
L(5).date:=date(text(L(5)))
L(6).time:=time(text(L(6)))
write("L new: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Reading into a list defined with a restricted set of types
write("L3: ")
forall(i in L3) write (i,": ", i.typeid, "; ")
writeln
! Textual database types are always read as string
write("L2: ")
forall(i in L2) write (i,": ", i.typeid, "; ")
writeln
(! Delete existing contents of result tables:
SQLconnect(CNCT)
SQLexecute("delete from UnionOut")
SQLexecute("delete from Union2Out")
SQLdisconnect
!)
LS:=sum(i in L) [text(i)]
initializations to CNCTIO
! Writing data of type 'any' to a database table with various different types
L as "UnionOut(IVal,RVal,BVal,SVal,DVal,TVal)"
! Writing data of type 'any' into textual fields of a database
L as "Union2Out"
! Writing data of a union type to a database
L3 as "UnionOut(IVal,RVal,BVal,SVal,DVal,TVal)"
! Writing text-format data to a database table with various different types
LS as "UnionOut(IVal,RVal,BVal,SVal,DVal,TVal)"
end-initializations
writeln("Output to DB terminated.")
end-model
|
(!******************************************************
Mosel Example Problems
======================
file unioninout2.mos
````````````````````
Reading/writing unions from/to databases via ODBC.
- Using SQL commands -
(c) 2021 Fair Isaac Corporation
author: S. Heipcke, Apr. 2021, rev. Aug. 2023
*******************************************************!)
model "Union handling (SQL)"
uses 'mmodbc', 'mmsystem'
parameters
! Use mysql database `uniondata' (not provided)
! CNCT = 'DSN=mysql;DB=uniondata'
! Use SQLite database 'uniondata.sqlite' via ODBC
! CNCT = 'DSN=sqlite;DATABASE=uniondata.sqlite'
! Use SQLite database 'uniondata.sqlite' directly
CNCT = "uniondata.sqlite"
end-parameters
procedure gendb
declarations
tsucc: array ({false,true}) of string
end-declarations
tsucc(false):="failed"; tsucc(true):="succeeded"
setparam("SQLverbose",true)
(! mysql date and time formats:
setparam("timefmt", "%0H:%0M:%0S")
setparam("datefmt", "%y-%0m-%0d")
setparam("datetimefmt", "%y-%0m-%0d %0H:%0M:%0S")
!)
(! SQLite date and time formats:
setparam("timefmt", "%0H:%0M:%0S")
setparam("datefmt", "%y-%0m-%0d")
setparam("datetimefmt", "%y-%0m-%0d %0H:%0M:%0S")
!)
fdelete('uniondata.sqlite')
SQLconnect(CNCT)
if not getparam("SQLsuccess"): setioerr("Database connection failed")
SQLexecute("drop table UnionTab")
SQLexecute("drop table UnionLst")
SQLexecute("drop table UnionOut")
SQLexecute("drop table Union2Out")
SQLexecute("create table UnionTab (IVal integer, RVal real, BVal boolean, SVal varchar(20), DVal date, TVal timestamp(3))") !sqlite
! SQLexecute("create table UnionTab (IVal integer, RVal real, BVal boolean, SVal varchar(20), DVal date, TVal time(3))") !mysql
writeln(" - Create UnionTab (",tsucc(getparam("SQLsuccess")),")")
SQLexecute("insert into UnionTab (IVal,RVal,SVal,BVal,TVal,DVal) values(?1,?2,?3,?4,?5,?6)", [ 5, 1.75, "some text", true, '11:25:30', '2021-03-20' ])
writeln(" - Insert values into UnionTab (",tsucc(getparam("SQLsuccess")),",",
getparam("SQLrowcnt"),'/',getparam("SQLrowxfr")," rows)")
SQLexecute("create table UnionLst (UValues varchar(20))")
writeln(" - Create UnionLst (",tsucc(getparam("SQLsuccess")),")")
SQLexecute("insert into UnionLst (UValues) values (?1)", [string(5), string(1.75), string(true), "some text", '2021-03-20', '11:25:30'])
writeln(" - Insert values into UnionLst (",tsucc(getparam("SQLsuccess")),",",
getparam("SQLrowcnt"),'/',getparam("SQLrowxfr")," rows)")
SQLexecute("create table UnionOut (IVal integer, RVal real, BVal boolean, SVal varchar(20), DVal date, TVal timestamp(3))") !sqlite
! SQLexecute("create table UnionOut (IVal integer, RVal real, BVal boolean, SVal varchar(20), DVal date, TVal time(3))") !mysql
writeln(" - CreateUnionOut (",tsucc(getparam("SQLsuccess")),")")
SQLexecute("create table Union2Out (UnionValues varchar(20))")
writeln(" - Create Union2Out (",tsucc(getparam("SQLsuccess")),")")
SQLdisconnect
end-procedure
! gendb
declarations
L,L2: list of any
L3: list of text or real
LS: list of text
end-declarations
setparam("SQLverbose",true)
setparam("SQLdebug",true)
SQLconnect(CNCT)
if not getparam("SQLsuccess"): setioerr("Database connection failed")
! Reading data of different types from a database
SQLexecute("select * from UnionTab", L)
write("L orig: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Date and time types are read in textual form
L(5).date:=date(text(L(5)))
L(6).time:=time(text(L(6)))
write("L new: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Reading into a list defined with a restricted set of types
SQLexecute("select * from UnionTab", L3)
write("L3: ")
forall(i in L3) write (i,": ", i.typeid, "; ")
writeln
! Textual database types are always read as string
SQLexecute("select * from UnionLst", L2)
write("L2: ")
forall(i in L2) write (i,": ", i.typeid, "; ")
writeln
! Writing data of type 'any' to a database
SQLexecute("delete from UnionOut")
SQLexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(?1,?2,?3,?4,?5,?6)", L)
writeln(" - writing L into UnionOut succeeded (",getparam("SQLsuccess"),")")
! Writing data of type 'any' into textual fields of a database
SQLexecute("delete from Union2Out")
SQLexecute("insert into Union2Out (UnionValues) values(?1)", L)
writeln(" - writing L into Union2Out succeeded (",getparam("SQLsuccess"),")")
! Writing data of a union type to a database
SQLexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(?1,?2,?3,?4,?5,?6)", L3)
writeln(" - writing L3 into UnionOut succeeded (",getparam("SQLsuccess"),")")
! Writing text-format data to a database table with various different types
LS:=sum(i in L) [text(i)]
SQLexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(?1,?2,?3,?4,?5,?6)", LS)
writeln(" - writing LS into UnionOut succeeded (",getparam("SQLsuccess"),")")
SQLdisconnect
end-model
|
(!******************************************************
Mosel Example Problems
======================
file unioninout3.mos
````````````````````
Reading/writing unions from/to
spreadsheets or databases.
- Using 'initializations from' with the excel driver -
(c) 2021 Fair Isaac Corporation
author: S. Heipcke, Apr. 2021
*******************************************************!)
model "Union handling (Excel)"
uses 'mmsheet','mmsystem'
parameters
CSTR= 'mmsheet.excel:uniondata.xlsx'
CSTR_OUT= 'mmsheet.excel:uniondataout.xlsx'
end-parameters
function convertexceltime(r: real): time
ra:=abs(r)
if ra<1 then
returned:=time(round(ra*24*60*60*1000))
else
returned:=time(round((ra-floor(ra))*24*60*60*1000))
end-if
end-function
declarations
L,L2,L3: list of any
LU: list of text or real
LU2: list of text or real or boolean
end-declarations
! Reading data of different types from an Excel file
initializations from CSTR
L as "skiph;[A:A]"
L2 as "skiph;[C:C]"
L3 as "skiph;[E:E]"
LU as "skiph;[C:C]" ! This would fail to read from [A:A] due to missing boolean type
LU2 as "skiph;[A:A]"
end-initializations
write("L orig: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Date types are read in textual form, time types have a numerical value
L(5).date:=date(L(5).string)
L(6).time:=convertexceltime(L(6).real)
write("L new: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! List defined with a restricted set of types
write("LU: ")
forall(i in LU) write (i,": ", i.typeid, "; ")
writeln
write("LU2: ")
forall(i in LU2) write (i,": ", i.typeid, "; ")
writeln
! Contents formated as 'text'
write("L2: ")
forall(i in L2) write (i,": ", i.typeid, "; ")
writeln
! Contents formated as 'text' enforced via preceding apostrophe
write("L3: ")
forall(i in L3) write (i,": ", i.typeid, "; ")
writeln
! The 'msheet.excel' driver does not create files
fcopy("uniondata.xlsx","uniondataout.xlsx")
! Writing data of type 'any' to an Excel file
initializations to CSTR_OUT
L as "[Output$A:A]"
LU as "[Output$R1C3:R1C"+(2+LU.size)+"]"
end-initializations
end-model
|
(!******************************************************
Mosel Example Problems
======================
file unioninout4.mos
````````````````````
Reading/writing unions from/to an Oracle database.
- Using 'initializations' and OCI statements -
(c) 2021 Fair Isaac Corporation
author: S. Heipcke, Apr. 2021, rev. Aug. 2023
*******************************************************!)
model "Union handling (OCI)"
uses "mmoci", "mmsystem"
parameters
DB="myname/mypassword@dbname" ! Login to Oracle database (not provided)
end-parameters
procedure gendb
declarations
tsucc: array ({false,true}) of string
end-declarations
tsucc(false):="failed"; tsucc(true):="succeeded"
setparam("OCIverbose",true)
if not getparam("OCIsuccess"): setioerr("Database connection failed")
! Oracle date and time formats:
setparam("timefmt", "%0d-%N-%0Y %0h.%0M.%0S.%0s %P")
setparam("datefmt", "%0d-%N-%0Y")
setparam("datetimefmt", "%0d-%N-%0Y %0h.%0M.%0S.%0s %P")
OCIlogon(DB)
if not getparam("OCIsuccess"): setioerr("Database connection failed")
(!
OCIexecute("drop table UnionTab")
OCIexecute("drop table UnionLst")
OCIexecute("drop table UnionOut")
OCIexecute("drop table Union2Out")
!)
OCIexecute("create table UnionTab (IVal integer, RVal float, BVal number(1,0), SVal varchar(20), DVal date, TVal timestamp(3))")
writeln(" - Create UnionTab (",tsucc(getparam("OCIsuccess")),")")
OCIexecute("insert into UnionTab (IVal,RVal,SVal,BVal,TVal,DVal) values(:1,:2,:3,:4,:5,:6)", [ 5, 1.75, "some text", true, '1-Jan-1 11:25:30am', '20-Mar-2021' ])
writeln(" - Insert values into UnionTab (",tsucc(getparam("OCIsuccess")),",",
getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
OCIexecute("create table UnionLst (UValues varchar(20))")
writeln(" - Create UnionLst (",tsucc(getparam("OCIsuccess")),")")
OCIexecute("insert into UnionLst (UValues) values (:1)", [string(5), string(1.75), string(true), "some text", '20-Mar-2021', '1-Jan-0 11:25:30am'])
writeln(" - Insert values into UnionLst (",tsucc(getparam("OCIsuccess")),",",
getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
OCIexecute("create table UnionOut (IVal integer, RVal float, BVal number(1,0), SVal varchar(20), DVal date, TVal timestamp(3))")
writeln(" - CreateUnionOut (",tsucc(getparam("OCIsuccess")),")")
OCIexecute("create table Union2Out (UnionValues varchar(25))")
writeln(" - Create Union2Out (",tsucc(getparam("OCIsuccess")),")")
OCIlogoff
end-procedure
gendb
declarations
L,L2: list of any
L3: list of text or real
LS: list of text
end-declarations
setparam("OCIverbose",true)
setparam("OCIdebug",true)
OCIlogon(DB)
if not getparam("OCIsuccess"): setioerr("Database connection failed")
! Reading data of different types from a database
OCIexecute("select * from UnionTab", L)
write("L orig: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Date and time types are read in textual form
L(5).date:=date(text(L(5)))
L(6).datetime:=datetime(text(L(6)))
write("L new: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Reading into a list defined with a restricted set of types
OCIexecute("select * from UnionTab", L3)
write("L3: ")
forall(i in L3) write (i,": ", i.typeid, "; ")
writeln
! Textual database types are always read as string
OCIexecute("select * from UnionLst", L2)
write("L2: ")
forall(i in L2) write (i,": ", i.typeid, "; ")
writeln
! Writing data of type 'any' to a database
OCIexecute("delete from UnionOut")
OCIexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(:1,:2,:3,:4,:5,:6)", L)
writeln(" - writing L into UnionOut succeeded (",getparam("OCIsuccess"),")")
! Writing data of type 'any' into textual fields of a database
OCIexecute("delete from Union2Out")
OCIexecute("insert into Union2Out (UnionValues) values(:1)", L)
writeln(" - writing L into Union2Out succeeded (",getparam("OCIsuccess"),")")
! Writing data of a union type to a database
OCIexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(:1,:2,:3,:4,:5,:6)", L3)
writeln(" - writing L3 into UnionOut succeeded (",getparam("OCIsuccess"),")")
! Writing text-format data to a database table with various different types
LS:=sum(i in L) [text(i)]
OCIexecute("insert into UnionOut (IVal,RVal,BVal,SVal,DVal,TVal) values(:1,:2,:3,:4,:5,:6)", LS)
writeln(" - writing LS into UnionOut succeeded (",getparam("OCIsuccess"),")")
OCIlogoff
end-model
|
(!******************************************************
Mosel Example Problems
======================
file unioninout5.mos
````````````````````
Reading/writing unions from/to spreadsheets.
- Using 'initializations from' with the xls/xlsx driver -
(c) 2021 Fair Isaac Corporation
author: S. Heipcke, Apr. 2021, rev. Feb. 2024
*******************************************************!)
model "Union handling (generic spreadsheet)"
uses "mmsheet", "mmsystem"
parameters
CSTR_IN= 'mmsheet.xls:uniondata.xls'
! CSTR_IN= 'mmsheet.xlsx:uniondata.xlsx'
CSTR_OUT= 'mmsheet.xls:uniondataout.xls'
! CSTR_OUT= 'mmsheet.xlsx:uniondataout.xlsx'
end-parameters
declarations
L,L2,L3: list of any
LU: list of text or real
LU2: list of text or real or boolean
end-declarations
! Date and time formats (make sure to use the default format of mmsystem,
! not the format used for display in the spreadsheet)
setparam("timefmt", "%0H:%0M:%0S")
setparam("datefmt", "%.y-%0m-%0d")
setparam("datetimefmt", "%.y-%0m-%0dT%0H:%0M:%0S")
! Reading data of different types from a spreadsheet file
initializations from CSTR_IN
L as "skiph;[A:A]"
L2 as "skiph;[C:C]"
L3 as "skiph;[E:E]"
LU as "skiph;[C:C]" ! This would fail to read from [A:A] due to missing boolean type
LU2 as "skiph;[A:A]"
end-initializations
write("L orig: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! Date and time types are read in textual form
L(5).date:=date(L(5).string)
L(6).time:=time(L(6).string)
write("L new: ")
forall(i in L) write (i,": ", i.typeid, "; ")
writeln
! List defined with a restricted set of types
write("LU: ")
forall(i in LU) write (i,": ", i.typeid, "; ")
writeln
write("LU2: ")
forall(i in LU2) write (i,": ", i.typeid, "; ")
writeln
! Contents formated as 'text'
write("L2: ")
forall(i in L2) write (i,": ", i.typeid, "; ")
writeln
! Contents formated as 'text' enforced via preceding apostrophe
write("L3: ")
forall(i in L3) write (i,": ", i.typeid, "; ")
writeln
! Writing data of type 'any' to a spreadsheet file
initializations to CSTR_OUT
L as "[A:A]"
LU as "[R1C3:R1C"+(2+LU.size)+"]"
end-initializations
end-model
|