如何在 PostgreSQL 中使用与另一个复合类型嵌套的复合类型
How to use a composite type nested with another composite type in PostgreSQL
大家晚上好,我试图让一个过程与我创建的类型一起工作,以清理我为执行一些数据持久性而编写的 Java 代码,但是在创建 function
在 PostgreSQL 中,我对如何进行有疑问,在这种情况下该过程调用将如何进行?
CREATE TYPE store AS (
id INTEGER,
name VARCHAR(255),
document VARCHAR(255)
);
CREATE TYPE inventory AS (
id INTEGER,
product_id INTEGER,
store_id INTEGER,
amount INTEGER,
price NUMERIC(15,2)
);
CREATE TYPE product AS (
id INTEGER,
name VARCHAR(255),
product_inventory inventory
);
CREATE OR REPLACE FUNCTION products_test(my_store IN store, my_products IN product[])
RETURNS product[] AS $$
BEGIN
RETURN my_products;
END;
$$ LANGUAGE plpgsql;
SELECT products_test(ARRAY[
'(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
'(2,"PC", INVENTORIES(1, 1, 1, 20, 20.00))'
]::products[]);
当我尝试使用上面的 select
子句调用此函数时,出现以下错误:
ERROR: malformed record literal: " INVENTORIES(1"
LINE 2: '(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
^
DETAIL: Missing left parenthesis.
SQL state: 22P02
Character: 16
这可能与哪个错误有关?以及如何以正确的形式调用这些嵌套复合类型?
这有效。
testdb=> SELECT products_test('(1,"tv","large")', ARRAY[(1,'tv', (1, 1, 1, 20, 20.00)), (2,'PC', (1, 1, 1, 20, 20.00))]::product[]);
products_test
---------------------------------------------------------------
{"(1,tv,\"(1,1,1,20,20.00)\")","(2,PC,\"(1,1,1,20,20.00)\")"}
(1 row)
事情的变化是
- 我避免了 INVENTORIES 并且只使用了括号
products
是错误的;应该是 product
- 缺少
store
参数
大家晚上好,我试图让一个过程与我创建的类型一起工作,以清理我为执行一些数据持久性而编写的 Java 代码,但是在创建 function
在 PostgreSQL 中,我对如何进行有疑问,在这种情况下该过程调用将如何进行?
CREATE TYPE store AS (
id INTEGER,
name VARCHAR(255),
document VARCHAR(255)
);
CREATE TYPE inventory AS (
id INTEGER,
product_id INTEGER,
store_id INTEGER,
amount INTEGER,
price NUMERIC(15,2)
);
CREATE TYPE product AS (
id INTEGER,
name VARCHAR(255),
product_inventory inventory
);
CREATE OR REPLACE FUNCTION products_test(my_store IN store, my_products IN product[])
RETURNS product[] AS $$
BEGIN
RETURN my_products;
END;
$$ LANGUAGE plpgsql;
SELECT products_test(ARRAY[
'(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
'(2,"PC", INVENTORIES(1, 1, 1, 20, 20.00))'
]::products[]);
当我尝试使用上面的 select
子句调用此函数时,出现以下错误:
ERROR: malformed record literal: " INVENTORIES(1"
LINE 2: '(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
^
DETAIL: Missing left parenthesis.
SQL state: 22P02
Character: 16
这可能与哪个错误有关?以及如何以正确的形式调用这些嵌套复合类型?
这有效。
testdb=> SELECT products_test('(1,"tv","large")', ARRAY[(1,'tv', (1, 1, 1, 20, 20.00)), (2,'PC', (1, 1, 1, 20, 20.00))]::product[]);
products_test
---------------------------------------------------------------
{"(1,tv,\"(1,1,1,20,20.00)\")","(2,PC,\"(1,1,1,20,20.00)\")"}
(1 row)
事情的变化是
- 我避免了 INVENTORIES 并且只使用了括号
products
是错误的;应该是product
- 缺少
store
参数