2009-03-03 37 views
5

Tôi có hàm oracle có tham số trong hàng của một bảng, từ câu lệnh chọn tôi cần chuyển hàng hiện tại sang hàm này rằng nó thực hiện một số xử lý và trả về một giá trị. Có một biến giả có thể được sử dụng trong ngữ cảnh của câu lệnh chọn một cái gì đó tương đương với một trình kích hoạt cũ và mới.Cách gọi hàm có tham số Rowtype từ câu lệnh chọn trong Oracle

Tôi muốn làm điều gì đó như

select *,function1(rowtype) from table1 

Tôi muốn tránh đi qua nhiều tham số, vì vậy câu hỏi nên được xem trong bối cảnh đó.

Trả lời

0

Tại sao không chỉ chuyển id của hàng vào và làm cho hàm hoạt động trên đó?


EDIT: Bạn có thể xây dựng OBJECT/TYPE khi đang di chuyển và chuyển cho hàm đó. Sau đó, bạn sẽ chỉ cần truy vấn dữ liệu một lần. Hãy cho tôi biết nếu bạn cần một ví dụ.


+1

trong trường hợp đó tôi cần tìm nạp thông tin hàng một lần nữa –

2

Bạn có thể làm điều này:

DECLARE 
    foo table1%ROWTYPE; 
BEGIN 
    function1(foo); 
END; 

EDIT: Bạn có thể kiểm tra this blog post cho một mô tả chi tiết hơn về cách sử dụng kỹ thuật này.

+1

điều này cần phải là một câu lệnh chọn duy nhất, nếu tôi đi qua PL/SQL thì tôi có nhiều tùy chọn –

3

Bạn không thể thực hiện việc này với% ROWTYPE. % ROWTYPE thực sự là một loại bản ghi PL/SQL, mà không phải là một loại hợp pháp trong SQL, vì vậy bạn không thể sử dụng nó trong một SELECT. Bạn nên tạo một loại đối tượng trong đó có các cột tương tự như bảng, thay đổi chức năng để hy vọng rằng loại đối tượng thay vì ROWTYPE%, và sau đó bạn có thể viết một cái gì đó như thế này:

SELECT function(table1_typ(column1, column2, column3)) 
    FROM table1 t1 

Nhược điểm: Bạn vẫn phải gõ tất cả các cột trong SELECT, và nếu bạn thay đổi bảng, bạn sẽ cần phải thay đổi kiểu đối tượng và SELECT quá.

+0

tôi thực sự đang tìm kiếm tùy chọn này vì tôi muốn tránh đi qua nhiều cột để lưu trữ thủ tục, nhưng nếu tôi vẫn cần phải vượt qua tất cả các cột, tôi nghĩ rằng tôi tốt hơn hết đi qua chúng để SP sau đó để connvert vào một loại và sau đó gửi nó. –

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