您好我正在尝试使用用户定义的类型探索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
插入我的架构的正确语法是什么?
答案 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方法。您可以使用这些方法创建结构化类型的实例,并将这些实例插入表的列中。
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 @