在PostgreSQL中通过Yii将NULL值传递给数字参数

时间:2014-02-11 10:10:36

标签: postgresql yii

我在PostgreSQL中编写了一个带有NUMERIC类型参数的函数。我试图通过SqlDataProvider组件从使用Yii框架开发的webapp调用该函数。但是,每次参数值为空时,我都会收到以下错误:

Ivalid input syntax for type 'numeric'.

每当我尝试通过PhpPgAdmin直接执行该功能时,一切似乎都完美无瑕。

以下是讨论的PL / pgSQL函数search(..)的代码:

search("itemcode" character varying DEFAULT NULL, "taxpercentage" numeric DEFAULT NULL)
LANGUAGE plpgsql
    AS $$
BEGIN  
   SELECT * FROM item WHERE (itemcode IS NULL OR item.item_code LIKE itemcode||'%')
      AND (taxpercentage IS NULL OR item.tax_percentage = taxpercentage);
END;
$$;

在Yii模型中,我还创建了一个搜索函数,该函数又调用数据库级PL / pgSQL函数:

public function search()
    {       
        $count=Yii::app()->db->createCommand("SELECT COUNT(*) FROM  search('$this->item_code','$this->tax_percentage')")->queryScalar();
        $sql="SELECT * FROM search('$this->item_code','$this->tax_percentage')";
        $dataProvider=new CSqlDataProvider($sql, array(
        'totalItemCount'=>$count,
        'pagination'=>array(
        'pageSize'=>10,
        ),
        ));
        return $dataProvider;
    }

如何将NULL值传递给NUMERIC类型的参数?

非常感谢所有帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我通过在搜索功能中检查空并使用参数化查询来解决它。所以修改后的函数是

public function search()
    {    
if(empty($this->tax_percentage))
        $this->tax_percentage=null;

    $count=Yii::app()->db->createCommand("SELECT COUNT(*) FROM  search(:item_code,:tax_percentage)")->queryScalar();
    $sql="SELECT * FROM search('$this->item_code','$this->tax_percentage')";
    $dataProvider=new CSqlDataProvider($sql, array(
    'params' => array(':item_code' => $this->item_code,':tax_percentage' => $this->tax_percentage),
    'totalItemCount'=>$count,
    'pagination'=>array(
    'pageSize'=>10,
    ),
    ));
    return $dataProvider;
}