=====
CS 328 - Week 5 Lecture 1 - 2025-02-17
=====
=====
TODAY WE WILL:
=====
*   https://csclubhumboldt.org/hackathon - full spiel next class! 8-) !
*   announcements
*   DATA TIER: PL/SQL
*   PL SQL basic parameters
*   PL/SQL stored functions
*   maybe more? -> PL/SQL if statement!
*   prep for next class
=====
*   should be working on Homework 4!
    at-least-1st-attempts due by 11:59 pm on Friday, February 21
*   remember to complete the zyBooks activities for Chapters 1-2
    by 11:59 pm on Friday, February 28
=====
PL/SQL parameters!
=====
*   PL/SQL stored procedures and stored functions CAN have
    parameters, and these provide information that subroutine
    needs
    *   (note: triggers can't have parameters...)
*   the parameter declarations DO go in a set of parentheses
    RIGHT after the proc/function name in its header:
    create or replace [procedure|function] desired_name(param_list) ...
    where the param_list is a comma-separated list of parameter
    declarations:
    *   with the parameter name THEN its type 
    *   and the type MUST be UNCONSTRAINED <----- !!!!!!!!!!!
        ...NO parentheses with a size/limit included!
        so:
	chosen_name varchar2, ...
	next_code char, ...
	quant number, ...
    *   CS 328 class style: avoid giving parameters or local variables
        a name IDENTICAL to a column in one of tables involved in that
	subroutine!
	*   frequently a syntax error, always confusing to someone
	    reading your code!
=====
PL/SQL stored functions!
=====
*   basic function header:
create or replace FUNCTION desired_name(param_list) RETURN unconstrained_type is|as
*   and be sure to include a return statement!
    return desired_expr;
*   when you call a PL/SQL function, you have to provide a place for
    what it returns
    *   if this is within an PL/SQL subroutine, this is pretty straightforward --
        it can be within an assignment statement, for example
    *   but what about from sqlplus?
        ...you can declare a sqlplus local variable (!!!)
        var desired_name desired_type
        (it has fewer types available than SQL... or PL/SQL...)
        NOW you can use exec with that sqlplus local variable preceded by a colon
	and your function call:
	exec :desired_name := job_count('blah')
        and you can print the value of a sqlplus local variable with the
	print command:
        print desired_name
=====
PL/SQL if statement
=====
*   of course there's an if statement!
    IF bool_expr THEN
        actions...
    ELSE
        actions...
    END IF;
    *   NOTE that it includes the keyword THEN
    *   NOTE that it ends with an END IF;
    *   and, note that PL/SQL has a bit of an odd version for the if-else-if pattern:
    IF bool_expr THEN
        actions...
    ELSIF bool_expr THEN
       actions...
    ELSIF bool_expr THEN
       actions...
    ...
    ELSE
       actions...
    END IF;