SQL – Procedures And Functions

Slides:



Advertisements
Similar presentations
Overview of programming in C C is a fast, efficient, flexible programming language Paradigm: C is procedural (like Fortran, Pascal), not object oriented.
Advertisements

® IBM Software Group © IBM Corporation QUY Thai Duy – ITFac DLU Lesson 12: SQL PL Stored Procedures.
Programming Languages and Paradigms The C Programming Language.
AN INTRODUCTION TO PL/SQL Mehdi Azarmi 1. Introduction PL/SQL is Oracle's procedural language extension to SQL, the non-procedural relational database.
Stored Procedure, UDF and Triggers Pertemuan 9 Matakuliah: T0413 Tahun: 2009.
Stored Procedure Language Stored Procedure Overview Stored Procedure is a function in a shared library accessible to the database server can also write.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 13 Introduction to SQL Programming Techniques.
Creating Database Tables CS 320. Review: Levels of data models 1. Conceptual: describes WHAT data the system contains 2. Logical: describes HOW the database.
Introduction to PL/SQL Lecture 0 – Self Study Akhtar Ali.
Phonegap Bridge – File System CIS 136 Building Mobile Apps 1.
DB2. 2 Copyright © 2005, Infosys Technologies Ltd ER/CORP/CRS/DB01/003 Version No:2.0a Session Plan SPUFI Hands On Introduction to Embedded SQL DCLGEN.
Introduction to PL/SQL. Procedural Language extension for SQL Oracle Proprietary 3GL Capabilities Integration of SQL Portable within Oracle data bases.
Copyright © Curt Hill SQL The Data Definition Language.
CIS Computer Programming Logic
Lecture 4 PL/SQL language. PL/SQL – procedural SQL Allows combining procedural and SQL code PL/SQL code is compiled, including SQL commands PL/SQL code.
Stored Procedures, Transactions, and Error-Handling
CS 3630 Database Design and Implementation. Your Oracle Account UserName is the same as your UWP username Followed Not case sensitive Initial.
CHAPTER:14 Simple Queries in SQL Prepared By Prepared By : VINAY ALEXANDER ( विनय अलेक्सजेंड़र ) PGT(CS),KV JHAGRAKHAND.
CSC 2720 Building Web Applications Database and SQL.
ICS 321 Fall 2009 ODBC, JDBC & Stored Procedures Asst. Prof. Lipyeow Lim Information & Computer Science Department University of Hawaii at Manoa 10/8/20091Lipyeow.
Copyright © Curt Hill Stored Procedures In Transact-SQL.
Triggers and Stored Procedures in DB 1. Objectives Learn what triggers and stored procedures are Learn the benefits of using them Learn how DB2 implements.
SQL FUNDAMENTALS SQL ( Structured Query Language )
11 3 / 12 CHAPTER Databases MIS105 Lec15 Irfan Ahmed Ilyas.
Set path vs current schema. Set Current Schema ‘The CURRENT SCHEMA special register specifies a VARCHAR(128) value that identifies the schema name used.
Property of Jack Wilson, Cerritos College1 CIS Computer Programming Logic Programming Concepts Overview prepared by Jack Wilson Cerritos College.
Stored Procedures Week 9. Test Details Stored Procedures SQL can call code written in iSeries High Level Languages –Called stored procedures SQL has.
SQL/400 03/03/2003  DMC Consulting, 1993 SQL – DDL Data Definition Language Copyright  1992, 1993 BY DMC CONSULTING, INC. ALL RIGHTS RESERVED 5650 West.
SCUHolliday - coen 1788–1 Schedule Today u Modifications, Schemas, Views. u Read Sections (except and 6.6.6) Next u Constraints. u Read.
Programmatic SQL Shaista Khan CS 157B. Topic Embedded SQL statements in high-level programming languages.
Guide to Oracle 10g ITBIS373 Database Development Lecture 4a - Chapter 4: Using SQL Queries to Insert, Update, Delete, and View Data.
SQL Fundamentals  SQL: Structured Query Language is a simple and powerful language used to create, access, and manipulate data and structure in the database.
MySQL More… 1. More on SQL In MySQL, the Information Schema is the “Catalog” in the SQL standard SQL has three components: Data definition Data manipulation.
# 1# 1 Creating Tables, Setting Constraints, and Datatypes What is a constraint and why do we use it? What is a datatype? What does CHAR mean? CS 105.
Sql DDL queries CS 260 Database Systems.
©Silberschatz, Korth and Sudarshan5.1Database System Concepts - 6 th Edition Procedural Constructs in SQL Chapter 5.
Academic Year 2015 Autumn. MODULE CC2006NI: Data Modelling and Database Systems Academic Year 2015 Autumn.
Last Updated : 27 th April 2004 Center of Excellence Data Warehousing Group Teradata RDBMS Concepts.
Programming in postgreSQL with PL/pgSQL ProceduralLanguageextension topostgreSQL 1.
1. Advanced SQL Functions Procedural Constructs Triggers.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
Web Database Programming Using PHP
Creating Database Objects
ASP.NET Programming with C# and SQL Server First Edition
CS 3630 Database Design and Implementation
User-Written Functions
Dynamic SQL Writing Efficient Queries on the Fly
22BI Creating SQL Functions
A bit of C programming Lecture 3 Uli Raich.
Web Database Programming Using PHP
Objectives Identify the built-in data types in C++
Views, Stored Procedures, Functions, and Triggers
Chapter 5: Advanced SQL Database System concepts,6th Ed.
Dynamic SQL Writing Efficient Queries on the Fly
Error Handling Summary of the next few pages: Error Handling Cursors.
Designing Tables for a Database System
ORACLE SQL Developer & SQLPLUS Statements
CPSC-310 Database Systems
Topics Introduction to File Input and Output
Chapter 14 - Advanced C Topics
SQL data definition using Oracle
CIS 136 Building Mobile Apps
Oracle Data Definition Language (DDL)
PL/SQL week10.
Information Management
Topics Introduction to File Input and Output
Stored Procedure Language
Creating Database Objects
Database Instructor: Bei Kang.
SQL (Structured Query Language)
Presentation transcript:

