テーブルの特定のレコード列から1つの値(varchar2データ型)を取得し、比較する変数として格納したいとします。値と条件に応じて、私は2つのカーソルのうちの1つを呼び出すつもりです。特定の列から値を選択し、それを他の値と比較する
これはすべて関数内にあります。では、アーカイブするのが最も簡単で最短の方法は何ですか?ところで、この比較は変数に値を格納せずに直接行うことができますか? (!私はオラクルの世界でちょっと新しいです)
テーブルの特定のレコード列から1つの値(varchar2データ型)を取得し、比較する変数として格納したいとします。値と条件に応じて、私は2つのカーソルのうちの1つを呼び出すつもりです。特定の列から値を選択し、それを他の値と比較する
これはすべて関数内にあります。では、アーカイブするのが最も簡単で最短の方法は何ですか?ところで、この比較は変数に値を格納せずに直接行うことができますか? (!私はオラクルの世界でちょっと新しいです)
あなたがしようとしている場合でも、変数にこの値を選択する必要が
「私はテーブルの特定のレコードの列から一つの値だけ(VARCHAR2データ型)を取得したいです」次のステートメントでそれを使用してください。 「値と状態に依存し、私はつもりコール2つのカーソルの一人です」
このような何か:
create or replace function get_customers
return sys_refcursor
is
rv sys_refcursor;
report_type your_table.some_col%type;
begin
select some_col into report_type
from your_table
where other_col = 'WHATEVER';
if report_type = 'CORPORATE' then
open rv for
select * from customers
where type = 'CORP';
else
open rv for
select * from customers;
end if;
return rv;
end;
あなたはSELECT INTO
使用することができます、あなたのカーソルを宣言して(ここで私はAnnonymousのブロックを使用しました)関数でそれをラップする必要がある。もちろん、
DECLARE
variable_name VARCHAR2(200);
BEGIN
SELECT col_name
INTO variable_name
FROM your_tab
WHERE specific_column = value;
-- rest
EXCEPTION
WHEN NO_DATA_FOUND THEN ...
WHEN TOO_MANY_ROWS THEN ...
END;
を。
データはテーブルに格納されているため、カーソルを使用してテーブルにデータを結合し、where句に詳細を追加することで直接比較を行うことができます。
declare
cursor cur_1 as
select value1
from table1 a
join table2 b on a.fk = b.pk
where b.value = 'desired_value';
cursor cur_2 as
select value2
from table3 c
join table4 d on c.fk = d.pk
where d.value = 'desired_value2';
begin
for rec in cur_1 loop
null;
end loop;
for rec2 in cur_2 loop
null;
end loop;
end;
動的SQLとEXECUTE IMMEDIATEを使用して、オンザフライで文を作成することもできます。あなたが何をしようとしているかについての特定の情報がなければ、あなたを特定の方向に向けるのは難しいです。
これは、異なるアプローチで面白いです。しかし、あなたのコードでは、両方のカーソルが呼び出されます。しかし、私の場合、私が選択している列の価値に応じて、私はそれらのうちの1つだけを必要とします。 – Arianit
はその後、カーソルが「VALUE1」は、その後cur_1 「value2の」をcur_2呼び出す... エンドケース –
であるために何本のライン 'タイプ=「CORPを呼び出す dependent_value ケースcase文で呼び出しをラップすることができ'; '? – Arianit
2つのカーソルを区別するもの。あなたはどのような異なった質問をあなたが持っているかについての詳細を何も提示しなかったので、私はそれらを作った。明らかに私のおもちゃのコードをあなたの実際の状況に翻訳する必要があります。 – APC
カーソルのクエリは両方のケースで同じですが、唯一の違いは、1つに結合があり、もう1つではないことです。 – Arianit