Используя 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="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, эти два сопоставлены с getemployeesByNumber и getemployeesByNumber2.
Ну, вы можете сделать входные параметры необязательными, задав значения по умолчанию для входных параметров. Например
<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>
Здесь, если вы не укажете входные параметры, он примет входной параметр как один. Или же вам нужно создать два запроса и обрабатывать их программно