postgres=# select FindCourse('aaaa');ERROR: cannot begin/end transactions in PL/pgSQLHINT: 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;BEGINBEGINopen 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;EXCEPTIONWHEN OTHERS THENEND;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;BEGINBEGINopen 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;EXCEPTIONWHEN OTHERS THENEND;RETURN cnumber;END;$$;[postgres@lex pgsql]$
这就是差别了。