Top
Email
Bottom
PHP 8 and Oracle 19c
 
Name:
Company:
Email:
Telephone:
Training type:
Delegates:


Additional Information
 

Download our latest
Android and iPhone apps ...
Click on whichever one of our Apps you are interested in

PHP 8 and Oracle 19c course at a glance

Pages
929No of slides in the Manual
Exercises
21Total No of Exercises
Sections
38No of main topics, see index below
Public
NoPublic course in the UK and Ireland
On-Site
YesWe can come to your venue
Level
11 - Beginners
2 - Intermediate
3 - Advanced
Days
5Week days but we can put on weekend courses
Duration:
Minimum skill level required:
On-Site course:
Public course:
Sections:
No of exercises:
No of pages in the manual:
Pre-Requisite course(s):
Suggested further course(s):
Price guide:
5 days
1 (1 - Beginner, 2 - Experienced 3 - Advanced)
Yes
No
38
21
929
None
Oracle Essential PLSQL 19c
Contact us for the latest pricing

PHP 8 and Oracle 19c Programming course
Exercise highlights

Using PHP to create Oracle tables
Inserting records into an Oracle Database using PHP
Looping through values in a PHP array
Writing Oracle data to Operating Systems using PHP
Displaying output in HTML using PHP

Index of PHP 8 and Oracle 19c Programming training course

PHP 8
 
 

Section
Section Name
Page

One
PHP Introduction
2

 
- PHP: Hypertext Preprocessor
3

 
- Some of its main uses
4

Two
PHP Structure
5

 
- Basic Structure of PHP
6

 
- PHP Version etc
15

 
- Use of Echo
17

 
- Concatenating Echo
19

 
- Use of Echo with Escape Characters
21

 
- Use of Echo with Calculations
27

 
- Echo versus Print
30

 
- Use of Echo with HTML
32

 
- Commenting code in PHP
34

Three
Defining PHP Variables
37

 
- Introduction
38

 
- Defining PHP Variables
39

 
- Naming PHP Variables
40

 
- Declaring PHP Variables
43

 
- Flexibility of Datatypes
45

 
- Casting Datatypes
46

 
- Using gettype() with PHP Variables
50

 
- Using var_dump() with PHP Variables
52

 
- Using settype() with PHP Variables
53

 
- Using unset() with PHP Variables
55

 
- Using Heredoc
56

 
- Using Newdoc
58

 
- Using Define for Constants in PHP
59

Four
Manipulating Variables in PHP
61

 
- Introduction
62

 
- Mathematics
63

 
- Incrementing Values
67

 
- Prefix and Postfix
69

 
- Concatenation
72

 
- Exercise One
76

Five
Using PHP built in String Functions
81

 
- Introduction
82

 
- Miscellaneous String Functions
84

 
- Changing Case of Strings
89

 
- Substringing Strings
90

 
- Searching Strings
92

 
- Trimming Strings
100

 
- Nesting Functions
101

Six
Using PHP built in Number Functions
102

 
- Introduction
103

 
- Number Rounding
104

 
- Exercise Two
108

Seven
Introduction to PHP Arrays
111

 
- Introduction
112

 
- Numeric Arrays
114

 
- Populating Numeric Arrays
115

 
- Populating Numeric Arrays with range()
118

 
- Populating Numeric Arrays with array_pad()
120

 
- Populating Associative Arrays
123

 
- Using count() or sizeof()
129

 
- Using var_dump()
130

 
- Using print_r()
132

 
- Manually traversing Arrays
133

 
- Converting Arrays
135

 
- Using implode() and explode()
136

 
- Using unset()
138

 
- Multi-Dimensional Arrays
139

 
- Using var_dump() on multi-dimension arrays
142

 
- Using count() on multi-dimension arrays
145

 
- Three dimensional arrays
146

 
- Accessing Three Dimensional Arrays
148

 
- Alternative declaration of Arrays
149

 
- Exercise Three
150

Eight
Using Array Functions
156

 
- Introduction
157

 
- Using array_sum() / array_product()
158

 
- Sorting Arrays
159

 
- assort() and arsort()
165

 
- ksort() and krsort()
166

 
- array_multisort()
167

 
- array_reverse()
171

 
- array_flip()
172

 
- array_fill() and array_fill_keys()
173

 
- array_combine()
178

 
- array_intersect()
179

 
- array_diff()
180

 
- array_merge()
181

 
- array_unique()
182

 
- Exercise Four
183

