2012-12-07 40 views
5

Tôi không thể tìm thấy điều này ngay lập tức từ các ví dụ. Tôi muốn tăng một biến trong một vòng lặp, trong một hàm.Tăng một số trong một vòng lặp trong plpgsql

Ví dụ:

iterator float 4; 

begin 
    iterator = 1; 

    while iterator < 999 
     ..... 
     iterator ++; 

END; 

Làm thế nào sẽ này được thực hiện?

Tôi đã nhìn vào tài liệu này về việc kiểm soát dòng chảy:
http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html

Và ai trong số họ dường như có liên quan đối với tôi, trừ khi đây là hoàn toàn cách duy nhất để mô phỏng incrementing một biến.

Trả lời

20

Để tăng một biến trong plpgsql:

iterator := iterator + 1; 

Không có hành ++.

Ngoài ra, toán tử gán của plpgsql là :=, không phải =.
Và tìm correct syntax for loops in PL/pgSQL here.
đoạn mã của bạn có thể làm việc như thế này:

DECLARE 
    iterator float4 := 1; -- you can init at declaration time 

BEGIN 
    WHILE iterator < 999 
    LOOP 
     iterator := iterator + 1; 
     -- do stuff 
    END LOOP; 
END; 

tùy chọn khác sẽ là một vòng lặp FOR:

FOR i in 1 .. 999 -- i would be an integer, not a float4 
LOOP 
    -- do stuff 
END LOOP; 
+0

được, vậy trong khi câu lệnh kết thúc khi kết thúc? tại sao không kết thúc vòng lặp – CQM

+0

@CQM: xin lỗi, đó là một lỗi đánh máy bên cạnh tôi. Đã sửa. –

+0

trong vòng lặp của tôi Tôi đang làm các truy vấn sql, các câu lệnh đó sử dụng '=' đúng, tức là 'CẬP NHẬT tập mytable this_id = finalid ...' – CQM

0

Đối với một sscce

DO $$ 
DECLARE 
    counter INTEGER := 0 ; 
BEGIN 
    WHILE counter <= 5 LOOP 
     counter := counter + 1 ; 
     RAISE NOTICE 'Counter: %', counter; 
    END LOOP ; 
END; $$ 

nếu bạn muốn tránh khai báo biến (ngắn gọn hơn)

DO $$ 
BEGIN 
    FOR counter IN 1..5 LOOP 
     RAISE NOTICE 'Counter: %', counter; 
    END LOOP; 
END; $$ 

credits

Các vấn đề liên quan