从特定列中选择一个值,并将其与其他值进行比较

时间:2017-09-15 14:33:49

标签: sql oracle plsql

我想从表的特定记录列中只获取一个值(varchar2数据类型),并将其存储为要比较的变量。根据价值和条件,我将打电话给两个游标中的一个。

这一切都将在一个函数内部。那么存档的最简单最短的方法是什么?顺便说一下,这个比较是否可以直接完成而不将值存储到变量中? (我在甲骨文世界有点新!)

3 个答案:

答案 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;