0

私はこれをやろうとします

CREATE FUNCTION getOneCentOrderIds (s text) RETURNS text
BEGIN
    DECLARE no_more_orders, ent_id INT default 0;
    DECLARE ids text;
    DECLARE orders_cur CURSOR FOR SELECT entity_id FROM sales_flat_order WHERE total_due = 0.01;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_orders = 1;
    OPEN orders_cur;
        FETCH NEXT FROM orders_cur INTO ent_id;
        REPEAT
            SET ids = CONCAT(ids, ', ', ent_id);
            FETCH orders_cur INTO ent_id;
        UNTIL no_more_orders END REPEAT;
    CLOSE orders_cur;
    RETURN ids;
END$

しかし、関数を実行するとnullになります。

単純に concat を削除してそのままSET ids = ent_idにすると、期待どおり、カーソル内の最後の ID が取得されます。

連結はどうすればいいですか?

4

2 に答える 2

0

関数を作成する代わりに、上記は次のようにクエリで簡単に実行できます。

SELECT group_concat(entity_id) FROM sales_flat_order WHERE total_due = 0.01;
于 2013-04-03T14:40:42.960 に答える
0

concat() 関数は、その引数のいずれかが NULL の場合、NULL を返します。試す

DECLARE ids text DEFAULT '';

これにより、CONCAT への最初の呼び出しに NULL 引数がないことが確認されます。

于 2013-04-03T14:45:13.780 に答える