2012-12-09 19 views
6

Trong MS SQL Server, bạn có thể khai báo các biến cục bộ của bất kỳ kiểu nguyên thủy nào, hoặc của một kiểu bảng. Bảng này là một bảng bình thường mà bạn có thể chạy SELECT, INSERT, UPDATEDELETE bật, giống như bất kỳ bảng nào khác, ngoại trừ đó là biến cục bộ, không phải là một phần của cơ sở dữ liệu.Có cách nào để tạo một biến bảng cục bộ bên trong một proc được lưu trữ trong Firebird không?

Tôi đang cố gắng làm điều tương tự trong Firebird, nhưng dường như không thích cú pháp.

declare variable value int; --works fine 
declare variable values table (value int); --Error: "Token unknown (table)" 

Có cách nào để thực hiện việc này không? (Và trước khi bất cứ ai nói "sử dụng một thủ tục được lưu trữ có thể lựa chọn", điều đó sẽ không hoạt động. Tôi cần một cái gì đó tôi có thể tự động chạy INSERTSELECT trên.)

Trả lời

13

Firebird không hỗ trợ các biến bảng giống như cách SQL Server thực hiện.

Điều gần bạn có lúc xử lý của bạn là Global Temporary Tables (Cần Firebird 2.1 hoặc cao hơn)

(v.2.1) bảng tạm thời toàn cầu (GTTs) là bảng được lưu trữ trong các danh mục hệ thống với siêu dữ liệu vĩnh viễn , nhưng với dữ liệu tạm thời. Dữ liệu từ các kết nối khác nhau (hoặc giao dịch, tùy thuộc vào phạm vi) được tách biệt với nhau, nhưng siêu dữ liệu của GTT được chia sẻ giữa tất cả các kết nối và giao dịch.

Có hai loại GTT:

với dữ liệu đó vẫn tồn tại cho tuổi thọ của kết nối, trong đó GTT quy định được tham chiếu; và

với dữ liệu chỉ tồn tại trong suốt thời gian của giao dịch tham chiếu.

Bạn phải tạo GTT trước.

CREATE GLOBAL TEMPORARY TABLE 
    ... 
    [ON COMMIT <DELETE | PRESERVE> ROWS] 
Các vấn đề liên quan