Проверьте, есть ли в столбце определенная запись в функции PL / SQL - PullRequest
2 голосов
/ 09 февраля 2011

У меня есть таблица с двумя столбцами. Второй столбец является столбцом внешнего ключа. Я хотел бы проверить, есть ли запись с внешним ключом X в этом столбце. Я использую (скорее изучаю) PL / SQL на Oracle 11g.

Редактировать: Я мог бы использовать SQL SELECT с *, но как мне использовать это в PL / SQL для возврата логического значения в функции?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011
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. Если вы хотите, чтобы значение true / false возвращалось в контексте SQL, вам следует использовать VARCHAR2 'true' и 'false'.

0 голосов
/ 14 февраля 2011
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 = ложь.

...