Oracle PL/SQL记录。我可以输入几个值吗?
我在Apex Oracle PL/SQL中工作,试图了解记录是如何工作的。 这是一段代码。我不明白为什么会出现异常“未找到数据”。 我可以在记录中放几行吗Oracle PL/SQL记录。我可以输入几个值吗?,oracle,plsql,record,Oracle,Plsql,Record,我在Apex Oracle PL/SQL中工作,试图了解记录是如何工作的。 这是一段代码。我不明白为什么会出现异常“未找到数据”。 我可以在记录中放几行吗 create table testProducts ( prod_id number not null, group_id number (5) not null, prod_name varchar2(50) not null, constraint fk_grou
create table testProducts
(
prod_id number not null,
group_id number (5) not null,
prod_name varchar2(50) not null,
constraint fk_group_id foreign key (group_id)
references testGroups(group_id)
)
declare
type mr is record (
prod_Id testProducts.prod_Id%type
);
obj_mr mr;
maxd number;
egin
select max(prod_Id) into maxd from testProducts;
for i in 10..maxd loop
select testProducts.prod_id into obj_mr from testProducts where
testProducts.prod_Id = i;
dbms_output.put_line(obj_mr.prod_id);
end loop;
end;
为了解决眼前的问题,您将收到一个未找到数据错误,因为您开始在
prod\u id
10处循环,并依次上升到表中存在的最大prod\u id
。如果您的ID中有任何间隙,则会出现错误。您可以通过以下错误处理来解决此问题:
声明
mr类型为记录
(
产品Id测试产品。产品Id%类型,
组ID testProducts。组ID%类型,
产品名称testProducts。产品名称%TYPE
);
奥布先生;
maxd数;
开始
从testProducts中将MAX(prod_Id)选择到maxd中;
因为我在10。。NVL(最大,1)
环
开始
选择产品标识、组标识、产品名称
进入obj_先生
来自testProducts
其中prod_Id=i;
DBMS|u OUTPUT.put|u line(obj|u mr.prod|id| |'|'|'| obj|u mr.GROUP|u id|'|'| obj|u mr.prod| u name);
例外情况
当找不到数据时
然后
DBMS_OUTPUT.put_line('prod_id不存在:'|| i);
结束;
端环;
结束;
/
要回答您关于多行的问题,记录类型不能有多行,但表类型可以有多行。如果定义了记录类型的表类型,则可以在该表类型中选择多行。请参阅下面的代码以了解如何执行此操作的示例
声明
mr类型为记录
(
产品Id测试产品。产品Id%类型,
组ID testProducts。组ID%类型,
产品名称testProducts。产品名称%TYPE
);
mr类型是mr的表格;
obj_mr_t mr_t;
开始
选择产品标识、组标识、产品名称
批量收集到obj_先生
来自testProducts
按产品id排序的订单;
因为我在1。。obj_先生t.伯爵
环
DBMS_OUTPUT.put_行(
obj|u mr|t(i).prod|u id|'|'|'| obj|u mr|t(i).GROUP|u id|'|'|'| obj|u mr t(i).prod|u name);
端环;
结束;
/
为了解决眼前的问题,您将收到一个未找到数据的错误,因为您开始在prod\u id
10处循环,并依次上升到表中存在的最大prod\u id
。如果您的ID中有任何间隙,则会出现错误。您可以通过以下错误处理来解决此问题:
声明
mr类型为记录
(
产品Id测试产品。产品Id%类型,
组ID testProducts。组ID%类型,
产品名称testProducts。产品名称%TYPE
);
奥布先生;
maxd数;
开始
从testProducts中将MAX(prod_Id)选择到maxd中;
因为我在10。。NVL(最大,1)
环
开始
选择产品标识、组标识、产品名称
进入obj_先生
来自testProducts
其中prod_Id=i;
DBMS|u OUTPUT.put|u line(obj|u mr.prod|id| |'|'|'| obj|u mr.GROUP|u id|'|'| obj|u mr.prod| u name);
例外情况
当找不到数据时
然后
DBMS_OUTPUT.put_line('prod_id不存在:'|| i);
结束;
端环;
结束;
/
要回答您关于多行的问题,记录类型不能有多行,但表类型可以有多行。如果定义了记录类型的表类型,则可以在该表类型中选择多行。请参阅下面的代码以了解如何执行此操作的示例
声明
mr类型为记录
(
产品Id测试产品。产品Id%类型,
组ID testProducts。组ID%类型,
产品名称testProducts。产品名称%TYPE
);
mr类型是mr的表格;
obj_mr_t mr_t;
开始
选择产品标识、组标识、产品名称
批量收集到obj_先生
来自testProducts
按产品id排序的订单;
因为我在1。。obj_先生t.伯爵
环
DBMS_OUTPUT.put_行(
obj|u mr|t(i).prod|u id|'|'|'| obj|u mr|t(i).GROUP|u id|'|'|'| obj|u mr t(i).prod|u name);
端环;
结束;
/
是否确定for循环以10而不是1开始?将一些数据放入表testProducts
或处理异常(应处理)是否确定for循环以10而不是1开始?将一些数据放入表testProducts
或处理异常(应处理)