mysql存储函数案例陈述

时间:2019-02-07 11:15:17

标签: mysql stored-functions

我正在构建一个存储函数以从浮点数返回有效数字。例如sfround(4.867,2)将返回4.8,sfround(1345,2)将返回1300

示例代码为

{this.state.modalVisible && 
    <Modal onRequestClose={() => { }}>
        <GallerySwiper
            style={{ flex: 1, backgroundColor: "black" }}
            images={[
                {
                    source: {
                        uri: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/1200px-Google_Images_2015_logo.svg.png",

                        dimensions: { width: 1080, height: 1920 }
                    }
                },
            ]}
        />
        <Header
            style={{
                backgroundColor: 'black',
                borderBottomWidth: 0,
            }}
        >
            <Right>
                <Icon
                    name='close'
                    color='white'
                    onPress={() => {
                        this.setState({
                            modalVisible: false,
                        })

                        console.log("getting closed");

                    }}
                />
            </Right>
        </Header>
    </Modal>
}

(我了解到缩进会导致mysql出现问题)

我抛出一个错误

delimiter //

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
CASE n
WHEN 0 THEN RETURN 0;
ELSE
BEGIN
RETURN ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
END;
END CASE;
END//

delimiter ;

这是我第一次写这样的野兽,不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

您可以将SQL CASE用作单个表达式,该表达式返回单个值。在程序语言中,它不像IFswitch/case那样使用(尽管您可以do that too使用)。它是更多的功能样式。所以您可能需要的是:

delimiter //

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
  RETURN CASE n
    WHEN 0 THEN 0
    ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
  END;
END//

delimiter ;

请注意,对于单语句过程或函数,不需要更改定界符。也可能只是

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
  RETURN CASE n
    WHEN 0 THEN 0
    ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
  END;

还要注意,我仅解决语法错误。不是使用的算法。