PL / SQL函数错误

时间:2011-06-25 08:14:04

标签: sql oracle plsql

我对以下Pl / SQL块有疑问:

我想检查用户名是否在表格中 如果这是真的,应该提出例外。

declare
BEREITS_VORHANDEN EXCEPTION;
begin
IF (select username from benutzer where username=:P12_USERNAME) IS NOT NULL THEN
raise BEREITS_VORHANDEN;
END IF;
end;

ERROR:
ORA-06550: Zeile 5, Spalte 5:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:

   ( - + case mod new not null 

   continue avg count current exists max min prior sql stddev
   sum variance execute forall merge time timestamp interval
   date 
   pipe

1 个答案:

答案 0 :(得分:0)

此功能的行为符合您的要求:

CREATE FUNCTION some_user_name_stuff(_P12_USERNAME varchar) RETURNS void AS $$
DECLARE
  user_name_not_found boolean;
BEGIN
  SELECT count(*) = 0 INTO user_name_not_found
  FROM benutzer
  WHERE username=_P12_USERNAME;

  IF (user_name_not_found) THEN
    raise EXCEPTION 'BEREITS_VORHANDEN'; 
  END IF; 
END;
$$ LANGUAGE plpgsql;

我不会这样做,除非丢失的用户名是一个例外情况,即你真的希望它在那里。只需使用布尔函数。此外,尽量不要在conidtional语句中嵌套函数调用,它使得已经过于冗长的语言甚至更不易读。

享受! :)