2009-12-14 37 views
7

Tôi mới dùng PostgreSQL và đang sử dụng công cụ truy vấn trong PGAdmin. Tôi đang cố gắng chạy truy vấn pgsql sử dụng các biến, nhưng tôi dường như không thể có được cú pháp đúng.Lỗi cú pháp PostgreSQL trong PGAdmin

Dưới đây là một truy vấn mẫu cung cấp cho một lỗi cú pháp:

DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    PRINT num; 

END; 

Cập nhật:
Ok, hãy để tôi cố gắng và giải thích. Tôi đến từ một nền máy chủ SQL. Trong phòng quản lý, tôi có thể mở một cửa sổ truy vấn và chơi với các truy vấn (T) -SQL.

Ví dụ, tôi có thể viết một cái gì đó như thế này:

DECLARE @num INT 
SET @num = 3 
SELECT @num 

Tôi biết đây là một ví dụ câm, nhưng tôi chỉ cố gắng để khai báo một biến và làm điều gì đó với nó. Tôi đang cố gắng làm quen với PL/PGSQL.


Cập nhật, lần nữa:
Đó là tôi một lần nữa. Tôi đang thử tập lệnh bên dưới và nhận được lỗi "[ERROR] 7.0-2: cú pháp, ký tự không mong muốn". Điều này có nghĩa là để làm việc trong PGAdmin?

DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    RAISE NOTICE '%', num; 

END; 
+0

Coming từ/TSQL thế giới MSSQL cũng tôi chạy vào cùng một vấn đề . Tôi rất ngạc nhiên khi bạn không thể viết và chạy các script PL/PGSQL một lần trong PostgreSQL. – Tub

Trả lời

1

Tôi không biết bạn đang cố gắng đạt được điều gì. PostgreSQL không hỗ trợ kiểu cú pháp này. Các từ khóa tương tự (ngoại trừ PRINT ?!) có trong PL/pgSQL là ngôn ngữ thủ tục để xây dựng các hàm CHỨC NĂNG, không phải để viết các truy vấn SQL độc lập.

1

Postgres không hỗ trợ bất kỳ điều gì giống như vậy (yet). psql (ứng dụng dòng lệnh chính thức) có một số kịch bản thô sơ.

Tùy chọn tốt nhất cho bạn là pgAdmin đã tích hợp sẵn scripting.

5

Chỉ cần nói lại và "cụ thể hóa" những gì người khác nói: Không có thủ tục nội tuyến trong PostgreSQL. Ngoài ra còn có không có tuyên bố PRINT. Bạn phải:

CREATE OR REPLACE FUNCTION test() RETURNS void AS $$ 
DECLARE 
    num INTEGER; 

BEGIN 

    num := 3; 
    RAISE NOTICE '%', num; 

END; 
$$ LANGUAGE plpgsql; 

SELECT test(); 
+0

Cảm ơn bạn đã liên kết! –

11

Bạn có thể sử dụng câu lệnh xác nhận.Ví dụ:

do $$ 
declare 
    num integer := 10; 
begin 

    RAISE INFO 'VARIABLE: %', num; 

end; 
$$language plpgsql; 

Khi bạn sử dụng pgAdmin bạn phải sử dụng nút EXECUTE QUERY thay vì Execute pdScript, vì nó được giải thích ở đây:

http://postgresql.1045698.n5.nabble.com/PgAmin3-Anonymous-code-block-can-t-be-executed-by-pressing-quot-Execute-PG-script-quot-button-td5771073.html

Các tài liệu cho làm báo cáo ở đây :

http://www.postgresql.org/docs/9.3/static/sql-do.html