Create a stored stand-alone procedure.
  
  Syntax:
   CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name (options)
      invoker_rights AS plsql_sub_program_body
   CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name (options)
      invoker_rights AS LANGUAGE JAVA NAME ('string')
   CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name (options)
      invoker_rights AS LANGUAGE C NAME name LIBRARY lib_name 
        [AGENT IN (argument)] [WITH CONTEXT][PARAMETERS (parameters)]
options: 
      argument IN [NOCOPY] datatype
      argument OUT [NOCOPY] datatype
      argument IN OUT [NOCOPY] datatype
     (The procedure can have several arguments separated with commas)
invoker_rights:
      AUTHID CURRENT_USER
      AUTHID DEFINER
Oracle does not allow a specific precision for function parameters, only type of the variable. This means that a parameter defined as integer or number(38) can accept fractional values. if you want to have an integer passed to a procedure/function, use pls_integer instead of integer.
Alternatively reassigning to a variable within the procedure will force Oracle to implicitly convert the datatype and precision to match the variable, thie requires a slightly different definition, e.g. number(37) .
AUTHID DEFINER will execute with the privileges of the procedure schema/owner.
  
  NOCOPY will instruct Oracle to pass the argument as fast as possible. This can significantly enhance performance when passing a large value.
"All the world's a stage,
and all the men and women merely players:
They have their exits and their entrances;
and one man in his time plays many parts" ~ William Shakespeare (As You Like It)
Related Oracle Commands:
ALTER PROCEDURE
  DROP PROCEDURE 
  LIBRARY - CREATE LIBRARY 
  
  Related Views:
 CODE_PIECES 
                                                         
 CODE_SIZE 
  
 DBA_SOURCE      ALL_SOURCE      USER_SOURCE