0

我正在尝试使用 Oracle Service Bus DB Adapter 创建基于 REST 的服务。在查询中传递了四个参数,其中任何时候只有 2 个传递。例如:

http://www.example.com/findPerson/personId=&birthDt=&ss=&lastname=

birthDt 总是通过,但其他 3 个中只有 1 个通过。其他参数为空。

对我来说,要进行数据库查找,我只需要birthDt 和其他 3 个中的 1 个已通过。

OSB 中有没有办法根据传入的内容进行条件选择?我是否执行 Select 或“Query By Example”或“Invoke a stored procedure”来返回我需要的内容?

在响应 REST 服务调用时,我需要以 XML 格式返回几个元素。

4

1 回答 1

2

您可以在后端创建一个存储过程,其中包含所有输入参数作为输入(其中 3 个具有“默认空值”)

创建或替换过程 my_procedure (p_parm1 in varchar2 default null, etc ..

并在存储过程中检查填充了哪些参数来构造您的选择语句。在 osb 上的 xquery 中,您将需要检查您的 rest 调用中的哪些参数已填写,以便将这些参数映射到存储过程调用的可选参数上。

或者您可以使用 db 适配器中的“选择语句”选项并使用如下结构:

select * from my_table where kolom1 = :p_name 或 :p_name 为空

现在您可以根据输入参数的值展开整个查询

同样对于这种情况,您需要在 osb 中使用 xquery,它将您的其余参数“映射”到 select 语句参数。最简单的方法是我认为只需将整个查询参数字符串传递到您的 xquery 并使用 substring/substring-after 等从其中获取不同的参数及其值并将这些值映射到您的数据库的输入 xml 有效负载适配器调用。

于 2012-11-06T06:50:19.040 回答