1. there is an undocumented / unpublished Oracle bug which requires you be connect as SYS or a SYSDBA user for your function to be created successfully. This is true for all timezone functions created by package STANDARD.
2. when using SELECT inside a BEGIN/END block you must assign all selected values into variables.
SQL> connect sys/pass@orcl as sysdba
SQL> create or replace function mydbtimezone
is v1 varchar2(7);
select dbtimezone INTO v1 from dual;
SQL> select mydbtimezone from dual;
If you connect as any other user and run the above Create Function statement, it will fail.
Interestingly, the function created above is the same as the one Oracle creates in the STANDARD package. I think the source code is in %ORACLE_HOME%\rdbms\admin\stdbody.sql.