gpt4 book ai didi

java - 遍历oracle中的嵌套表并将对象列表返回给java

转载 作者:行者123 更新时间:2023-11-29 06:23:23 24 4
gpt4 key购买 nike

我创建了这个表如下:

    CREATE TABLE FORNECPRODS 
( SUPPLIER FORNEC_OBJ ,
PRODUCTS PRODTABLE
)NESTED TABLE "PRODUCTS" STORE AS "PRODUCTSTABLE";
/

create or replace
type PRODTABLE as table of PROD_OBJ;

create or replace
TYPE PROD_OBJ AS OBJECT (

ID_PROD NUMBER(6,0),
NOME_PROD VARCHAR2(100),
PREC_COMPRA_PROD NUMBER(10,2),
PREC_VENDA_PROD NUMBER(10,2),
QTD_STOCK_PROD NUMBER(10),
QTD_STOCK_MIN_PROD NUMBER(10),
IVA_PROD NUMBER(6,2)
);

/
create or replace
type PRODTABLE as table of PROD_OBJ;
/
create or replace type FORNEC_OBJ as object (
ID_FORNECEDOR NUMBER(6) ,
NOME_FORNECEDOR VARCHAR2(100) ,
MORADA VARCHAR2(300),
ARMAZEM VARCHAR2(300),
EMAIL VARCHAR2(30),
TLF NUMBER(30) ,
TLM NUMBER(30),
FAX NUMBER(30)
);
/

问题是我正在尝试从表 FORNECPRODS 中获取每个供应商的产品列表,但我做不到(我的想法是使用 :list_of_products 返回一个类似于散列的结构)。为了尝试这一点,我仅使用此代码来打印每个供应商的产品:

declare
v_products prodtable;
TYPE t_supplier is TABLE OF FORNEC_OBJ;
v_supplier t_supplier;

begin
select supplier bulk collect into v_supplier from fornecprods;
for j in v_supplier.first.. v_supplier.last
loop
select products into v_products
from fornecprods where supplier = v_supplier(j);
dbms_output.put_line('-----------------------');
dbms_output.put_line('Products list of ' || v_supplier(j).NOME_FORNECEDOR);
dbms_output.put_line('-----------------------');
for i in v_products.first .. v_products.last
loop
dbms_output.put(v_products(i).NOME_PROD);
end loop;
end loop;
end;

但它没有为第一次选择返回任何数据。

那么,有人可以帮我找到一种方法来从 oracle 到 java 检索列表(prodtable)吗?我已经有了映射供应商和产品的类,我什至将它们各自的数组从 java 传递到 oracle,所以它们很好,我只需要我的 j-tree 看起来像这样:

供应商
->供应商1
-prod1
-prod2
- ...
->供应商2
-prod1
-prod2
- ....

是否可以使用我当前的表和类型检索所有信息,例如 supplier:list_of_products 的哈希值?

最佳答案

首先,我建议不要在数据库中永久存储嵌套表。虽然对象类型对于变量和临时结果确实很有用,但您会发现嵌套表往往会使 SQL 查询复杂化、增加开销,并且通常生成的代码比常规关系规范化设计更难维护。

现在针对您的问题,首先让我们填充您的表:

SQL> DECLARE
2 l_prodtable prodtable := prodtable();
3 BEGIN
4 l_prodtable.extend(2);
5 l_prodtable(1) := prod_obj(1, 'Prod A', '', '', '', '', '');
6 l_prodtable(2) := prod_obj(2, 'Prod B', '', '', '', '', '');
7 FOR i IN 1 .. 2 LOOP
8 INSERT INTO fornecprods VALUES (fornec_obj(i, 'Forn '||i, '',
9 '', '', '', '', ''),
10 l_prodtable);
11 END LOOP;
12 END;
13 /
PL/SQL procedure successfully completed

然后您将很简单地遍历元素:

SQL> BEGIN
2 FOR cc IN (SELECT supplier, products FROM fornecprods) LOOP
3 dbms_output.put_line('-----------------------');
4 dbms_output.put_line('Products list of '
5 || cc.supplier.NOME_FORNECEDOR);
6 dbms_output.put_line('-----------------------');
7 FOR i IN 1 .. cc.products.count LOOP
8 dbms_output.put_line('-' || cc.products(i).NOME_PROD);
9 END LOOP;
10 END LOOP;
11 END;
12 /

-----------------------
Products list of Forn 1
-----------------------
-Prod A
-Prod B
-----------------------
Products list of Forn 2
-----------------------
-Prod A
-Prod B

PL/SQL procedure successfully completed

关于java - 遍历oracle中的嵌套表并将对象列表返回给java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2069418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com