SELECT A.OBJECT_TYPE 타입,
       A.OBJECT_NAME 명칭,
       CASE A.OBJECT_TYPE
           WHEN 'SYNONYM' THEN
            (SELECT I.TABLE_OWNER || '.' || I.TABLE_NAME || '@' || I.DB_LINK
               FROM USER_SYNONYMS I
              WHERE A.OBJECT_NAME = I.SYNONYM_NAME)
           WHEN 'TRIGGER' THEN
            (SELECT I.TABLE_OWNER || '.' || I.TABLE_NAME
               FROM USER_TRIGGERS I
              WHERE A.OBJECT_NAME = I.TRIGGER_NAME)
           ELSE
            B.ARGUMENT_NAMES
       END 비고
  FROM USER_OBJECTS A,
       (SELECT OBJECT_ID,
               SUBSTR(MAX(SYS_CONNECT_BY_PATH(NVL(ARGUMENT_NAME, '(RESULT)'),
                                              ', ')),
                      3) ARGUMENT_NAMES
          FROM (SELECT ARGUMENT_NAME,
                       OBJECT_ID,
                       ROW_NUMBER() OVER(PARTITION BY OBJECT_ID ORDER BY SEQUENCE) RUNM
                  FROM USER_ARGUMENTS)
         START WITH RUNM = 1
        CONNECT BY PRIOR RUNM = RUNM - 1
               AND PRIOR OBJECT_ID = OBJECT_ID
         GROUP BY OBJECT_ID) B
 WHERE A.OBJECT_ID = B.OBJECT_ID(+)
   AND A.OBJECT_TYPE IN ('FUNCTION', 'PROCEDURE', 'TRIGGER','SYNONYM', 'DATABASE LINK')
 ORDER BY A.OBJECT_TYPE, A.OBJECT_NAME