我在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
类型的参数?
非常感谢所有帮助。提前谢谢。
答案 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;
}