2010-06-02 28 views
5

Trong SQL Server tôi có thể sao chép mã sql ra khỏi ứng dụng và dán nó vào SSMS, khai báo & gán các vars tồn tại trong sql và chạy. yay tuyệt vời gỡ lỗi kịch bản.Gỡ lỗi SQL trong pgAdmin khi SQL chứa biến

Ví dụ: (Xin lưu ý tôi gỉ và cú pháp có thể không đúng):

declare @x as varchar(10) 
set @x = 'abc' 
select * from sometable where somefield = @x 

tôi muốn làm một cái gì đó tương tự với Postgres trong pgAdmin (hoặc công cụ postgres khác, bất kỳ đề xuất?) Mà tôi chỉ có thể thả SQL của tôi (params & tất cả) vào một cái gì đó sẽ chạy với Postgres DB.

Tôi nhận ra bạn có thể tạo pgscript, nhưng dường như không tốt lắm, ví dụ, nếu tôi làm tương đương ở trên, nó không đặt dấu nháy đơn xung quanh giá trị trong @x, cũng không nó cho phép tôi tăng gấp đôi chúng và bạn không nhận được bảng sau - chỉ văn bản ...

Hiện tại tôi có một đoạn SQL mà ai đó đã viết có 3 biến duy nhất trong đó được sử dụng khoảng 6 lần mỗi ...

Vì vậy, câu hỏi là làm cách nào để những người khác gỡ lỗi SQL hiệu quả, tốt nhất là theo kiểu tương tự với ngày SQL Server của tôi.

+0

Tôi muốn thêm điều này làm yêu cầu tính năng, nhưng tôi không thể không đủ tuổi để tìm ra cách danh sách gửi thư pgAdmin hoạt động :( –

Trả lời

1

Bạn có thể đạt được điều này bằng cách sử dụng lệnh PREPARE, EXECUTE, DEALLOCATE để xử lý các câu lệnh, đây thực sự là những gì chúng ta đang nói đến ở đây.

Ví dụ:

PREPARE test AS SELECT * FROM users WHERE first_name = $1; 
EXECUTE test ('paul'); 
DEALLOCATE test; 

Có lẽ không phải là đồ họa như một số có thể thích, nhưng chắc chắn hoàn toàn khả thi.

+0

Tôi xóa câu trả lời của mình đề xuất sử dụng máy chủ được liên kết từ sql! Cảm ơn, chỉ là một sự xấu hổ nó không thể được đặt tên. –

1

Tôi sẽ chụp ảnh bằng cách viết SQL function để kết thúc truy vấn của bạn. Nó có thể đơn giản như

CREATE OR REPLACE FUNCTION my_function(integer, integer) 
RETURNS integer 
AS 
$$ 
    SELECT $1 + $2; 
$$ 
LANGUAGE SQL; 

SELECT my_function(1, 2); 

Tôi sẽ làm điều này thay vì PREPARE vì nó sẽ đơn giản hơn để cập nhật nó. Tùy thuộc vào mức độ phức tạp của hàm, bạn có thể cũng muốn xem một số khác trong số PL's trong Postgres.

+0

Không thực sự là những gì tôi đã theo dõi. Tôi không muốn Tôi phải viết một hàm mỗi khi tôi cần gỡ lỗi SQL. Ngoài ra, tôi không nghĩ đầu ra sẽ là thứ tôi cần –

+0

Nếu tất cả những gì bạn đang tìm kiếm là cách sử dụng các biến trong truy vấn của bạn, một hàm giống như vậy để bọc truy vấn của bạn là rất dễ dàng.Những loại đầu ra là bạn đang tìm kiếm? – dcolish

+0

đầu ra tôi sẽ nhận được nếu tôi chạy truy vấn, hoặc đầu ra trình gỡ lỗi.Điều này dứt khoát không phải là giải pháp cho câu hỏi - có lẽ không có câu trả lời - tôi đã nghĩ rằng có lẽ một thay thế pgAdmin tôi có thể sử dụng. Tôi chỉ muốn dán mã của tôi vào cửa sổ sql, đặt vars của tôi sau đó chạy nó. –

0

SQL procs nổi tiếng là khó gỡ lỗi. giải pháp què nhưng thực tế tôi đã phải viết đăng các tin nhắn đến một bảng đăng nhập, như thế này (xin tha vấn đề cú pháp):

create table log_message (
    log_timestamp timestamp not null default current_timestamp, 
    message varchar(1000) 
); 

sau đó thêm dòng để proc lưu trữ của bạn như:

insert into log_message (message) values ("The value of x is " || @x); 

Rồi sau chạy:

select * from log_message order by 1; 

Nó không đẹp, nhưng hoạt động trong mọi DB.

+0

Tôi không nghĩ rằng họ khó khăn để gỡ lỗi cả. Esp trong máy chủ sql. Xin lỗi, đây không phải là những gì tôi đang tìm kiếm. –

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