使用用户定义的类型列插入DB2

时间:2016-05-26 12:38:27

标签: sql db2 user-defined-types

您好我正在尝试使用用户定义的类型探索DB2我创建了一个类型和一个表但是我现在无法将数据插入到表中。我在DB中的用户定义类型如下:

CREATE TYPE pizza AS
(type varchar(50),
size INTEGER,
topping varchar(50))
MODE DB2SQL@

然后我创建了一个表格如下:

CREATE TABLE orders
(id  INT NOT NULL PRIMARY KEY,
customer VARCHAR(50),
pizza_row pizza)@

然后,当我尝试插入时,我得到的错误是我的插入声明:

INSERT into orders (id,customer,pizza_row) 
VALUES (1,'Larry', pizza('margarita',10,'kebab'))@

收到错误:

  

没有授权的例行程序" PIZZA"类型"功能"有   找到兼容的参数.. SQLCODE = -440

插入我的架构的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

DB2在创建结构化类型时自动生成的默认构造函数没有参数:pizza()。如果要使用某些值实例化类型,则需要创建自己的构造函数,该函数将调用默认构造函数,然后为类型的字段分配适当的值,如下所示:

create or replace function pizza (
 p_type varchar(50),
 p_size INTEGER,
 p_topping varchar(50)
)
returns pizza
begin atomic
  declare t pizza;
  set t = pizza();
  set t..type = p_type;
  set t..size = p_size;
  set t..topping = p_topping;
  return t;
end

PS。代码未经测试。

答案 1 :(得分:0)

在IBM DB2中,您可以使用MUTATORS和OBSERVERS插入和检索值。

当您创建结构化类型时,DB2会自动为该类型生成构造函数方法,并为该类型的属性生成mutator和observer方法。您可以使用这些方法创建结构化类型的实例,并将这些实例插入表的列中。

参考:https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.structypes.doc/doc/t0006627.html

INSERT

INSERT INTO订购价值 (1,&#39;拉里&#39;,披萨()..类型(&#39;玛格丽塔&#39;)..大小(10)..打顶(&#39;蘑菇&#39;))@ < / p>

选择

SELECT id,customer,pizza..type AS type,pizza..size AS size,pizza..topping AS topping FROM orders @