用record类型和table类型存储查询语句返回的多条记录 的例子

DECLARE

--定義一個record type
TYPE TEST_EMP IS RECORD
(
C1 gobo_sign.org_id%TYPE,
C2 gobo_sign.proc_name%TYPE
);

[@more@]

--定義table type

type t_type is table of TEST_EMP;
v_type t_type;

BEGIN

--將select result寫入 定義的table
SELECT org_id,proc_name BULK COLLECT INTO v_type
FROM gobo_sign
WHERE rownum <= 6;

for v_index in v_type.first .. v_type.last loop
dbms_output.put_line(v_type(v_index).C1 || ' ' || v_type(v_index).C2);
end loop;
END;

結果:

0 OMR004
0 OMR110
1 BOMR002
1 BOMR003
1 OMR004
1 OMR110

另:

一个关于tape的procedure ,LZ可以看看

CREATE OR REPLACE PROCEDURE Zxt_type_Study Is
/*
type 的使用
*/
Testrow1 Test%ROWTYPE;
TYPE Aa IS TABLE OF Test%Rowtype;
Testrow Aa := Aa();
TYPE Bb IS TABLE OF Test.ac%Type;
Cc Bb;
Testrow2 Test%ROWTYPE;
t Test.Ac%TYPE;
BEGIN
Testrow2.Ac := 'a3';
Testrow2.Breanch := 'zxtss';
Testrow2.Amt := 5000;
--取update的结果
UPDATE Test SET ROW = Testrow2 WHERE Ac = Testrow2.Ac RETURNING Ac, Breanch, Amt INTO Testrow1;
--给type付值
FOR i IN (SELECT * FROM Test) LOOP
Testrow.EXTEND;
Testrow(Testrow.LAST) := i;
Testrow2 :=i;
Dbms_Output.Put_Line('ac1=' || Testrow2.Ac || ';breanch1=' || Testrow2.Breanch || ';amt1=' || Testrow2.Amt);
END LOOP;
Dbms_Output.Put_Line('ac=' || Testrow1.Ac || ';breanch=' || Testrow1.Breanch || ';amt=' || Testrow1.Amt);

--给type付值1
SELECT Test.Ac BULK COLLECT INTO Cc FROM Test;
--forall的使用
FORALL j IN Cc.FIRST .. Cc.LAST
UPDATE Test SET Test.Amt = 1000 WHERE Test.Ac = Cc(j);
--取type中的一个值
FOR y IN Cc.FIRST .. Cc.LAST LOOP
Dbms_Output.Put_Line('cc(y)' || Cc(y));
END LOOP;
Dbms_Output.Put_Line('t=' || t);
--打印执行前边的sql结果集的条数
Dbms_Output.Put_Line('sql=' || SQL%ROWCOUNT);
END Zxt_type_Study;

引自: http://www.itpub.net/717088.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/92289/viewspace-896996/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/92289/viewspace-896996/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,可以使用动态内存分配和结构体数组来一次性接收数据库查询返回多条记录。以下是一种实现方法: 首先,定义一个结构体来表示数据库查询记录的结构,比如: ```c struct Record { int id; char name[20]; int age; }; ``` 然后,声明一个结构体数组指针以及一个变量来存储记录的数量,例如: ```c struct Record *records; int numRecords; ``` 接下来,执行数据库查询操作,并获取记录的数量,例如: ```c // 假设从数据库中获取到numRecords的值 // 动态分配足够的内存来存储多条记录 records = (struct Record*)malloc(numRecords * sizeof(struct Record)); // 检查内存分配是否成功 if (records == NULL) { printf("内存分配失败\n"); return; } // 循环接收每条记录的字段值 for (int i = 0; i < numRecords; i++) { // 假设从数据库中获取到id、name和age字段的值 int id = ...; char name[20] = ...; int age = ...; // 将获取到的字段值存储到结构体数组中 records[i].id = id; strncpy(records[i].name, name, sizeof(records[i].name)); records[i].age = age; } ``` 完成数据库查询后,就可以通过指针遍历结构体数组并访问每条记录的字段值。 最后,记得在不再需要使用结构体数组时,使用`free()`函数释放动态分配的内存,以避免内存泄漏: ```c free(records); ``` 这样,就可以使用动态内存分配和结构体数组一次性接收数据库查询返回多条记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值