【发布时间】:2011-02-09 11:48:00
【问题描述】:
我有一张有两列的表格。第二列是外键列。我想检查此列中是否有外键X 的记录。我在 Oracle 11g 上使用(相当学习)PL/SQL。
编辑:我可以将SQL SELECT 与* 一起使用,但是如何在PL/SQL 中使用它在函数中返回布尔值?
【问题讨论】:
标签: sql plsql foreign-keys oracle11g
我有一张有两列的表格。第二列是外键列。我想检查此列中是否有外键X 的记录。我在 Oracle 11g 上使用(相当学习)PL/SQL。
编辑:我可以将SQL SELECT 与* 一起使用,但是如何在PL/SQL 中使用它在函数中返回布尔值?
【问题讨论】:
标签: sql plsql foreign-keys oracle11g
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 个变量(或 * 选择为行类型)。 这需要 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。
【讨论】: