Oracle's INITCAP function won't do what's wanted here because it changes the first character of each word in the string to uppercase, all other characters are lowercased.  Here's a PL/SQL function for Oracle which upcases the first character of a sentence and lowercases the rest:
CREATE OR REPLACE FUNCTION UPCASE_SENTENCES(strText IN VARCHAR2) RETURN VARCHAR2 IS
  strResult     VARCHAR2(32767);
  bUpcase_next  BOOLEAN := TRUE;
  i             NUMBER;
  thisC         VARCHAR2(1);
  FUNCTION isWhitespace(strC IN VARCHAR2) RETURN BOOLEAN IS
  BEGIN
    IF ASCII(strC) < 33 OR ASCII(strC) > 126 THEN
      RETURN TRUE;
    ELSE
      RETURN FALSE;
    END IF;
  END isWhitespace;
BEGIN
  FOR i IN 1..LENGTH(strText) LOOP
    thisC := SUBSTR(strText, i, 1);
    IF bUpcase_next AND NOT isWhitespace(thisC) THEN
      strResult := strResult || UPPER(thisC);
      bUpcase_next := FALSE;
    ELSE
      strResult := strResult || LOWER(thisC);
      IF thisC IN ('.', '?', '!') THEN
        bUpcase_next := TRUE;
      END IF;
    END IF;
  END LOOP;
  RETURN strResult;
END UPCASE_SENTENCES;
I hope this helps.