CREATE TYPE

Create user-defined type.

create_type.png

 

where representation is:

representation.png

 

and type-attributes is:

type_attributes.png

 

and cast-option is:

cast_option.png

 

and method-specification is:

method_specification.png

 

where access-option is:

access_option.png

 

Usage

Embedded/Interactive/Module/ODBC/JDBC

Description

A new type is defined. A user-defined type may be used as the data type for columns in CREATE or ALTER TABLE statements. It can also be used in stored procedures and triggers as the type for variables and parameters.

The type-name should follow the normal rules for naming database objects (see Identifiers). If the type-name is unqualified, the type will be created in the schema with the same name as the current ident. If the type-name is qualified with a schema name, this schema must be owned by the current ident. The permitted values for data-type are described in Data Types in SQL Statements.

A distinct type has a single data type whereas a structured type has a list of attributes.

User-defined types are strongly typed, which means that it is only possible to compare values of the same type. When comparing a predefined data type and a distinct user-defined type a type cast must be used. For this purpose there are two routines created automatically when the type is created. Firstly, a function that can be used for casting from the type on which the user-defined type is based to the distinct type. If a cast-source clause is specified the identifier will be used as the name for the function, otherwise the function will have the same name as the user-defined type. Secondly, a function for casting from the user-defined type to the type on which it is based is also created. If cast distinct as source is specified the identifier in this clause is used for the function otherwise the name depends on the source type as seen in the following table.

Source type

Function name

Character

CHAR

Character varying

VARCHAR

National character

NCHAR

National character varying

NVARCHAR

Binary

BINARY

Binary varying

VARBINARY

Integer

INTEGER

Decimal

DECIMAL

Numeric

NUMERIC

Float

FLOAT

Real

REAL

Double precision

DOUBLE

Date

DATE

Time

TIME

Timestamp

TIMESTAMP

Any interval type

INTERVAL

Boolean

BOOLEAN

Binary large object

BLOB

Character large object

CLOB

National character large object

NCLOB

Examples

CREATE TYPE weight AS int;

CREATE FUNCTION checkWeight(w weight) RETURNS boolean RETURN integer(w) > 100;

SET :v = checkWeight(weight(200));

 

BEGIN

   DECLARE w weight;

   DECLARE i int;

   …

   SET i = integer(w);

   …

   SET w = weight(i);

   …

END

Access Options

The following access options may be specified:

CONTAINS SQL

The method may not contain any data-manipulation-statements. All other procedural-sql-statements are permitted. The method may only invoke methods, functions and procedures with the access option CONTAINS SQL. This option effectively prevents a routine from performing read or write operations on data in the database.

READS SQL DATA

All procedural-sql-statements are permitted except those performing updates (i.e. DELETE, INSERT and UPDATE). The method may only invoke methods, functions and procedures with the access option CONTAINS SQL or READS SQL DATA.

This option effectively prevents a routine from performing write operations on data in the database.

MODIFIES SQL DATA

All procedural-sql-statements are permitted and any method, function or procedure may be invoked from this type of method.

This option allows a routine to perform read and write operations on data in the database.

If no access options is specified, CONTAINS SQL is implicit

Restrictions

The type-name must be unique within a schema.

A method specification must be unique for a user-defined type with regard to the number of parameters and data types. This means that user-defined type may have multiple method specifications with the same name as long as either the number of parameters differ or if the data types for the parameters differ.

If a parameter name is specified in a parameter list it must be unique within the parameter list.

The ROW data type cannot be used at any place in a type definition.

A domain may not be used as the type for a distinct user-defined type.

The parameter mode for a parameter cannot be specified. It is always IN.

cast-option can only be specified for a distinct type.

Notes

When dropping a type with cascade option, any column using that type will be dropped. If this column is the last column in the table, the table will be dropped as well. See DROP TYPE for more details.

The ALTER TYPE statement can be used for adding and dropping method specifications. (See ALTER TYPE.)

The keywords FINAL and INSTANTIABLE are supported for compliance with SQL-2016. SQL-2016 has support for single inheritance and polymorphism, which is not supported in this version of Mimer SQL.

Standard Compliance

Standard

Compliance

Comments

SQL-2016

Core

Fully compliant.