Oracle Pro * C对象类型转换为C结构

问题描述 投票:0回答:1

嗨,我们有一个服务器,它具有处理每个传入请求的流程,就像这样:

将C结构请求序列化为字符串(VARCHAR2),并将其作为IN OUT NOCOPY变量发送到Oracle Package1。

在Package1中通过搜索序列化的请求字符串查找值并进行阶段1。

获取序列化的请求字符串并打印phase1结果。

...

将序列化的请求字符串作为IN OUT NOCOPY变量发送到Oracle PackageN。

在PackageN中,通过搜索序列化的请求字符串和处理phaseN来查找值。

获取序列化的请求字符串并打印phaseN结果。

将请求字符串反序列化为struct并生成响应,并将其传递给发送响应函数。


我们的大问题是find variables的成本,它花费了大量的CPU资源,实际上要消耗大量的CPU资源来从字符串中搜索和提取字符串很多次。


我对这个问题的解决方案是创建一个Oracle对象类型,并将所有变量存储在该类型中,然后将其逐个传递给Package1到PackageN,因此获取variableM的方式就像v_obj.variableM而不是搜索字符串。我正在尝试使用Pro C对象功能,本文档Pro C / C ++程序员指南-第17章对象说要使用OTT工具生成C结构并将其包含在C源代码中。

OTT命令是:

ott intype=autho_row_obj_in.typ hfile=AuthoRowObj.h outtype=autho_row_obj_out.typ code=c userid=scott/tiger

INTYPE文件为:

CASE=LOWER
  TYPE TLV_UTILS.AUTHO_ROW_OBJ AS AuthoRowObj

OTT命令成功结束并创建了头文件

我将此添加到pcscfg.cfg:

OBJECTS=YES
intype=autho_row_obj_out.typ

但是我收到了[[ALLOCATE,FREE的proc语义错误,并将指向ott的结构的指针传递给PLSQL块,如下所示:

{ AuthoRowObj *pRow, AuthoRowObj_ind *pRowInd; EXEC SQL BEGIN DECLARE SECTION; VARCHAR T_tlv_Data [ 4096]; EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE BEGIN :pRow:pRowInd := TO_AUTHO_OBJ(:T_tlv_Data); END; }
错误是:

PLS-S-00382, expression is of wrong type

oracle stored-procedures plsql proc oracle-pro-c
1个回答
0
投票
此错误与

proc参数有关:

intype=/src/inc/autho_row_obj_out.typ
此帖子有帮助:OraFAQ: Pro*C compilation error
© www.soinside.com 2019 - 2024. All rights reserved.