【问题标题】:WSO2DSS service converting null value to ' '(one single space)WSO2DSS 服务将空值转换为“”(一个空格)
【发布时间】:2014-12-05 19:50:33
【问题描述】:

我正在尝试通过 DSS 服务调用 db 函数。该 db 函数基本上是为更新从 dss 作为输入获得的数据库中的用户值而编写的。

在我的 db 函数中,如果它得到空值作为输入,它不会更新我的 postgres 数据库中的用户详细信息,否则它将更新。我使用 COALESCE 函数实现了这一点。我单独测试了 db 函数的这个功能,它工作正常。

但是当我通过 dss 将 null 值传递给函数时,dss 会将 null 转换为 ''(单个空格)并将其传递给函数。不接收空更新的功能数据库字段只有一个空格。

现在因为这个问题,我不得不在我的 COALESCE 函数中编写更多逻辑。

我想知道为什么 dss 将 null 值转换为 ' '?

我的db函数如下

CREATE OR REPLACE FUNCTION modify_user(customer_id_in character varying, email_id_in character varying, mobile_in character varying, first_name_in character varying, last_name_in character varying)
  RETURNS integer AS
$BODY$
BEGIN
     IF EXISTS (SELECT 1 FROM ildb_schema.customer_detail WHERE identifier = customer_id_in) THEN 
 UPDATE ildb_schema.customer_detail 
 SET first_name=COALESCE(first_name_in,first_name),
     last_name=COALESCE(last_name_in,last_name),
     mobile_number=COALESCE(mobile_in,mobile_number),
     email=COALESCE(email_id_in,email),
     last_modify=now() 
     WHERE identifier = customer_id_in 
     AND (first_name_in IS NOT NULL AND first_name_in IS DISTINCT FROM first_name 
   OR last_name_in IS NOT NULL AND last_name_in IS DISTINCT FROM last_name 
   OR mobile_in IS NOT NULL AND mobile_in IS DISTINCT FROM mobile_number 
   OR email_id_in IS NOT NULL AND email_id_in IS DISTINCT FROM email);
     RETURN 1;
     END IF;
     RETURN 0;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION ildb_schema.modify_user(character varying, character varying, character varying, character varying, character varying)
  OWNER TO postgres;

DSS如下。

<data name="update_test">
   <config id="ildb">
      <property name="carbon_datasource_name">test_database</property>
   </config>
    <query id="update_function" useConfig="ildb">
      <sql>select * from modify_user(:cid,:email,:mob,:fn,:ln)</sql>
      <result element="customer" rowName="">
         <element column="modify_user" name="modify_user" xsdType="string"/>
      </result>
      <param defaultValue="null" name="cid" sqlType="STRING"/>
      <param defaultValue="null" name="email" sqlType="STRING"/>
      <param defaultValue="null" name="mob" sqlType="STRING"/>
      <param defaultValue="null" name="fn" sqlType="STRING"/>
      <param defaultValue="null" name="ln" sqlType="STRING"/>
   </query>
      <operation name="update_function_op1">
      <call-query href="update_function">
         <with-param name="cid" query-param="cid"/>
         <with-param name="email" query-param="email"/>
         <with-param name="mob" query-param="mob"/>
         <with-param name="fn" query-param="fn"/>
         <with-param name="ln" query-param="ln"/>
      </call-query>
   </operation>
     <resource method="PUT" path="/update/function">
      <call-query href="update_function">
         <with-param name="cid" query-param="cid"/>
         <with-param name="email" query-param="email"/>
         <with-param name="mob" query-param="mob"/>
         <with-param name="fn" query-param="fn"/>
         <with-param name="ln" query-param="ln"/>
      </call-query>
   </resource>
</data>

【问题讨论】:

    标签: wso2 wso2carbon wso2dss dss


    【解决方案1】:

    如果要将默认值设置为 null,请将其设置为“#{NULL}”。例如,

    <param defaultValue="#{NULL}" name="name" sqlType="STRING"/>
    

    更多信息请参考this doc。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2015-03-11
      相关资源
      最近更新 更多