CREATE OR REPLACE FUNCTION drop_students_databases() RETURNS INTEGER AS ' DECLARE helpstr VARCHAR(300); BEGIN helpstr := ''Funkce pro zrušení všech databází uživatelů, jejichž\n'' || ''jméno (jméno uživatele) vyhovuje masce příkazu LIKE.\n\n'' || ''např. SELECT drop_students_databases('' || quote_literal(''group%'') || '')\n\n'' || ''pozn. musíte být přihlášen jako uživatel postgres.\n'' || ''autor: Pavel Stěhule, stehule@kix.fsv.cvut.cz 19.1.2002\n''; RAISE NOTICE ''%'', helpstr; RETURN 0; END; ' LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION drop_students_databases(varchar(100)) RETURNS INTEGER AS ' DECLARE db RECORD; deleted INTEGER := 0; helpstr VARCHAR(300); BEGIN IF length($1) = 0 OR $1 ISNULL OR current_user() <> ''postgres'' THEN helpstr := ''Funkce pro zrušení všech databází uživatelů, jejichž\n'' || ''jméno (jméno uživatele) vyhovuje masce příkazu LIKE.\n\n'' || ''např. SELECT drop_students_databases('' || quote_literal(''group%'') || '')\n\n'' || ''pozn. musíte být přihlášen jako uživatel postgres.\n'' || ''autor: Pavel Stěhule, stehule@kix.fsv.cvut.cz 19.1.2002\n''; IF current_user <> ''postgres'' THEN RAISE EXCEPTION ''Funkci může volat pouze uživatel postgres\n\n%'', helpstr; ELSE RAISE EXCEPTION ''Argument funkce musí být neprázdný řetězec\n\n%'', helpstr; END IF; END IF; FOR db IN select datname, usename from pg_database, pg_user where datdba=usesysid and usename like $1 LOOP deleted := deleted + 1; RAISE NOTICE ''Drop database %,%'', db.datname, db.usename; EXECUTE ''drop database "'' || db.datname || ''"''; END LOOP; RETURN deleted; END; ' LANGUAGE 'plpgsql';