Nine
Conditional PHP Statements
187

 
- Conditional tests
188

 
- Comparison Operators
189

 
- If statement structure
191

 
- Grouping processes in an 'If' statement
193

 
- Alternative processing
195

 
- Multiple 'If' statements
196

 
- Testing different datatypes
200

 
- Testing Strings
202

 
- Testing Booleans
206

 
- Testing for nulls
208

 
- Alternative Colon syntax
209

 
- Multiple Condition tests (and)
211

 
- Multiple Condition tests (or)
212

 
- Multiple Condition tests (xor)
213

 
- Nested If Conditions
214

 
- Ternary Operator
215

 
- Using PHP built in Functions for testing
218

 
- Exercise Five
220

Ten
Alternative Condition Testing
223

 
- Introduction to Switch
224

 
- Switch Syntax
225

 
- Using Break with Switch
227

 
- Using Default with Switch
229

 
- Using Switch with Colon Syntax
230

 
- Advanced Switch Testing
231

 
- Mixing If Conditions with Switch
234

 
- Introduction to Match
236

 
- Match Syntax
237

 
- Using Default with Match
239

 
- Advanced Match Testing
240

 
- Match with Functions
241

 
- Exercise Six
242

Eleven
Looping through values in PHP
244

 
- Introduction
245

 
- Foreach processing of Arrays
246

 
- Foreach processing with Colon syntax
250

 
- Multidimensional Arrays with Foreach
251

 
- While Loops
253

 
- While Loops with Colon Syntax
255

 
- Using Break to exit Loops
256

 
- Do .. While Loops
257

 
- Do .. While and While Loops with Arrays
259

 
- For Loops
260

 
- For Loops with Colon Syntax
262

 
- For Loops with empty expressions
263

 
- For Loops with more than one variable
265

 
- For Loops with Arrays
266

 
- Advanced Breaking of Loops
268

 
- Using Continue with Loops
275

 
- Exercise Seven
278

Twelve
Using Dates within PHP
282

 
- Introduction
283

 
- Creating String of Dates
284

 
- Converting Strings to Dates using strtotime()
285

 
- Limitation of using strtotime()
292

 
- Using Format Masks with date()
293

 
- Comparing Dates
295

 
- Adding to Dates
296

 
- Using mktime()
297

 
- Using getdate()
298

 
- Other Date Functions
299

 
- Exercise Eight
300

Thirteen
Regular Expressions using PCRE
302

 
- Introduction
303

 
- Testing for 'Contains' within a String
305

 
- Starts or Ends using Line Anchors
306

 
- Starts and Ends using Line Anchors (or)
308

 
- Using the Dot (Any Character)
309

 
- Using {Intervals}
311

 
- Using Character Lists []
313

 
- Using Character Lists to exclude matches
316

 
- Using Escape Sequences
317

 
- Using the Question Mark (Optional)
319

 
- Using the Plus sign (Mandatory)
321

 
- Using the Star sign (Optional)
322

 
- Backreferencing
323

 
- POSIX
325

 
- Using preg_replace()
327

 
- Using preg_replace() with arrays
329

 
- Using preg_filter()
331

 
- Using preg_replace_callback()
332

 
- Using preg_match()
333

 
- Preg_match() with PREG_OFFSET_CAPTURE
334

 
- Using preg_match_all()
335

 
- Using preg_grep()
337

 
- Using preg_last_error()
339

 
- Using preg_quote()
340

 
- Using preg_split()
341

 
- Using preg_split() with arrays
343

 
- Exercise Nine
344

Fourteen
PHP Functions
347

 
- Introduction
348

 
- Rudimentary Functions
349

 
- Function Positioning
351

 
- Passing Parameters to Functions
352

 
- Passing Multiple Parameters to Functions
354

 
- Defaulting Parameters in Functions
355

 
- Returning Values
356

 
- Returning Values in an Array
358

 
- The scope of Variables
359

 
- Global Variables
361

 
- Passing Arguments by Reference
362

 
- Dynamic Function Calls
363

 
- Calling Functions from other Functions
366

 
- Calling PHP Functions in other files
367

 
- Structure of the PHP file
368

 
- Calling the PHP file
369

 
- Calling the PHP file using include()
370

 
- Passing Parameters to another PHP file
373

 
- Exercise Ten
374

