我想從表的特定記錄列只獲取一個值(varchar2數據類型)並將其作爲變量存儲以進行比較。根據價值和條件,我將打電話給兩位遊標中的一位。從特定列中選擇一個值並將其與其他值進行比較
這一切都將在一個函數中。那麼最簡單和最簡單的方法是什麼?順便說一下,這個比較可以直接完成而不需要將值存儲到變量中嗎? (我在甲骨文全球還挺新!)
我想從表的特定記錄列只獲取一個值(varchar2數據類型)並將其作爲變量存儲以進行比較。根據價值和條件,我將打電話給兩位遊標中的一位。從特定列中選擇一個值並將其與其他值進行比較
這一切都將在一個函數中。那麼最簡單和最簡單的方法是什麼?順便說一下,這個比較可以直接完成而不需要將值存儲到變量中嗎? (我在甲骨文全球還挺新!)
「我想從一個表的特定記錄列只能得到一個值(VARCHAR2數據類型)」
您需要選擇這個值到一個變量,即使你要在下一個聲明中使用它。
「根據價值和條件的,我會打電話給兩個中的一個指針。」
事情是這樣的:
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
:
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;
當然,你必須聲明你的光標和使用功能包起來(在這裏我用annonymous塊)。
由於數據存儲在表中,因此可以通過將表與數據連接到遊標並向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來即時創建語句。沒有關於你想要做什麼的更多具體信息,很難指出你在一個特定的方向。
這是有趣的,不同的方法。但是在你的代碼中你可以同時使用這兩個遊標。但在我的情況下,我只需要其中一個,具體取決於我選擇的那一列的值。 – Arianit
然後,你可以換一個case語句光標呼籲 情況下dependent_value 當「值1」然後調用cur_1 當「值」然後調用cur_2 ... 結束的情況下 –
的就是這條線'其中type =「CORP ';'? – Arianit
區分兩個遊標的東西。你沒有提供任何關於你有什麼不同查詢的細節,所以我把它們做了。顯然你需要把我的玩具編碼翻譯成你的實際情況。 – APC
遊標的查詢在兩種情況下都是相同的,唯一的區別是其中一個有加入,另一個不是 – Arianit