Tôi có hàm trả về đối tượng có 3 giá trị. Có cách nào để gọi hàm đó từ một câu lệnh chọn và có mỗi giá trị là một cột khác không? Tôi có thể chia nó thành 3 chức năng, nhưng các giá trị có liên quan nên tôi muốn giữ nó như là một trong những lý do hiệu suất. (Vì vậy, oracle không phải gọi 3 chức năng phức tạp rất giống nhau cho mỗi dòng trong truy vấn.)Sử dụng loại đối tượng trong câu lệnh chọn trong Oracle
Vì vậy, đối:
create type test_obj is object (
a NUMBER,
b NUMBER,
c NUMBER);
create or replace function test_func (
pinput NUMBER)
return test_obj
as
begin
return test_obj(0, 0, 0);
end test_func;
Tôi muốn để có thể gọi test_func từ một tuyên bố chọn , nhưng có a, b và c là các cột khác nhau, mà không cần gọi hàm nhiều lần. Tôi nghĩ rằng có thể một cái gì đó như thế này, nhưng nó không hoạt động:
select
iv.col1,
iv.col2,
iv.func_data.a,
iv.func_data.b,
iv.func_data.c
from
(select
mt.col1,
mt.col2,
test_func(mt.input) as func_data
from
my_table mt) iv
Có cách nào để làm bất cứ điều gì như thế này trong Oracle 10g, hoặc có cách nào tốt hơn để giải quyết vấn đề này?
cảm ơn! điều này đã giúp tôi. – filiprem
Vấn đề chỉ đơn giản là với độ phân giải tên. Oracle luôn diễn giải phần đầu tiên trước dấu chấm trong câu lệnh SELECT như một bí danh bảng hoặc một Từ đồng nghĩa/gói trong cơ sở dữ liệu. Nó cũng không kiểm tra tất cả các cột. Vì vậy, bạn phải hoàn toàn đủ điều kiện tên với table_alias.column.attribute – Falco