我对以下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
答案 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语句中嵌套函数调用,它使得已经过于冗长的语言甚至更不易读。
享受! :)