|
|
faint,写了一堆都没了,现在只好长话段说了.个人看法:,存储过程是PL/SQL的代码编译后存在oracle中,可以通过多种方法调用,而PRO*C则是一个C的接口.可以说一般情况下是没有人会在存储过程调用c的方法的(虽然oracle提供这种调用的方法,但我还没看见谁用过),而PRO*C则可以调用存储过程.所以我的看法pro*c和存储过程是一个调用和被调用的关系,没有效率比较的问题.比如这是有以前写的一段pro*c的代码是把所有的PL/SQL代码全写在了我的PRO*C中,如下:
就是把下段代码中的 EMS_DEQUEUE(:msginfo);
部分全用PL/SQL写在PRO*C中.
...........
后来的写法
int
MsgReceiver::StartMsg()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR msginfo[200];
EXEC SQL END DECLARE SECTION;
//Because the msginfo is the output variable,so shall set the max length of the string.
msginfo.len=200;
bool loopflag=true;
EXEC SQL WHENEVER SQLERROR DO MsgError();
while(loopflag)
{
EXEC SQL EXECUTE
BEGIN
EMS_DEQUEUE(:msginfo);
END;
END-EXEC;
msginfo.arr[msginfo.len]='\0';
if(!strcmp((char*)msginfo.arr,"Stop" )
loopflag=false;
else
printf(msginfo);
//MsgFunction();
}
return 1;
}
也就是说如过能用存储过程实现就用它来实现再通过PRO*C 调用就可以了,无论如何存储过程做同样的事情应该效率要高一些,只有那写不容易用存储过程来实现的,比如复杂的比较,或交互操作就用PRO*C,两者是个补充关系,没有比较关系. |
|