0
我想知道如何使用函数参数conditionaly。这是我的功能,并且可以读取查询里面的评论:PostgreSQL有条件使用函数参数
CREATE OR REPLACE FUNCTION mediabase.select_media(sysEnvironment character varying, statusId integer)
RETURNS refcursor AS
$BODY$
DECLARE
ref refcursor;
BEGIN
OPEN ref FOR
SELECT media.id, media.title, media.unique_filename, media.owner_id, media.status_id, media.location_name_id, media.upload_user_id, media.upload_ip, media.metadata_id, media.type_id, media.description, media.system_environment, media.upload_date, media.gps_location, media.language_id, media_publications.publication_id, media.limitations, media_categories.category_id, metadata.width, metadata.height, metadata.equipment, metadata.copyright, metadata.creation_time, metadata.file_format, metadata.resolution, metadata.resolution_unit, metadata.gps_longitude, metadata.gps_latitude, metadata.artist, metadata.color_space, metadata.gps_altitude, metadata.software_used, metadata.user_comment
FROM mediabase.media, mediabase.metadata, mediabase.media_categories, mediabase.media_publications
WHERE media.metadata_id = metadata.id
AND media.id = media_categories.media_id
AND media.id = media_publications.media_id
-- Problem: this CASE doesn't work of course
CASE statusId <> -1 THEN
AND media.status_Id = statusId
END
-- End problem
AND media.system_environment = sysEnvironment
ORDER BY media.upload_date DESC;
RETURN ref;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
我只需要使用“statusId”参数,如果它是从-1不同,否则我获赠没有结果的有 - 课程不是地位-1。稍后,我需要添加更多的这种类型的过滤器。
非常感谢伊戈尔。 – Ambran
虽然解决方案比'case'更为简单,但没有什么可以阻止它检查左侧。 –
@Clodoaldo没有在完整的程序中测试,但['this'](http://sqlfiddle.com/#!12/5880c/3)示例显示,查询优化器可以省略无用的检查。 –