Использование входного параметра в качестве дополнительного входа

Используя wso2, DSS версии 3.01, я пытаюсь получить входной параметр, который может быть необязательным параметром. Пользователь может сказать, дать мне всю информацию для этого конкретного кода, или, если пользователь не указывает какой-либо код, я хочу дать все строки данных. Вы можете помочь?

3 ответа

Вместо создания запроса для каждого необязательного параметра вы также можете сделать следующее:

<query id="selectEmployees" useConfig="default">
   <sql>select * from Employees where (:employeeNumber is null or employeeNumber = :employeeNumber)</sql>
   <result element="employees" rowName="employee">
      <element column="lastName" name="last-name" xsdType="string"/>
      <element column="firstName" name="first-name" xsdType="string"/>
      <element column="email" name="email" xsdType="string"/>
      <element column="salary" name="salary" xsdType="double"/>
   </result>
   <param defaultValue="#{NULL}" name="employeeNumber" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/>
</query>
<operation name="getEmployees">
   <call-query href="selectEmployees">
      <with-param name="employeeNumber" query-param="employeeNumber"/>
   </call-query>
</operation>

Теперь вы можете вызвать getEmployees с employeeNumber и получить конкретного сотрудника,
или вы можете вызвать getEmployees без employeeNumber и получить всех сотрудников.
(Вызов без 'employeeNumber' производится путем пропуска тега employeeNumber или использования 'xsi:nil="true" ".)
Очевидно, что вы не можете запросить значение 'null' таким образом.

Ну, вы можете сделать входные параметры необязательными, задав значения по умолчанию для входных параметров. Например

<query id="MyQ" useConfig="myDS">
  <sql>select cust_id,name from customer where cust_id = ?</sql>
  <result element="Entries" rowName="Entry">
     <element column="cust_id" name="cust_id" xsdType="string"/>
     <element column="name" name="name" xsdType="string"/>
  </result>
  <param defaultValue="1" name="cust_id" sqlType="INTEGER"/>
</query>

Здесь, если вы не упомянете входные параметры, он примет входной параметр как единое целое. Или же вам нужно создать два запроса и обработать их программно

Хорошо, например

<query id="employeesByNumberSQL" useConfig="default">
  <sql>select * from Employees where employeeNumber = ?</sql>
  <result element="employees" rowName="employee">
     <element column="lastName" name="last-name" xsdType="string"/>
     <element column="firstName" name="first-name" xsdType="string"/>
     <element column="email" name="email" xsdType="string"/>
     <element column="salary" name="salary" xsdType="double"/>
  </result>
  <param name="employeeNumber" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/>

выберите * из сотрудников

У вас есть два запроса employeeByNumberSQL, employeeByNumberSQL1, эти два сопоставлены togetemployeesByNumber и getemployeesByNumber2

Другие вопросы по тегам