CREATE TABLE emp ( name VARCHAR(30), age INTEGER, salary INTEGER);
CREATE ROW TYPE name_age_t ( name VARCHAR(20), age INTEGER); CREATE VIEW name_age OF TYPE name_age_t AS SELECT name, age FROM emp; CREATE ROW TYPE name_salary_t ( name VARCHAR(20), salary INTEGER); CREATE VIEW name_salary OF TYPE name_salary_t AS SELECT name, salary FROM emp
创建带类型视图时,该视图显示的数据具有命名行类型。例如:name_age 和 name_salary 视图包含 VARCHAR 和 INTEGER 数据。由于视图带有类型,所以对 name_age 视图执行的查询返回类型为 name_age 的列视图,而对 name_salary 视图执行的查询返回类型为 name_salary 的列视图。因此,数据库服务器能够对 name_age 和 name_salary 视图返回的行加以区分。
CREATE FUNCTION myfunc(aa name_age_t) ......; CREATE FUNCTION myfunc(aa name_salary_t) .....;
SELECT myfunc(name_age) FROM name_age; SELECT myfunc(name_salary) FROM name_salary;
SELECT myfunc(p) FROM name_age p; SELECT myfunc(p) FROM name_salary p;
如果不将两个包含相同数据类型的视图创建为带类型视图,那么数据库服务器无法对这两个视图显示的行加以区分。有关函数重载的更多信息,请参阅 GBase 8s 用户定义的例程与数据类型开发者指南。