Home
o++oPS (ottoProgrammingScript) essentially is a linear query language, but it also allows a wide range of computations.
It uses repeating groups (hierarchies) and has several powerful but easy to use operations for selection, restructuring, computation and joining tables and documents.
Features of o++oPS
Aims of o++oPS

The book contains numerous examples to guarantee a
quick access to the language. It contains chapters about comparisons with SQL and other languages, about the specification of tabments (TABle+ docuMENT), about query optimization and about storage structures. 
Structure Meets Tables and Documents
students.tab: STID, NAME, LOC?, SAL, DEPT, (COURSE, MARK l), (PROJ, HOURS m)m
m: set (Menge) ; l: List; a student contains 2 repeating groups (exams and projects)
Enduser Meets
Programming
Query 1: Give all students, who heard databases and algebra.
aus students.tab avec {Algebra Database} in COURSEm 
# aus: from # avec (French): with (where) 
Query 2: Give for each name, who has an exam in database all further courses with marks.
aus students.tab avec STID! COURSE=Database sans COURSE! COURSE=Database gib NAME,(COURSE,MARK m)b 
# selects students # selects exams; sans: without # b:bag 
Query 3: Print for all courses with mark 1 all students and the counts of these students per course and totally.
aus students.tab avec MARK=1 gib CNT,(COURSE,CNT,(NAME,STID m)m) CNT! ++1 STID 
# selects students and courses # counts students 
Query 4: Give all students, containing the word Otto.
aus students.tab avec Otto 
Computation 1: Compute the gross values of several prices.
77 79 567 432 *1.19 
Computation 2: Compute the grossvalue of each position and the sum of all gross values.
<TAB! ARTICLE, PRICE, COUNT m OttoRAMDB 500 20 OttoWiki 10 200 OttoCalc 20 4000 !TAB> TOTAL:=PRICE*COUNT TOTALSUM:= TOTALl ++ 
# ext: extension by a new column 
Computation 3: Assuming that we get an interest of 1 or 9 % and want to know how an amount of 100 Euro increases within a period of 10 years.
[YEAR! 2016 .. 2026] rec AMOUNT1:= first 100. next AMOUNT1 pred *1.01 at YEAR rec AMOUNT9:= first 100. next AMOUNT9 pred *1.09 at AMOUNT1 rnd 2 
# generates 11 numbers # rec recursive extension # rounds two digits after point 