Sql 从Oracle对象(其他对象的表)读取行
请原谅,这是我第一次尝试Oracle软件包,所以我希望错过一些简单的东西 编辑我对它进行了排序。。。 需要引用实际声明的子类型,例如:Sql 从Oracle对象(其他对象的表)读取行,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,请原谅,这是我第一次尝试Oracle软件包,所以我希望错过一些简单的东西 编辑我对它进行了排序。。。 需要引用实际声明的子类型,例如: FOR j in outvar(i).tbl_ORDER_TENDERS.first..outvar(i).tbl_ORDER_TENDERS.last LOOP DBMS_OUTPUT.PUT_LINE('tender record : ' || to_char(outvar(i).tbl_ORDER_TENDERS(j)
FOR j in outvar(i).tbl_ORDER_TENDERS.first..outvar(i).tbl_ORDER_TENDERS.last LOOP
DBMS_OUTPUT.PUT_LINE('tender record : '
|| to_char(outvar(i).tbl_ORDER_TENDERS(j).TENDER_AMT) || ' '
create or replace
TYPE ORDERS_TABLE
IS TABLE OF ORDER_HEADER;
tbl_ORDER_LINES ORDER_LINES,
tbl_ORDER_TENDERS ORDER_TENDERS,
TBL_ORDER_REBATES ORDER_REBATES
我创建了几个新的Oracle类型,用于保存数据库中的行数据,如下所示:
FOR j in outvar(i).tbl_ORDER_TENDERS.first..outvar(i).tbl_ORDER_TENDERS.last LOOP
DBMS_OUTPUT.PUT_LINE('tender record : '
|| to_char(outvar(i).tbl_ORDER_TENDERS(j).TENDER_AMT) || ' '
create or replace
TYPE ORDERS_TABLE
IS TABLE OF ORDER_HEADER;
tbl_ORDER_LINES ORDER_LINES,
tbl_ORDER_TENDERS ORDER_TENDERS,
TBL_ORDER_REBATES ORDER_REBATES
这是指我的另一种类型:
create or replace
TYPE ORDER_HEADER FORCE
AS OBJECT (
TRANSACTION_NUMBER VARCHAR2(20),
LOCATION_NUMBER VARCHAR2(10),
TERMINAL_NAME VARCHAR2(25),
START_DATETIME TIMESTAMP(6),
GROSS_SALES_AMOUNT NUMBER(20,0),
NET_SALES_AMOUNT NUMBER(20,0),
SAVINGS_AMOUNT NUMBER(20,0),
SAVINGS_PRECISION NUMBER(6,0),
TOTAL_TAX NUMBER(20,0),
CUSTOMER_IDENTIFIER VARCHAR2(50),
tbl_ORDER_LINES ORDER_LINES,
tbl_ORDER_TENDERS ORDER_TENDERS,
TBL_ORDER_REBATES ORDER_REBATES
);
例如,以订单类型为例:
create or replace
TYPE ORDER_TENDERS FORCE
AS TABLE OF ORDER_TENDER;
其中包含招标数据行:
create or replace
TYPE ORDER_TENDER AS OBJECT
(
TENDER_LINE_ID NUMBER(20,0),
TENDER_CODE VARCHAR2(10),
TENDER_AMT NUMBER(20,0),
UNENCODED_ACCOUNT_NUMBER VARCHAR2(25)
);
因此,我认为我的包正在工作,我可以填充这些对象(至少验证了标题内容是否工作。)但我不确定在调用此包查看是否获取订单投标/订单投标数据时如何测试/调试/查看结果
例如,这很好:
declare
invar varchar2(5);
outvar ORDERS_TABLE;
O_ORDER_TENDERS ORDER_TENDERS;
O_ORDER_TENDER ORDER_TENDER;
begin
sales_trickler.GetSales(invar, outvar);
FOR i in 1..outvar.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(' record : '
|| to_char(outvar(i).TRANSACTION_NUMBER) || ' '
|| to_char(outvar(i).LOCATION_NUMBER) || ' '
|| to_char(outvar(i).TERMINAL_NAME) || ' '
|| to_char(outvar(i).CUSTOMER_IDENTIFIER));
END LOOP;
end;
但我如何看待订单投标/订单投标数据
我试着把这个额外的FOR循环放进去,但它不喜欢我所指的订单投标
我试着与outvar(I)相关。订单招标,但也没有成功。。。有什么想法吗?问题出在调用代码中,我不应该引用子对象的新实例,我应该在传递的原始参数中引用它们的“生存状态”,如下所示:
FOR j in outvar(i).tbl_ORDER_TENDERS.first..outvar(i).tbl_ORDER_TENDERS.last LOOP
DBMS_OUTPUT.PUT_LINE('tender record : '
|| to_char(outvar(i).tbl_ORDER_TENDERS(j).TENDER_AMT) || ' '
create or replace
TYPE ORDERS_TABLE
IS TABLE OF ORDER_HEADER;
tbl_ORDER_LINES ORDER_LINES,
tbl_ORDER_TENDERS ORDER_TENDERS,
TBL_ORDER_REBATES ORDER_REBATES
以下是实际情况:
declare
invar varchar2(5);
outvar ORDERS_TABLE;
begin
sales_trickler.GetSales(invar, outvar);
FOR i in 1..outvar.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(' record : '
|| to_char(outvar(i).TRANSACTION_NUMBER) || ' '
|| to_char(outvar(i).LOCATION_NUMBER) || ' '
|| to_char(outvar(i).TERMINAL_NAME) || ' '
|| to_char(outvar(i).CUSTOMER_IDENTIFIER));
FOR j in outvar(i).tbl_ORDER_TENDERS.first..outvar(i).tbl_ORDER_TENDERS.last LOOP
DBMS_OUTPUT.PUT_LINE('tender record : '
|| to_char(outvar(i).tbl_ORDER_TENDERS(j).TENDER_AMT) || ' '
);
END LOOP;
--lines
FOR j in outvar(i).tbl_ORDER_LINES.first..outvar(i).tbl_ORDER_LINES.last LOOP
DBMS_OUTPUT.PUT_LINE('line record : '
|| to_char(outvar(i).tbl_ORDER_LINES(j).SKU) || ' '
);
END LOOP;
端环;
结束