In addition to the previous answer, there are significant differences in the scope of the declaration.
When you declare a type in PL/SQL, such as the record type in your example, it is only usable from PL/SQL.  If it is declared locally to a procedure or function, then it can only be used within that subprogram; if it is declared in a package body it can only be used within that package; if it is declared in a package header it can be used by any PL/SQL code that has execute access to the package.  In no way can it be referenced in SQL statements, even ones embedded in the PL/SQL code.
When you create an object type, or other schema-level type definitions such as nested tables, it is usable within both SQL and PL/SQL.  As a very simple example, you can base a table definition on the object definition:
SQL> CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT
  2  (
  3      temp_trans_id           number(10),
  4      trans_id                number(10),
  5      resion_id               number(10)
  6  )
  7  /
Type created.
SQL> create table type_name1_tab of type_name1;
Table created.
SQL> desc type_name1_tab
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TEMP_TRANS_ID                                      NUMBER(10)
 TRANS_ID                                           NUMBER(10)
 RESION_ID                                          NUMBER(10)
See here for documentation on the CREATE TYPE statement and references to further documentation on the various uses of object types.