博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 的 pl/pgsql 的 cannot begin/end transactions in PL/pgSQL错误
阅读量:7061 次
发布时间:2019-06-28

本文共 1405 字,大约阅读时间需要 4 分钟。

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]$

这就是差别了。

转载地址:http://wdyll.baihongyu.com/

你可能感兴趣的文章