Fifteen
PHP Cookies
377

 
- Introduction
378

 
- Creating Cookies in PHP with setcookie()
379

 
- Setting the expiry date for Cookies
381

 
- Setting the path for Cookies
383

 
- Setting the domain/security for Cookies
384

 
- Reading Cookies with $_COOKIE
385

 
- Using Arrays with Cookies
387

Sixteen
PHP Sessions
388

 
- Introduction
389

 
- Creating Sessions
390

 
- Testing Sessions
391

 
- Using Arrays with Sessions
392

 
- Deleting Sessions
393

Seventeen
PHP Form Processor
394

 
- Introduction
395

 
- Anatomy of a HTML form
397

 
- Reading input using $_POST/$_GET
400

 
- Reading input using $_POST
401

 
- Reading input using $_GET
402

 
- $_GET versus $_POST
403

 
- Using $_REQUEST
404

 
- Using $_SERVER
405

 
- Preventing Invalid HTML in Forms
409

 
- Emailing in PHP
410

 
- Emailing HTML in PHP
412

 
- Emailing with attachments in PHP
414

 
- Exercise Eleven
415

Eighteen
PHP Errors
418

 
- Introduction
419

 
- Typical Errors
420

 
- Suppressing Errors
422

 
- $php_errormsg
425

 
- Using die to end the processing
427

 
- Using exit to end the processing
428

 
- Using isset() $php_errormsg
429

 
- Alternative way to use $php_errormsg
430

 
- Using error_reporting()
431

 
- Using error_reporting() report levels
434

 
- Custom error handling
436

 
- Raising Errors using trigger_error()
440

 
- Using error_log
442

 
- Using a centralised error handler
445

Nineteen
Exceptions
447

 
- Introduction
448

 
- Exception Syntax
449

 
- The 'try'
450

 
- The 'throw'
451

 
- The 'catch'
452

 
- Standard Exceptions
453

 
- Developer Defined Exceptions
456

 
- Processing the Exceptions
457

 
- Exception Methods
458

 
- set_exception_handler()
460

 
- Re-throwing Exceptions
462

 
- Finally
463

 
- Exercise Twelve
465

Twenty
PHP File I/O
467

 
- Introduction
468

 
- Using fopen()
469

 
- Access Modes
470

 
- Using fgets()
472

 
- Using fgetc()
475

 
- Using file()
476

 
- Using file_get_contents()
477

 
- Using fopen() with URLs
479

 
- Using fputs() / fwrite()
480

 
- Using file_put_contents()
482

 
- Working with Comma Separated Files (CSV)
485

 
- Using fgetcsv()
487

 
- Using fputcsv()
489

 
- Working with Binary Files
494

 
- Checking the Size of Bytes written
486

 
- Operating System Functions
495

 
- Using exec()
497

Twenty One
Creating HTML with PHP
499

 
- Introduction
500

 
- Why use PHP
501

 
- HTML example
502

 
- PHP simulating the HTML example
504

 
- Using PHP_EOL
508

 
- Using PHP to create dynamic HTML
509

 
- Using htmlspecialchars()
516

Twenty Two
PHP Object Orientated Programming
517

 
- Introduction
518

 
- Terminology
519

 
- Instances
520

 
- Extending Classes
522

 
- Using '$this'
524

 
- Private and Public Methods
526

 
- Creating new Classes
527

 
- Referencing via Variables
529

 
- Exercise Thirteen
530

Oracle 19c
 
 

Section
Section Name
Page

One
Introduction to Oracle
2
 
- What is SQL used for ?
3
 
- Why use Oracle with PHP ?
4
 
- Definition of a Database
5
 
- Using Oracle with PHP
6
Two
Oracle Database Objects
7
 
- Introduction
8
 
- Tables
9
 
- Views
10
 
- Materialized Views
11
 
- Indexes
12
 
- Sequences
13
 
- Packages, Functions and Procedures
14
 
- Schemas
15
Three
Connecting to Oracle via PHP
16
 
- Introduction
17
 
- Using oci_connect
18
Four
Querying from Oracle
19
 
- Introduction
20
 
- oci_parse and oci_execute
22
 
- oci_fetch_row
25
 
- oci_num_rows and oci_num_fields
26
 
- Detecting Oracle errors
30
 
- oci_error
34
 
- Detecting a Parse error
36
 
- Detecting an Execution error
38
 
- Oracle Metadata
40
 
- User_tables
43
 
- What columns are in a table
45
 
- Using OCI_DESCRIBE_ONLY
46
 
- User_tab_columns
51
 
- Exercise One
57
Five
Simple Oracle Queries
61
 
- Introduction
62
 
- Selecting more than one column
64
 
- Counting Records in an Oracle Table
65
 
- Displaying Literals in a Select statement
67
 
- Using Associative Arrays with oci_fetch
71
 
- Column Aliases
74
 
- Column Manipulation with SQL Functions
77
 
- Concatenating Columns in SQL
83
 
- Performing Calculations in SQL
84
 
- Ordering Data in SQL
85
 
- Ordering more than one Column
87
 
- Ordering with nulls first / nulls last
88
 
- Manipulating Dates in SQL
89
 
- Displaying Dates in SQL
90
 
- Using user_tab_columns with functions
91
 
- Exercise Two
93
Six
Limiting Data Selected with a Where Clause
101
 
- Limiting Data in SQL
102
 
- Structure of an SQL Where Clause
103
 
- Different types of SQL Where Clauses
104
 
- Handling Nulls in Where Clauses
112
 
- Case Restrictions in SQL Where Clauses
113
 
- Using Functions in Where Clauses
114
 
- Using PHP Variables in Where clauses
117
 
- Using PHP oci_bind_by_name in Where clauses
118
 
- Rownum in SQL Tables
120
 
- Using Rowid in SQL Tables
122
 
- Fetch first rows of a Table in Oracle 19c (Top-N)
124
 
- Using Percent with Fetch in Oracle 19c
125
 
- Using Offset with Fetch in Oracle 19c
126
 
- Using With Ties with Fetch in Oracle 19c
127
 
- Exercise Three
128
Seven
Oracle Datatypes
134
 
- Introduction
135
 
- Varchar2
136
 
- ORA-00910: specified length too long for its datatype
138
 
- Varchar2 and Char
139
 
- Number
140
 
- Date
141
 
- Float
142
 
- Long
143
 
- Large Objects
144
 
- Bfile
148
Eight
Aggregating Values
149
 
- Introduction
150
 
- Using Group By
151
 
- Using Having with Group By
154
 
- Using With Rollup to Total Grouping
156
Nine
Tree Walking Tables in SQL
157
 
- Introduction
158
 
- Syntax for Tree Walking in SQL
160
 
- Example of Tree Walking in SQL
162
 
- Advanced Ordering of Siblings in Tree Walks
163
 
- Sys_Connect_By_Path
165
 
- Exercise Four
167
Ten
Joining Tables in an SQL Statement
171
 
- Using Table Aliases in SQL
172
 
- Linking Tables in an SQL Statement
174
 
- Problems with Joining Tables in SQL
179
 
- Methods of Joining Tables in SQL
181
 
- Using Ansi SQL/86 to join Tables
182
 
- Ansi SQL/86 and Outer Joins
183
 
- Ansi SQL/99 Standards (Natural Joins)
186
 
- Ansi SQL/99 Standards (Cross Joins)
187
 
- Ansi SQL/99 Standards (Joins/Using)
188
 
- Ansi SQL/99 Standards (On)
189
 
- Ansi SQL/99 Standards (Multiple On)
190
 
- Ansi SQL/99 Standards (Left Outer Joins)
191
 
- Ansi SQL/99 Standards (Right Outer Joins)
192
 
- Ansi SQL/99 Standards (Full Outer Joins)
193
 
- Merging Tables in SQL
194
 
- Using Union to Merge Tables
195
 
- Using Union All to Merge Tables
196
 
- Using Intersect to Merge Tables
197
 
- Using Minus to Merge Tables
198
 
- Knowledge Check
199
 
- Using the Merge Syntax
204
 
- Exercise Five
206
Eleven
Advanced Queries
210
 
- Introduction
211
 
- Pivot
212
 
- Changing the Pivot Headings of X Axis
218
 
- Unpivot
224
 
- Unpivot and Null values
228
 
- First/Last_Value functions
229
 
- Lead and Lag Functions
234
 
- Window Specification
237
 
- Breakdown of Window Specification
238
 
