我有一个标定在PL/SQL,我想知道什么是最好的方式来使用它从亲C。通常对于一个标定在亲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;

现在我有在我的亲*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做法?

有帮助吗?

解决方案

它实际上将不会有太大的不同于你的第一个例子,只是确保你的光标的定义是在包装规范中并不包的身体。不"宣布"它只是去喜欢的东西:

数据库的目的:

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

在临*c:

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

当然包将需要访问的oracle用户的连接等。如果软件包是用户所拥有的连接,或者是同义词,"架构。"不需要在临*c话。

其他提示

是的。做一个谷歌搜索一词REF CURSOR和你应该看到的例子是什么你想要做的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top