2011-02-09 60 views
2

我有一个包含两列的表。第二列是一个外键列。我想查看是否有外键X在这一列的记录。我在Oracle 11g上使用(而非学习)PL/SQL。检查列是否在PL/SQL函数中具有特定条目

编辑:我可以用SQLSELECT*但我要如何使用这个在PL/SQL中函数返回一个布尔值?

回答

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个变量(或*到一个rowtype)。 这需要ONE值,这就是为什么我已将检查移入存在,所以您的外部SELECT只选择一个值。

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

+0

谢谢!我一直在使用Oracle 11g的完整参考书,我有一种感觉,它不是学习PL/SQL的最佳方式。你会有如何去学习它的建议吗? – 2011-02-09 12:11:22

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 = true和0 = false。

相关问题