我有一个包含两列的表。第二列是一个外键列。我想查看是否有外键X
在这一列的记录。我在Oracle 11g上使用(而非学习)PL/SQL。检查列是否在PL/SQL函数中具有特定条目
编辑:我可以用SQL
SELECT
与*
但我要如何使用这个在PL/SQL中函数返回一个布尔值?
我有一个包含两列的表。第二列是一个外键列。我想查看是否有外键X
在这一列的记录。我在Oracle 11g上使用(而非学习)PL/SQL。检查列是否在PL/SQL函数中具有特定条目
编辑:我可以用SQL
SELECT
与*
但我要如何使用这个在PL/SQL中函数返回一个布尔值?
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个变量(或*到一个rowtype)。 这需要ONE值,这就是为什么我已将检查移入存在,所以您的外部SELECT只选择一个值。
请注意,SQL没有BOOLEAN类型的概念,因此您的函数只能在PL/SQL上下文中使用。如果你想在SQL上下文中返回true/false,你应该使用VARCHAR2'true'和'false'。
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 = true和0 = false。
谢谢!我一直在使用Oracle 11g的完整参考书,我有一种感觉,它不是学习PL/SQL的最佳方式。你会有如何去学习它的建议吗? – 2011-02-09 12:11:22