我正在尝试使用Oracle Service Bus数据库适配器来创建基于REST的服务。在查询中传递了四个参数,其中任何时候只传递2个参数。例如:
http://www.example.com/findPerson/personId=&birthDt=&ss=&lastname=
birthDt始终通过,但其他3个中只有1个通过。其他参数为空。
对于我进行数据库查找,我需要的只是birthDt和其他3个传递的。
OSB中是否有办法根据传入的内容进行条件选择?我是否执行选择或“按示例查询”或“调用存储过程”以返回我需要的内容?
在对REST服务调用的响应中,我需要以XML格式返回多个元素。
答案 0 :(得分:2)
您可以在后端创建一个存储过程,其中包含所有输入参数作为输入(其中3个具有'default null')
创建或替换过程my_procedure (varchar2中的p_parm1默认为null,等等。
并在存储过程中检查填充了哪些参数以构造select语句。 在osb上的xquery中,您需要检查其余调用中的哪些参数已填入,以将这些参数映射到存储过程调用的可选参数。
或者你可以使用db adapter中的'select statement'选项并使用这样的结构:
选择* 来自my_table 其中kolom1 =:p_name或:p_name为空
现在,您可以根据输入参数的值扩展整个查询
同样对于这种情况,你需要在osb中使用xquery,它将你的rest参数“映射”到select语句参数。 最简单的方法是我想将整个查询参数字符串传递到你的xquery并使用substring / substring-after等来获取不同的参数以及它们的值并将这些值映射到数据库的输入xml有效负载适配器调用。