【问题标题】:Using input parameter as an optional input使用输入参数作为可选输入
【发布时间】:2013-10-11 20:25:51
【问题描述】:

使用 wso2,DSS 版本 3.01,我试图有一个可以是可选参数的输入参数。用户可以说,给我这个特定代码的所有信息,或者如果用户没有指定任何代码,我想给所有数据行。你能帮我吗?

【问题讨论】:

  • 您是否希望用户为某些查询指定某些条件?
  • 是的。我已将输入用作参数。我不确定用户@poohdedoo 是否可以使用下面的默认值,因为我想显示所有代码,而不仅仅是一个。一个代码可以由用户指定。通用 sql 基本上就是我下面 poohdedoo 所拥有的。

标签: wso2 wso2dss input-parameters


【解决方案1】:

除了为每个可选参数创建查询之外,您还可以执行以下操作:

<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>

现在您可以使用“employeeNumber”调用“getEmployees”并获取特定员工,
或者您可以在没有“employeeNumber”的情况下调用“getEmployees”并获取所有员工。
(不带 'employeeNumber' 的调用是通过省略 'employeeNumber' 标签,或使用 'xsi:nil="true"'。)
显然,您不能以这种方式查询值“null”。

【讨论】:

    【解决方案2】:

    好吧,例如

    <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"/>
    

    从员工中选择 *

    你有两个查询employeesByNumberSQL,employeesByNumberSQL1 这两个被映射到getemployeesByNumber 和getemployeesByNumber2

    【讨论】:

    • 您是说有 2 个操作(每个查询一个)和 2 个资源 GET 方法,每个方法一个。你是这么说的吗?因为我想要一个资源 GET 和一个输入参数 CD。如果用户提供,则需要一张 cd,如果没有,请列出所有使用资源 ''
    【解决方案3】:

    您可以通过为输入参数提供默认值来使输入参数成为可选。例如

    <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>
    

    这里如果不提入参,则以入参为一。否则你需要创建两个查询并以编程方式处理它们

    【讨论】:

    • 看来我需要创建 2 个查询?我怎么做?我有以下参数和资源。 ' '
    • 你必须创建两个查询一个带有输入参数 Cd 和另一个不带输入参数的查询,然后将每个查询映射到不同的操作
    • 好的。我可以创建 2 个查询。您如何将这两个查询映射到不同的操作?我是 DSS 的新手。我会很感激你的例子。谢谢。
    • 我已附上样本
    猜你喜欢
    • 2012-05-22
    • 2017-11-06
    • 2022-12-21
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多