Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да видите типа на променлива в PL/SQL динамично?

Не можете да тествате типа въз основа на спецификацията на функцията, но можете да тествате типа на предадените обекти с помощта на IS OF( type) оператор или SYS_TYPEID функция :

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

CREATE type my_weird_type IS OBJECT( a NUMBER) NOT FINAL/CREATE TYPE my_weird_subtype UNDER my_weird_type( b NUMBER)/CREATE FUNCTION getType( i_type my_weird_type) RETURN VARCHAR2ISBEGIN IF i_type IS OF( my_weird_subtype ) THEN RETURN 'subtype'; ELSIF i_type IS OF( my_weird_type) THEN RETURN 'type'; ELSE RETURN 'други'; END IF;END;/CREATE FUNCTION getType2( i_type my_weird_type) RETURN VARCHAR2IS o_type USER_TYPES.TYPE_NAME%TYPE;BEGIN SELECT type_name INTO o_type FROM user_types WHERE typeid =SYS_TYPEID( i_type); RETURN o_type;EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL;END;/създайте таблица test_my_weird_type( стойност my_weird_type)/INSERT INTO test_my_weird_type (стойност)SELECT my_weird_type(1) FROM DUAL UNION ALLSELECT my_weird_subtype(2,3) FROM DUAL UNION ALLSELECT NULL FROM DUAL/  

Заявка 1 :

SELECT t.value.a AS a, TREAT( t.value AS my_weird_subtype).b AS b, getType( value), getType2( value )FROM test_my_weird_type t 

Резултати :

<предварителен код>| A | B | GETTYPE(СТОЙНОСТ) | GETTYPE2(СТОЙНОСТ) ||--------|--------|----------------|--------- ---------|| 1 | (нула) | тип | MY_WEIRD_TYPE || 2 | 3 | подтип | MY_WEIRD_SUBTYPE || (нула) | (нула) | други | (null) |

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ИЗБЕРЕТЕ родителя на запис

  2. Как да създадете меню в SQLPlus или PL/SQL

  3. Как да форматирам тип интервал във формат HH:MM?

  4. Как да повторите заявка в Oracle

  5. грешка:ORA-65096:невалидно име на общ потребител или роля в oracle