SQL – Procedures And Functions Copyright  1992, 1993 BY DMC CONSULTING, INC. ALL RIGHTS RESERVED 5650 West Central Avenue, Suite B, Toledo, OH 43615 AS/400 is a trademark of International Business Machines Corporation

Stored Procedures

Stored Procedures SQL: Written in SQL SQL Proc External: Written in HL Languages such as RPGLE

Stored Procedures CREATE PROCEDURE proc-name Parameters… IN - INPUT PARAMETERS OUT - OUTPUT PARAMETERS INOUT - INPUT/OUTPUT PARAMETERS CREATE PROCEDURE TESTPROC (IN EMPNO DECIMAL(5,0),OUT EMPNAM CHAR(30))…

Stored Procedures Internal Syntax: CREATE PROCEDURE TESTPROC (IN EMPNO DECIMAL(5,0),OUT EMPNAM CHAR(30))… External Syntax: (IN DECIMAL(5,0),OUT CHAR(30))…

Stored Procedures Overloading: Its possible to create multiple versions of the same procedure, each with a different number of parameters passed: CREATE PROCEDURE TESTPROC (IN EMPNO DECIMAL(5,0))… (IN EMPNO INTEGER,OUT EMPNAM CHAR(30))… In this case, the system generates a unique specific name for each version of the procedure. This is discussed more later.

SQL Create Statement Data Types CHAR – Up to 32,767 bytes of alphanumeric data (32.765 if Null capable) DECIMAL – Up to 63 digits of packed numeric data NUMERIC – Up to 63 digits of zoned numeric data. DATE – Date Data type using a 4 digit year TIME – Time data type in 24 hr format TIMESTAMP - Timestamp data type include date, time, and microseconds (6 digits) INTEGER (INT) – Large Integer (4 Bytes) SMALLINT – A small integer (2 Bytes) BIGINT – A big integer (8 Bytes) FLOAT – Floating Point data type (8 Byte) VARCHAR - Up to 32,740 bytes of character data (32.739 if Null capable) LONG VARCHAR – Variable Length Character Data up to the length of the row BINARY – Up to 32,767 bytes of binary data (32,765 if Null Capable) Note: Decimal is Packed data. Numeric is Zoned data.