- Window Specification – The Arguments
240
 
- Window Specification – The Order By
243
 
- Window Specification – The Windowing
245
 
- Window Specification – Rows between
246
 
- Window Specification – current row
247
 
- Window Specification – unbounded preceding
250
 
- Window Specification – bounded preceding
251
 
- Window Specification – between
253
 
- Window Specification – current row
247
 
- Difference between Range and Rows
255
 
- Ranking functions
256
 
- Using Ntile Function in SQL
265
 
- Using Listagg function
267
 
- Using Case in Select statements
271
 
- Using Searched Case Function
276
 
- Using Searched Case Function with Sub-queries
278
 
- Using Sample in SQL
279
 
- Using Width_Bucket
281
 
- Exercise Six
284
Twelve
Creating Database Objects
288
 
- Creating Tables
289
 
- Mandatory Columns in SQL Tables
291
 
- Creation Syntax for Tables
292
 
- Virtual Columns
294
 
- Creating Virtual Columns with new Table
295
 
- Specifying Virtual Column Datatype and Size
296
 
- Adding Virtual Columns to Existing Table
297
 
- Using Virtual Columns
298
 
- Using Virtual Columns with Functions
300
 
- Limitations of Virtual Columns (ORA-54012)
301
 
- Limitations of Virtual Columns (ORA-54013)
303
 
- Viewing Virtual Columns in user_tab_columns
304
 
- Invisible Columns in Oracle 19c
305
 
- Commenting on Tables in SQL
308
 
- Commenting on Columns in SQL
309
 
- Creating Indexes in SQL
310
 
- Index Creation
313
 
- Disabling Indexes
315
 
- Creating Views
316
 
- Creating Sequences
318
 
- Using Sequences
319
 
- Altering Sequences
321
 
- Using Default Value in SQL Tables
322
 
- Using Default Value in Oracle 19c
323
 
- Using Identity in Oracle 19c
324
 
- Renaming Objects in an Oracle Database
325
 
- Dropping Objects from an Oracle Database
328
 
- Granting Access to other Schemas
329
 
- Accessing other Schemas
332
 
- Creating Synonyms
333
 
- Exercise Seven
334
Thirteen
Altering and Populating Oracle Tables
340
 
- Some Rules when altering Tables
341
 
- Syntax for Altering Tables
342
 
- Rules when populating Tables in SQL
343
 
- Syntax for populating Tables
344
 
- Using Variables to Populate Tables
349
 
- General Comments
350
 
- Updating Data
351
 
- Deleting Data
353
 
- Handling Large Objects in SQL Plus
354
 
- Handling Bfiles in SQL Plus
356
Fourteen
Committing Records
357
 
- The difference between DDL and DML
358
 
- Committing and Rollback in PHP
361
 
- Loading XML file naming Columns
292
 
- Loading XML file using Set
293
Fifteen
Materialized Views
362
 
- Introduction
363
 
- Syntax for Creating Materialized Views
365
 
- Refreshing Materialized Views
367
 
- Building Materialized Views
373
 
- Miscellaneous
375
Sixteen
Miscellaneous
376
 
- Introduction
377
 
- Changing Passwords with oci_password_change
378
 
- Oracle Database Version (oci_server_version)
379
 
- Setting timeout with oci_set_call_timeout
380
 
- Exercise Eight
381

Sections of PHP 8 / Oracle 19c

PHP 8

1
PHP Introduction

2
PHP Structure

3
Defining PHP Variables

4
Manipulating Variables in PHP

5
Using PHP built in String Functions

6
Using PHP built in Number Functions

7
Introduction to PHP Arrays

8
Using Array Functions

9
Conditional PHP Statements

10
Advanced Condition Testing

11
Looping through values in PHP

12
Using Dates within PHP

13
Regular Expressions using PCRE

14
PHP Functions

15
PHP Cookies

16
PHP Sessions

17
PHP Form Processor

18
PHP Errors

19
Exceptions

20
PHP File I/O

21
Creating HTML with PHP

22
PHP Object Orientated Programming

Oracle 19c

1
Introduction to Oracle
2
Oracle Database Objects
3
Connecting to Oracle via PHP
4
Querying from Oracle
5
Simple Oracle Queries
6
Limiting Data Selected with a Where Clause
7
Oracle Datatypes
8
Aggregating Values
9
Tree Walking Tables in SQL
10
Joining Tables in an SQL Statement
11
Advanced Queries
12
Creating Database Objects
13
Altering and Populating Oracle Tables
14
Committing Records
15
Materialized Views
16
Miscellaneous


