2013-10-11 77 views
1

使用wso2,DSS版本3.01,我試圖讓輸入參數可以是一個可選參數。用戶可以說,給我所有關於這個特定代碼的信息,或者如果用戶沒有指定任何代碼,我想給所有的行數據。你能幫我嗎?使用輸入參數作爲可選輸入

+0

是否您希望用戶爲某些查詢指定某些標準? – cmd

+0

是的。我用輸入作爲參數。我不確定defaultvalue可以像下面的user @poohdedoo一樣使用,因爲我想顯示所有的代碼而不僅僅是一個。一個代碼可以由用戶指定。通用的sql基本上就是我通過poohdedoo得到的。 – user2872396

回答

0

那麼你可以通過給輸入參數賦予默認值來使輸入參數可選。例如

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

在這裏,如果您沒有提及輸入參數,它會將輸入參數作爲一個參數。否則,你需要創建兩個查詢和處理它們編程

+0

看來我需要創建2個查詢?我怎麼做?我有以下參數和資源。 「 <操作名稱= 「GetCd」> <調用查詢HREF = 「DefaultCampus」> <與-PARAM NAME = 「CD」 查詢 - PARAM = 「CD」/> <資源方法= 「GET」 路徑= 「採樣/ {鎘}」> <調用查詢HREF = 「樣品」> <與-PARAM NAME = 「CD」查詢參數=「Cd」/> ' – user2872396

+0

您必須創建兩個查詢一個輸入參數Cd和另一個查詢沒有輸入參數採取所有,然後映射每個查詢diffe租操作 – poohdedoo

+0

好的。我可以創建2個查詢。你如何將這兩個查詢映射到不同的操作?我是DSS的新手。我會很感激你的榜樣。謝謝。 – user2872396

0

確定洙例如

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

SELECT * FROM員工

你有兩個查詢employeesByNumberSQL,employeesByNumberSQL1這兩個映射togetemployeesByNumber和getemployeesByNumber2

+0

您說有2個操作(每個查詢一個)和2個資源GET方法,每個都有一個。那是你在說什麼?因爲我想用一個輸入參數CD來獲得一個資源GET。如果用戶提供了,那麼需要一張CD,如果沒有,則使用資源列出全部 < -param name =「CampusCd」query-param =「CampusCd」/> ' – user2872396

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

+0

太棒了... ...就像一個魅力!!!! –