3

我在 PL/SQL 中定义了一个游标,我想知道从 Pro C 中使用它的最佳方法是什么。通常对于 Pro C 中定义的游标,您会这样做:

EXEC SQL DECLARE curs CURSOR FOR SELECT 1 FROM DUAL;
EXEC SQL OPEN curs;
EXEC SQL FETCH curs INTO :foo;
EXEC SQL CLOSE cusr;

我希望相同(或相似)的语法适用于打包的游标。例如,我有一个包 MyPack,带有声明

type MyType is record (X integer);
cursor MyCurs(x in integer) return MyType;

现在我在我的 Pro*C 代码中有一段相当不令人满意的嵌入式 PL/SQL,它可以打开光标、进行获取等,因为我无法让第一种语法工作。使用示例

EXEC SQL EXECUTE
  DECLARE
    XTable is table of MyPack.MyType;
  BEGIN
    OPEN MyPack.MyCurs(:param);
    FETCH MyPack.MyCurs INTO XTable;
    CLOSE MyPack.MyCurs;
  END;
END-EXEC;

有谁知道是否有更“纯”的 Pro*C 方法?

4

2 回答 2

1

它实际上与您的第一个示例没有太大不同,只需确保您的光标定义在包规范中而不是包体中。不要“声明”它,只需使用以下内容:

数据库对象:

create or replace package mypkg as 
  cursor mycur is 
    SELECT 1 FROM DUAL; 
end;

在 pro*c 中:

EXEC SQL OPEN schema.mypkg.mycur; 
EXEC SQL FETCH schema.mypkg.mycur INTO :foo; 
EXEC SQL CLOSE schema.mypkg.mycur; 

当然,您正在连接的 oracle 用户需要可以访问该包,等等。如果该包由连接的用户拥有,或者有一个同义词,“模式”。pro*c 调用中不需要。

于 2010-06-28T06:11:07.273 回答
0

是的。对术语 REF CURSOR 进行谷歌搜索,您应该会看到您想要执行的操作的示例。

于 2010-06-11T15:56:26.663 回答