SQL Create Statement Data Types VARBINARY - Up to 32,740 bytes of binary data (32.739 if Null capable) GRAPHIC – Up to 16,383 double byte characters (16,382 if Null capable) VARGRAPHIC – Up to 16370 double byte characters (16,369 if Null capable) LONG VARGRAPHIC – A string of double byte characters up to the length of the row DOUBLE – Double precision floating point (8 Byte) REAL – Single Precision Floating point (4 Byte) BLOB – Variable length binary string up to 2 gigabytes in length CLOB – Variable length string of characters up to 1 gigabyte in length DATALINK – A string up to 32,718 bytes containing a URL (32,717 if Null capable) DBCLOB – Variable length double byte character string up to 1 gigabyte in length User-Defined (UDT) – Custom functions built with the CREATE FUNCTION statement ROWID - System generated key that uniquely defines a row (40 Bytes)

Stored Procedures create procedure your-lib/getcust (in cust char(10)) SQL Procedures create procedure your-lib/getcust (in cust char(10)) language sql dynamic result sets 1 begin declare stmt char(50); declare c1 cursor for s1; set stmt = 'SELECT * FROM your-lib/CUST WHERE CNUMBER = ‘ CONCAT Cust; prepare s1 from stmt; open c1; return; end

Stored Procedures call kpflib.getcust ('1’);

Stored Procedures create procedure GETCUST (in Custid char(10), out Oname char(50), out Oaddr1 char(50), out Oaddr2 char(50), out Ocity char(50), out Ostate char(2), out Ozip char(10)) language sql begin SELECT cname,caddr1,caddr2,ccity,cstate,czip into Oname,oaddr1,oaddr2,ocity,ostate,ozip from CUST where cnumber = dec(Custid); return; end

Stored Procedures call kpflib.getcust ('1', ' ',' ',' ',' ',' ',' ');

Stored Procedures CREATE PROCEDURE proc-name parameters LANGUAGE SQL Create Procedure Options CREATE PROCEDURE proc-name parameters LANGUAGE SQL options RESULT SETS – Number of result sets returned LANGUAGE – C, SQL, RPG, etc… SPECIFIC – Unique name in case of overloading FENCED – Function should run in a separate thread from the main job. NOT FENCED – Can run in the same thread

Stored Procedures CREATE PROCEDURE proc-name parameters LANGUAGE SQL Create Procedure Options CREATE PROCEDURE proc-name parameters LANGUAGE SQL options NOT DETERMINISTIC – Return value can be unique on every call DETERMINISTIC – Always returns the same results with the same inputs MODIFIES SQL DATA – The Procedure will use SQL to update data in a table READS SQL DATA – The Procedure will use SQL to read data CONTAINS SQL – Some SQL Code is included CALLED ON NULL INPUT – If inputs are null, should the call execute?

SQL Create Function Statement DETERMINISTIC UPPER(‘a’) = ‘A’ date('09/01/2007') = 09/01/07 NOT DETERMINISTIC ORDSTAT(100101) = ‘*’ Now() = 2007-09-01-11.30.30.453176

Stored Procedures Additional commands for Stored Procedures: BEGIN CALL CASE END FOR GET GOTO IF ITERATE LEAVE LOOP REPEAT RESIGNAL RETURN SIGNAL WHILE

Stored Procedures Special Registers – (Predefined Fields) CURRENT DATE CURRENT DEGREE CURRENT TIME CURRENT TIMEZONE CURRENT TIMESTAMP CURRENT SCHEMA CURRENT SERVER USER CURRENT PATH SESSION_USER SYSTEM_USER

Stored Procedures CREATE PROCEDURE UPDATE_SALARY_2 Sample Stored Procedures CREATE PROCEDURE UPDATE_SALARY_2 (IN EMPLOYEE_NUMBER CHAR(6), IN RATING INT) LANGUAGE SQL MODIFIES SQL DATA CASE RATING WHEN 1 THEN UPDATE CORPDATA.EMPLOYEE SET SALARY = SALARY * 1.10, BONUS = 1000 WHERE EMPNO = EMPLOYEE_NUMBER; WHEN 2 THEN UPDATE CORPDATA.EMPLOYEE SET SALARY = SALARY * 1.05, BONUS = 500 ELSE UPDATE CORPDATA.EMPLOYEE SET SALARY = SALARY * 1.03, BONUS = 0 END CASE

Stored Procedures CREATE PROCEDURE RETURN_DEPT_SALARY 1 of 2 Sample Stored Procedures CREATE PROCEDURE RETURN_DEPT_SALARY 1 of 2 (IN DEPT_NUMBER CHAR(3), OUT DEPT_SALARY DECIMAL(15,2), OUT DEPT_BONUS_CNT INT) LANGUAGE SQL READS SQL DATA P1: BEGIN DECLARE EMPLOYEE_SALARY DECIMAL(9,2); DECLARE EMPLOYEE_BONUS DECIMAL(9,2); DECLARE TOTAL_SALARY DECIMAL(15,2)DEFAULT 0; DECLARE BONUS_CNT INT DEFAULT 0; DECLARE END_TABLE INT DEFAULT 0; DECLARE C1 CURSOR FOR SELECT SALARY, BONUS FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = DEPT_NUMBER;

Stored Procedures DECLARE CONTINUE HANDLER FOR NOT FOUND 2 of 2 Sample Stored Procedures DECLARE CONTINUE HANDLER FOR NOT FOUND 2 of 2 SET END_TABLE = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET DEPT_SALARY = NULL; OPEN C1; FETCH C1 INTO EMPLOYEE_SALARY, EMPLOYEE_BONUS; WHILE END_TABLE = 0 DO SET TOTAL_SALARY = TOTAL_SALARY + EMPLOYEE_SALARY + EMPLOYEE_BONUS; IF EMPLOYEE_BONUS > 0 THEN SET BONUS_CNT = BONUS_CNT + 1; END IF; END WHILE; CLOSE C1; SET DEPT_SALARY = TOTAL_SALARY; SET DEPT_BONUS_CNT = BONUS_CNT; END P1

Stored Procedures CREATE PROCEDURE CREATE_BONUS_TABLE 1 of 2 Sample Stored Procedures CREATE PROCEDURE CREATE_BONUS_TABLE 1 of 2 (IN DEPT_NUMBER CHAR(3), INOUT CNT INT) LANGUAGE SQL MODIFIES SQL DATA CS1: BEGIN ATOMIC DECLARE NAME VARCHAR(30) DEFAULT NULL; DECLARE CONTINUE HANDLER FOR SQLSTATE ’42710’ SELECT COUNT(*) INTO CNT FROM DATALIB.EMPLOYEE_BONUS; DECLARE CONTINUE HANDLER FOR SQLSTATE ’23505’ SET CNT = CNT - 1; DECLARE UNDO HANDLER FOR SQLEXCEPTION SET CNT = NULL; IF DEPT_NUMBER IS NOT NULL THEN CREATE TABLE DATALIB.EMPLOYEE_BONUS (FULLNAME VARCHAR(30), BONUS DECIMAL(10,2), PRIMARY KEY (FULLNAME));

Stored Procedures FOR_1:FOR V1 AS C1 CURSOR FOR 2 of 2 Sample Stored Procedures FOR_1:FOR V1 AS C1 CURSOR FOR 2 of 2 SELECT FIRSTNME, MIDINIT, LASTNAME, BONUS FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = CREATE_BONUS_TABLE.DEPT_NUMBER DO IF BONUS > 0 THEN SET NAME = FIRSTNME CONCAT ’ ’ CONCAT MIDINIT CONCAT ’ ’CONCAT LASTNAME; INSERT INTO DATALIB.EMPLOYEE_BONUS VALUES(CS1.NAME, FOR_1.BONUS); SET CNT = CNT + 1; END IF; END FOR FOR_1; END CS1

Stored Procedures External Procedures FMYCUSTS IF E K DISK 1 of 2 D InCust S 6 0 D Custs DS OCCURS(40) D Cname 30 D X S 10U 0 inz(1) ******************************************************** * Mainline Module C InCust SETLL MYCUSTS C DOU %EOF(MYCUSTS) C InCust READ MYCUSTS C IF %EOF(MYCUSTS) OR C (X = 40) C LEAVE C ENDIF C EVAL X = X + 1 C X OCCUR Custs C ENDDO

Stored Procedures External Procedures C EVAL X = X - 1 2 of 2 C/EXEC SQL C+ SET RESULT SETS ARRAY :Custs FOR :X Rows C/END-EXEC C MOVE *ON *INLR C RETURN C *ENTRY PLIST C PARM InCUst CREATE PROCEDURE your-lib/GETCUSTS (INOUT Parm1 DECIMAL (6,0 )) RESULT SETS 1 LANGUAGE RPGLE NOT DETERMINISTIC CONTAINS SQL EXTERNAL NAME GETCUSTS PARAMETER STYLE GENERAL

Functions

Functions CREATE FUNCTION ONCRHLD(CustIn VarChar(5)) RETURNS CHAR(1) Sample SQL Function CREATE FUNCTION ONCRHLD(CustIn VarChar(5)) RETURNS CHAR(1) LANGUAGE SQL NOT DETERMINISTIC BEGIN Declare YN Char(1); Set YN = 'N'; Select ONHOLD INTO YN from CUSTMAST WHERE CUST = CustIn; RETURN YN; END This function can be used in other SQL statements SELECT ORDER,CUSTNO FROM ORDHDR WHERE ONCRHLD(CUSTNO) = ‘Y’

Functions CREATE FUNCTION UnSchedOrders () Sample Table Function to Return Orders that do not have a ship date yet. The RPG module, and RPG service program are created using commands such as though shown here: CREATE FUNCTION UnSchedOrders () RETURNS TABLE (Order CHAR(10)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION NOT DETERMINISTIC DISALLOW PARALLEL RETURN SELECT ORDER FROM ORDHDR WHERE OSHPDAT = NULL This function can be used in other SQL statements where tables would normally be seen. SELECT * FROM ORDDTL WHERE ORDER IN(UnSchedOrders)

SQL Functions with RPGLE Sub-Procedure RPG Module Service Program Create Function Statement SQL Function INSTRUCTOR NOTES This will be a quick review of this tool. It will not be covered in depth.

SQL Functions with RPGLE Sample Function to Return Customer Name 1 of 2 H NOMAIN OPTION(*SRCSTMT) FCUST IF E K DISK * Prototype for GetCName(Cust,Part) D GetCName PR 30 D Parm1 6 0 ****************************************************** * GetCName - Takes in a 6 digit customer number * and returns a 30 byte customer name. P GetCName B EXPORT D GetCName PI 30 D CustIn 6 * Define the key list for the contract file. C CUSKEY KLIST C KFLD CUST

SQL Functions with RPGLE 2 of 2 * Trap for any error that occurs C MONITOR * Chain to the Contract file C EVAL CUST = CustIn C ConKey CHAIN Cust C IF %FOUND C RETURN CName C ELSE C RETURN *BLANKS C ENDIF * If any error occurs return a zero value C ON-ERROR *PROGRAM C * C ENDMON P E

Functions CRTRPGMOD MODULE(SQLFUNCS) DBGVIEW(*SOURCE) Sample Function to Return Customer Name CRTRPGMOD MODULE(SQLFUNCS) DBGVIEW(*SOURCE) CRTSRVPGM SRVPGM(SQLFUNCS) EXPORT(*ALL) Once created, the sub procedure can be registered with the SQL engine using the SQL command shown below: CREATE FUNCTION your-schema/GETCName (IN DECIMAL(6 0)) RETURNS CHAR(30) EXTERNAL NAME 'your-schema/SQLFUNCS(GETCNAME)' LANGUAGE RPGLE PARAMETER STYLE GENERAL

SQL Functions with RPGLE Sample Function to Convert a Date 1 of 3 H NOMAIN ********************************************************* * SQLFUNCS - This module is used to create the Service * * program SQLFUNCS, which includes the * * following exports: * * * * CvtDate - Converts CYYDDD into *USA DATE (MM/DD/YYYY)* * Prototype for CvtDate(DATEIN) D CvtDate PR D D Parm1 6 VARYING

SQL Functions with RPGLE 2 of 3 ********************************************************* * CvtDate - Takes in a 6 byte parameter and translates * * it to a date and returns that date. * * * P CvtDate B EXPORT D CvtDate PI D D DateIn 6 VARYING D DateWork DS D LongJul 1 7 0 D WrkCent 1 2 0 D CentCd 2 2 0 D WrkYr 3 4 0 D WrkDys 5 7 0 D DateFld S D

SQL Functions with RPGLE 3 of 3 * Right justify CYYDDD in 7 digit number C EVALR DateWork = DateIn * Change the 1 digit code to a 2 digit number C IF CentCd = 0 C Z-ADD 19 WrkCent C ELSE C Z-ADD 20 WrkCent C ENDIF * Convert the long Julian number into a date field C *LONGJUL MOVE LongJul DateFld * Return the date C RETURN DateFld P E

Functions CREATE FUNCTION your-schema/CvtDate (IN VARCHAR(6)) Sample Function to Convert a Date CRTRPGMOD MODULE(SQLFUNCS) DBGVIEW(*SOURCE) CRTSRVPGM SRVPGM(SQLFUNCS) EXPORT(*ALL) Once created, the sub procedure can be registered with the SQL engine using the SQL command shown below: CREATE FUNCTION your-schema/CvtDate (IN VARCHAR(6)) RETURNS DATE EXTERNAL NAME 'your-schema/SQLFUNCS(CvtDate)' LANGUAGE RPGLE PARAMETER STYLE GENERAL

SQL Functions with RPGLE Sample Function to Return a Running Total 1 of 4 * Prototype for RunSum(QTY) D RunSum PR D Parm1 8F D QtyOut 8F D InNull1 5I 0 D OutNull 5I 0 D SqlState 5 D FuncName 517A VARYING D SpecName 128A VARYING D MesgText 70A VARYING D Scratch 8F D Flag 10I 0

SQL Functions with RPGLE Sample Function to Return a Running Total 2 of 4 ********************************************************* * RunSum - Takes in a floating point value and adds it * * to the previous value. * P RunSum B EXPORT D RunSum PI D QtyIn 8F D QtyOut 8F D InNull1 5I 0 D OutNull 5I 0 D SqlState 5 D FuncName 517A VARYING D SpecName 128A VARYING D MesgText 70A VARYING D Scratch 8F D Flag 10I 0

SQL Functions with RPGLE Sample Function to Return a Running Total 3 of 4 * Trap for any error that occurs C MONITOR * If this is the first time it’s called * for this select, set the balance to 0 C IF FLAG = -1 C Clear Scratch C ENDIF * Add the input quantity to the scratch quantity C ADD QtyIn Scratch C Z-ADD Scratch QtyOut

SQL Functions with RPGLE 4 of 4 * Return the quantity C RETURN * If any error occurs return a zero C ON-ERROR *PROGRAM C C EVAL QtyOut = 0 * C ENDMON P E

Functions CRTRPGMOD MODULE(SQLFUNCS) DBGVIEW(*SOURCE) Sample Function to Calculate a Running Total CRTRPGMOD MODULE(SQLFUNCS) DBGVIEW(*SOURCE) CRTSRVPGM SRVPGM(SQLFUNCS) EXPORT(*ALL) CREATE FUNCTION your-schema/RunSum (INOUT DOUBLE) RETURNS DOUBLE EXTERNAL NAME 'your-schema/SQLFUNCS(RunSum)' LANGUAGE RPGLE PARAMETER STYLE DB2SQL NOT DETERMINISTIC SCRATCHPAD 8 FINAL CALL DISALLOW PARALLEL

SQL Create Function Statement General Parameter Style Return Values as Normal (on PI) All Input/Output Parameters DB2SQL Parameter Style All Input Parameters All Output Parameters Null Indicators for all Input Parameters Null Indocators for all Output Parameters SQL STATE Function Name Specific Name Message Text Scratch Pad Data Final Flag These parameters are required by the format, but may not need to be used.

SQL Functions with RPGLE Scratch Pad Data Selected SQL Function Data Returned Data Selected SQL Function Scratch Pad Data Data Returned Data Selected SQL Function Data Returned INSTRUCTOR NOTES This will be a quick review of this tool. It will not be covered in depth.

SQL Functions with RPGLE Final Call Final Flag -1 1 Data Selected SQL Function Data Returned Data Selected SQL Function Data Returned Data Selected SQL Function Data Returned INSTRUCTOR NOTES This will be a quick review of this tool. It will not be covered in depth.

Functions Any Questions?