- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过 DB2 使用嵌套结构化类型 (UDT),但遇到了一些问题。
以下是为用例创建类型、表、函数和转换的 SQL 语句。每个语句都执行得很好,但是在尝试执行简单的操作时会发生错误从 t_author 中选择 *
:
CREATE TYPE u_street_type AS (
street VARCHAR(100),
no VARCHAR(30)
) INSTANTIABLE MODE DB2SQL;
CREATE TYPE u_address_type AS (
street u_street_type,
zip VARCHAR(50),
city VARCHAR(50),
country VARCHAR(50),
since DATE,
code INT
) INSTANTIABLE MODE DB2SQL;
CREATE TABLE t_author (
ID INT NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR(50),
LAST_NAME VARCHAR(50) NOT NULL,
DATE_OF_BIRTH DATE NOT NULL,
YEAR_OF_BIRTH INT,
ADDRESS u_address_type
);
CREATE FUNCTION f_u_street_type_transform (street u_street_type)
RETURNS ROW (
street VARCHAR(100),
no VARCHAR(30)
)
LANGUAGE SQL
RETURN VALUES (
street..street,
street..no
);
CREATE TRANSFORM FOR u_street_type db2_program
(FROM SQL WITH FUNCTION f_u_street_type_transform);
CREATE FUNCTION f_u_address_type_transform (address u_address_type)
RETURNS ROW (
street VARCHAR(100),
no VARCHAR(30),
zip VARCHAR(50),
city VARCHAR(50),
country VARCHAR(50),
since DATE,
code INT
)
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN VALUES (
address..street..street,
address..street..no,
address..zip,
address..city,
address..country,
address..since,
address..code
);
CREATE TRANSFORM FOR u_address_type db2_program
(FROM SQL WITH FUNCTION f_u_address_type_transform);
当我尝试执行 select * from t_author;
时出现以下错误:
The function "F_U_ADDRESS_TYPE_TRANSFORM" resolved to specific function
"SQL101230131003100" that is not valid in the context where it is used..
SQLCODE=-390, SQLSTATE=42887, DRIVER=3.57.82
知道我做错了什么吗?
我正在使用 DB2 v9.5 (Linux)。
最佳答案
问题是 ADDRESS 列中的每个值都是标量值。当您想要将结构化类型的值绑定(bind)到客户端应用程序(如 DB2 CLP)时,因为您有类似“SELECT * FROM t_author”的查询,您必须使用标量转换函数,它将结构化值转换为单个 VARCHAR、CLOB 或您需要的任何类型的值。您不能通过转换函数将其扩展为多个值,因为那必须类似于多列。 (这是不可能的,因为不同的转换函数可能返回不同数量的值,从而为查询提供完全不同的模式;更不用说如果您将完全相同的查询用作具有另一种语义的子查询时的问题。)
返回具有超过 1 列的 ROW() 的转换函数只能在与外部 UDF(用 C/C++ 或 Java 编写)交换结构化类型的值时使用。
p.s:我的建议是您使用常规的、规范化的关系数据库设计并尽量避免结构化类型,除非您有充分的理由这样做。
关于sql - 如何在 DB2 中使用嵌套结构化类型 (UDT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562612/
我有 table emp(id,name,list>) 。这里地址是cassandra UDT定义为create TYPE address (hno int,street text); 。我试图使用下
官方文档告诉我们不要对主键使用 UDT。这有什么特别的原因吗?这样做的潜在缺点是什么? 最佳答案 这句话是为了劝阻用户不要对 PK 列不加区别地使用 UDT。 UDT 在其当前版本中的主要动机(即,考
假设我有一组 UDT。我按如下方式填充它: public type udtEmp Id as long Name as string end type dim col as new C
Cassandra 表和UDT CREATE TYPE IF NOT EXISTS phone_type( code TEXT, phone TEXT, ); CREATE TABLE I
我有一个 Java 应用程序,其中有 Spark-1.4.0 和 Cassandra-2.1.5 以及 Cassandra-Spark-connection-1.4。 0-M1. 在此应用程序中,我尝
多年来,我一直避免在 VBA 中使用 Public Type UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么……直到现在 - 它是只需创建一个类模块并改为使用实际对象就更容易了。 但最近
我编写了一个返回用户定义类型的函数。 如果函数出现任何错误,我如何返回一个空的 UDT? 我尝试将函数设置为“无”,但它抛出“需要对象”错误。 提前致谢。 最佳答案 如果可能,请改用类/对象。甚至可以
This is my mssql UDT create type ConditionUDT as Table ( Name varchar(150), PackageId int );
这是我接收 UTD 消息的程序。我打算用它通过 wifi 接收 640*480 YUV 图像。我应该设置多大的缓冲区?是否可以在接收到第一张图像后设置缓冲区以找出实际大小? 下面是我的全部代码,但基本
我使用 UDT 库发送我的数据。但似乎无法正确发送 unsigned char* 数据。一方面我发送它就像 int rc = UDT::sendmsg(socket, full_data, size,
可以对卡住列使用聚类键吗? 也许: CREATE TYPE user_details ( email varchar, password varchar, createdAt timest
我想知道PostgreSQL的JDBC驱动42.2.8是否支持UDT映射? 我在 SQLData 实现上苦苦挣扎了一段时间,但遇到了错误: org.postgresql.util.PSQLExcept
我正在使用 netty + udt + rendezvous 测试此示例的修改版本: http://netty.io/4.0/xref/io/netty/example/udt/echo/rendez
我想要一种通用的方法来为任何 C++ 用户定义的类型创建唯一的编译时标识符。 例如: unique_id::value == 0 // true unique_id::value == 1 // tr
我有一个循环,它读取一堆 XML 文件,对于每个文件,它验证 XML 中的数据并将其加载到一些 UDT 中,然后对数据进行一些工作。 然后它返回到循环的开头,UDT 仍然有来自前一个 XML 的数据。
我尝试使用 SparkSQL (v.1.3.0) 访问 PostgreSQL 数据库。在这个数据库中,我有一个表 CREATE TABLE test ( id bigint, values dou
我需要根据 IP 地址存储有关用户位置的记录,但我不确定如何最好地对其进行建模。 对于每个地址,我们需要记录机器的详细信息(ipaddress、agentId)和机器的位置(isocode、城市)。此
我正在尝试通过 DB2 使用嵌套结构化类型 (UDT),但遇到了一些问题。 以下是为用例创建类型、表、函数和转换的 SQL 语句。每个语句都执行得很好,但是在尝试执行简单的操作时会发生错误从 t_au
我正在 Cassandra 2.1 中尝试使用 UDT,并且遇到了 InvalidTypeExeception。 我将表格设置为: session.execute("CREATE TYPE myke
我有一个 COM 服务器,其方法当前返回一个整数: [ object, uuid("..."), dual, helpstring("IMyCOMServer Inte
我是一名优秀的程序员,十分优秀!