2016-03-19 14 views
0

postgresqlの構文に問題があります。主にreturn、whileループ、カーソルです。私は何を書いていいのですか?どのwhileループ条件がカーソルを通過する必要がありますか?postgresqlの関数の構文エラー

CREATE FUNCTION price(category integer, reduce real, minimum integer) 
RETURNS void; 

DECLARE name VARCHAR(MAX); 
DECLARE total integer; 
DECLARE number integer; 
BEGIN 

DECLARE C1 CURSOR FOR 
    SELECT people, quantity FROM store WHERE categories = category; 

OPEN C1; 

FETCH C1 INTO name, number; 

total = SELECT SUM(quantity) FROM store WHERE categories = category; 

WHILE (condition) LOOP 
    IF(total > minimum) 
     THEN UPDATE store SET (price = price - reduce) WHERE categories = category; 
    END IF; 
    FETCH C1 INTO name, number; 
END LOOP; 

CLOSE C1; 
END; 
LANGUAGE plpgsql; 
+0

1)パラメーターなしの 'return;'; 2) 'FOUND'変数を使用します:[例](http://www.postgresqltutorial.com/plpgsql-cursor/#crayon-56ea6d043addd111161561) – Abelisto

答えて

0

機能が非常に複雑で、開閉線に構文エラーがあります。

CREATE FUNCTION price(category integer, reduce real, minimum integer) RETURNS void AS $$ 
DECLARE 
    total integer; 
BEGIN 
    SELECT SUM(quantity) INTO total FROM store WHERE categories = category; 
    IF total > minimum THEN 
    UPDATE store SET price = price - reduce WHERE categories = category; 
    END IF; 
    RETURN; 
END; 
$$ LANGUAGE plpgsql STRICT VOLATILE; 

あなたは本当に単一UPDATE文がはるかに効率的である、ここでカーソルを使用する必要はありません。

+0

私はその複合体を知っていますが、カーソルとwhileループを使用しなければなりません – user1836292

+0

あなたが示す例。これはあなたがいるコースの仕事かもしれませんか? – Patrick