Synopsis for PHP 8 and Oracle 19c Programming training course

Clients ask sometimes what the pace of a particular course is like, is it fast like a Formula One car trying to reach the chequered flag before anyone else (good luck with that this year, Lewis Hamilton),

2021 F1 World Champion

or is it like a tortoise idly munching on a particularly delicious piece of lettuce, savouring every mouthful (slower than Max Verstapphen) …

Tortoise Media

well the answer is; the courses are designed for our Consultants to give the best experience to every Delegate on the course. Sometimes a course has a group of people who have little or no programming experience, sometimes everyone already knows at least one language and is merely converting to the new syntax; and other times the Delegates are a mixed bunch of differing skill sets, in this case the Consultant will work to the least knowledgeable on the course, in a lot of cases this proves refreshing for the other Delegates as they have time to ponder concepts that they may have taken for granted and not given any deep thought to.

When it comes to the exercises, Delegates with more experience are given additional tasks to perform, outside the normal set in the comprehensive manuals we provide, but relevant and designed to stretch them while the more inexperienced get a thorough grounding in the topic they have just been presented with. We've been doing this for over twenty years, check out our reviews, we know what we are doing.

This course, the

PHP 8 and Oracle 19c training course

is designed to introduce Delegates to using PHP programming to achieve dynamic and professional web-pages, in the final two days it then not only covers the

use of SQL in an Oracle Database

but also how to use PHP to perform interrogation of tables and views, moving onto creating Oracle Database objects from a webpage.

If you are only interested in using PHP with an Oracle Database because you already know PHP, the second part of the course is available as a separate module, Oracle 19c and PHP course, speak to one of our Client Consultants and they will be happy to provide you with a series of scenario courses and prices to fit your requirements.

This course is only available as an on-site or one to one course, our public version of this course uses MySQL, a similar product to Oracle (they actually own MySQL) but the syntax is way different, again talk to our Consultants, we are very flexible and can adapt for your needs.

Flexible Consultancy

Payment as for all of our courses and services can be made via Bacs, cheque or credit card, there is a 4% credit card surcharge and of course all of our prices are subject to vat at the rate in operation at the time of invoicing.

Request for detailsClick for the contact form for the PHP 8 and Oracle 19c training course
Public Courses
Oracle Essential SQL 21c
Days
2
Pages
340
Exercises
8
Sections
15
Public
Yes
On-Site
Yes
Public Courses
Oracle Essential PLSQL 21c
Days
3
Pages
384
Exercises
13
Sections
25
Public
Yes
On-Site
Yes
Public Courses
Using SQL with Oracle SQL Developer 19.2
Days
4
Pages
884
Exercises
18
Sections
37
Public
Yes
On-Site
Yes
Public Courses
Essential JavaScript
Days
4
Pages
660
Exercises
16
Sections
31
Public
Yes
On-Site
Yes
Public Courses
Essential CSS 3
Days
4
Pages
800
Exercises
15
Sections
30
Public
Yes
On-Site
Yes
Public Courses
Essential SQLite 3
Days
3
Pages
550
Exercises
12
Sections
24
Public
Yes
On-Site
Yes
Public Courses
Essential MySQL 8
Days
4
Pages
533
Exercises
16
Sections
24
Public
Yes
On-Site
Yes
Public Courses
Essential Python 3
Days
5
Pages
955
Exercises
17
Sections
41
Public
Yes
On-Site
Yes
Public Courses
Oracle Application Express 20
Days
0
Pages
0
Exercises
0
Sections
0
Public
Yes
On-Site
Yes
Public Courses
PHP 8 and MySQL 8
Days
5
Pages
870
Exercises
23
Sections
38
Public
Yes
On-Site
Yes
Public Courses
Java 17 Programming with Eclipse 2021-12
Days
5
Pages
788
Exercises
23
Sections
44
Public
Yes
On-Site
Yes
Public Courses
Java 17 Swing with Eclipse 2021-12
Days
5
Pages
756
Exercises
19
Sections
35
Public
Yes
On-Site
Yes
Click on the course name to see full details, left and right to view other courses