我有一个有两列的表。第二列是外键列。我想检查此列中是否有外键X
的记录。我在Oracle 11g上使用(而不是学习)PL / SQL。
修改:我可以将SQL
SELECT
与*
一起使用但是如何在PL / SQL中使用它来在函数中返回布尔值?< / p>
答案 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 =假。