PostgreSQL 的 pl/pgsql 的 cannot begin/end transactions in PL/pgSQL错误

postgres=# select FindCourse('aaaa');

ERROR:  cannot begin/end transactions in PL/pgSQL

HINT:  Use a BEGIN block with an EXCEPTION clause instead.

CONTEXT:  PL/pgSQL function findcourse(character varying) line 21 at SQL statement

出现这种错误的原因是:

看我改后的代码:

[postgres@lex pgsql]$ cat ./data/test.sqlCREATE OR REPLACE Function FindCourse

   ( name_in IN varchar )

   RETURNS integer LANGUAGE plpgsql AS $$

DECLARE

    cnumber integer;

    c1 CURSOR

    FOR

       SELECT course_number, instructor

        from course_tbl

        where course_name = name_in

        FOR UPDATE;



BEGIN



BEGIN

open c1;

fetch c1 into cnumber;



IF not found THEN

     cnumber := 9999;

ELSE

     UPDATE course_tbl

        SET instructor = 'SMITH'

        WHERE CURRENT OF c1;

    COMMIT;

END IF;



close c1;



EXCEPTION

WHEN OTHERS THEN

END;

RETURN cnumber;

END;$$;

[postgres@lex pgsql]$ 

而我之前的是:

[postgres@lex pgsql]$ cat ./data/test.sqlCREATE OR REPLACE Function FindCourse

   ( name_in IN varchar )

   RETURNS integer LANGUAGE plpgsql AS $$

DECLARE

    cnumber integer;

    c1 CURSOR

    FOR

       SELECT course_number, instructor

        from course_tbl

        where course_name = name_in

        FOR UPDATE;



BEGIN

 BEGIN

open c1;

fetch c1 into cnumber;



IF not found THEN

     cnumber := 9999;

ELSE

     UPDATE course_tbl

        SET instructor = 'SMITH'

        WHERE CURRENT OF c1;

    COMMIT;

END IF;



close c1;



EXCEPTION WHEN OTHERS THEN

END;

RETURN cnumber;

END;$$;

[postgres@lex pgsql]$ 

这就是差别了。

你可能感兴趣的:(transaction)