Stored Procedure Function Oracle PLSQL

SQL>
SQL> CREATE OR REPLACE PROCEDURE myProcedure(p1 IN VARCHAR2 := NULL) AS
  2   BEGIN
  3     DBMS_OUTPUT.PUT_LINE('myProcedure called with ' || p1);
  4   END myProcedure;
  5   /
Procedure created.
SQL>
SQL>
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE myProcedure2(p1 IN OUT VARCHAR2) AS
  2   BEGIN
  3     DBMS_OUTPUT.PUT_LINE('myProcedure2 called with ' || p1);
  4     p1 := p1 || ' returned!';
  5   END myProcedure2;
  6   /
Procedure created.
SQL>
SQL>
SQL> CREATE OR REPLACE FUNCTION CallFunc(p1 IN VARCHAR2)
  2     RETURN VARCHAR2 AS
  3   BEGIN
  4     DBMS_OUTPUT.PUT_LINE('CallFunc called with ' || p1);
  5     RETURN p1;
  6   END CallFunc;
  7   /
Function created.
SQL>
SQL>
SQL>
SQL>
SQL> set serveroutput on
SQL>
SQL> -- Some valid calls direct from SQL.
SQL> CALL myProcedure('Hello!');
myProcedure called with Hello!
Call completed.
SQL>
SQL> Call completed.
  2
SQL> CALL myProcedure();
myProcedure called with
Call completed.
SQL>
SQL> Call completed.
  2
SQL> VARIABLE v_Output VARCHAR2(50);
SQL>
SQL>
SQL> Call completed.
  2
SQL> PRINT v_Output
V_OUTPUT
--------------------------------------------------------------------------------
SQL>
SQL> CALL myProcedure2(:v_Output);
myProcedure2 called with
Call completed.
SQL>
SQL> Call completed.
  2
SQL> PRINT v_Output
V_OUTPUT
--------------------------------------------------------------------------------
 returned!
SQL>
SQL>