我想从表的特定记录列只获取一个值(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