我想从表的特定记录列中只获取一个值(varchar2数据类型),并将其存储为要比较的变量。根据价值和条件,我将打电话给两个游标中的一个。
这一切都将在一个函数内部。那么存档的最简单最短的方法是什么?顺便说一下,这个比较是否可以直接完成而不将值存储到变量中? (我在甲骨文世界有点新!)
答案 0 :(得分:1)
您可以使用print "$(a)";
:
SELECT INTO
当然你必须声明你的光标并用函数包装它(这里我使用了匿名块)。
答案 1 :(得分:1)
由于数据存储在表中,因此可以通过将表与数据连接到游标并将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动态构建语句。如果没有关于您尝试做什么的更具体的信息,很难指出您的具体方向。
答案 2 :(得分:1)
"我想从表格的特定记录列中只获取一个值(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;