私は3つの値を持つオブジェクトを返す関数を持っています。 select文からその関数を呼び出す方法はありますか?各値を別の列にする方法はありますか?私は3つの関数に分けることができますが、値は関連しているので、パフォーマンス上の理由から値を1つにしたいと考えていました。 (だから、Oracleは、クエリのすべての行のための3つのに非常に似た複雑な機能を呼び出す必要はありません。)Oracleのselect文でオブジェクト型を使用
をそうするために:
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;
私はselect文からTEST_FUNC呼び出すことができるようにしたいのですが関数を複数回呼び出すことなく、a、b、cを異なる列にすることができます。私は多分このような何かを考えたが、それは動作しません:
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
のOracle 10gでこのような何かをする方法はありますか、この問題を解決するための良い方法はありますか?
ありがとうございます!これは私を助けた。 – filiprem
問題は単純に名前解決にあります。 Oracleは、データベース内の表エイリアスまたはシノニム/パッケージとして、SELECT文のドットの前の最初の部分を常に解釈します。また、すべての列をチェックするわけでもありません。だから、あなたはtable_alias.column.attributeでその名前を完全修飾する必要があります – Falco