我试图通过为Postgresql编写一个带有if条件的查询来使用NamedParameterJdbcTemplate中的查询。
我将向查询、存储和tot_store传递两个参数。我尝试了以下查询,但它不起作用。有什么建议吗?
IF (:store=1)
BEGIN
SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store asc;
END
ELSE IF (:store = 2)
BEGIN
SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store asc;
END
ELSE
BEGIN
SELECT * FROM store_pricing WHERE store = :store and tot_store = :tot_store ORDER BY store desc;
END错误显示
syntax error at or near "IF"提前谢谢你
发布于 2017-11-13 14:11:28
PostgreSQL不接受IF作为顶层语句。它也不是SQL标准的。
使用CASE ... WHEN ...
不过,PL/PgSQL代码块中允许使用IF;请参阅DO和CREATE FUNCTION。
在本例中,我将编写一条SQL语句并
ORDER BY
CASE WHEN store IN (1,2) THEN -store
ELSE store
END DESC(未测试)
发布于 2017-11-13 17:46:08
如果您使用的是Mysql,则代码中存在不正确的If语句。更正IF语法:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF你需要去掉括号,把THEN放在条件之后。
例如,您可以编写这样的存储过程:
DELIMITER //
CREATE FUNCTION SimpleCompare(n INT, m INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE s VARCHAR(20);
IF n > m THEN SET s = '>';
ELSEIF n = m THEN SET s = '=';
ELSE SET s = '<';
END IF;
SET s = CONCAT(n, ' ', s, ' ', m);
RETURN s;
END //
DELIMITER ;注意,在Mysql中有另一个IF。它是一个可以在select语句中使用的函数。
https://stackoverflow.com/questions/47257208
复制相似问题