检查列是否在PL / SQL函数中有某个条目

时间:2011-02-09 11:48:00

标签: sql plsql foreign-keys oracle11g

我有一个有两列的表。第二列是外键列。我想检查此列中是否有外键X的记录。我在Oracle 11g上使用(而不是学习)PL / SQL。

修改:我可以将SQL SELECT*一起使用但是如何在PL / SQL中使用它来在函数中返回布尔值?< / p>

2 个答案:

答案 0 :(得分:3)

FUNCTION my_func ()
RETURN BOOLEAN
IS
  l_contains_x NUMBER;
  l_contains_x_bool BOOLEAN := false;
BEGIN
  SELECT 1
  INTO l_contains_x
  FROM dual
  WHERE EXISTS (
    SELECT 1
    FROM table
    WHERE col = X
  );

  IF l_contains_x = 1 THEN 
    l_contains_x_bool := TRUE;
  END IF;

  RETURN l_contains_x_bool;

END;

请注意,此处的关键字是INTO关键字,它将值返回到变量中。这些位置匹配,因此您可以选择4列到4个变量(或*到行类型)。 这需要一个值,这就是我将支票移入存在的原因,因此外部SELECT只选择一个值。

请注意,SQL没有BOOLEAN类型的概念,因此您的函数仅在PL / SQL上下文中可用。如果你想在SQL上下文中返回true / false,你应该使用VARCHAR2'true'和'false'。

答案 1 :(得分:0)

create or replace function hasFK(i_key in someTable.fk%type) return number as
  v_cnt pls_integer := 0;
begin
  select count(1) 
  into v_cnt
  from someTable
  where fk = i_key
  and rownum = 1;

  return v_cnt;
end;

这将给出1 =真,0 =假。