{"kind": "language", "major": "18", "item": {"slug": "plpgsql", "name": "plpgsql", "name_zh": "", "category": "\u201c \u5916\u5c42\u5757 \u201d", "summary": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00", "aliases": [], "content_hash": "0ac58ee8413283961683c0d2035444342aa37f89ea0296245d62c3cd517e8a9b", "versions": {"10": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/10/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/10/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/10/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/10/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/10/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/10/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/10/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/10/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/10/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/10/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/10/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/10/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "label": "10.23", "major": "10", "channel": "historical", "revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "source_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "catalog_fingerprint": "691be281b476dde4374d7f805b2bacc2e75bdef40f1e9d3d42e91f97fe95cfd0"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://pg.center/docs/10/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 10 English manual", "sha256": "e4ff699e727c880b932806cb3db290bb884efb82573b94b585fdf08a6d89c00f", "language": "en", "original_url": "/docs/10/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE PROCEDURAL LANGUAGE plpgsql;\n\nCOMMENT ON PROCEDURAL LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">42.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u548c\u89e6\u53d1\u5668\u8fc7\u7a0b\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 37.4.5 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u591a\u6001\u7c7b\u578b anyelement\u3001anyarray\u3001anynonarray\u3001anyenum \u548c anyrange\u3002\u591a\u6001\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\uff0c\u8be6\u89c1\u7b2c 37.2.5 \u8282\u3002\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u548c\u7b2c 42.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/10/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/10/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "1b53dac179eed808f8111e4b96da95af6975ecf8ec96340250740da8ba350729", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "e8e1bcbc7e9f22a3f50e2d34f5be608d26d78ac13e4a8c35d518ca50c4545505", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "8f5fc17edcfe5acd16c467249b05b2805c9f5291639aa0541f591b0a6877b3f1", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "656d4b2c0bc1c715ac159437b055b986a57e55b7c047b6acafb622b44e361352", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "607a6aa69be922a111fb7f97965d25db0237e600d82685e2597c1aac6ce3cbf0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "d6b2625eeef3554375c4111456caa0e635ca555e6c0f776ffac36d486af751c4", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "e0ad2629c94835cfc12b3bf507245c2c246ade5167775a31cc0dc73b7c7a8f0a", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "e5db91712d5c4fc529542ee83dc77efe8e692ff370858b10f43b5aa45f84439f", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "f24ee2538640f63da6a98694494b6b41dd222d0afe72e3a1e5a77c2ddb9b43b0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/10/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "3cdf3d3b963c81832929ba0a02a4c0c1580b7488213011c6d7f5b9daa774176c", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/10/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "28508419f5314096be1932eb1950fffae38cda2371de2ae91f2ec1dc4bf5f299", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/10/description/0": "PL/pgSQL procedural language", "/versions/10/facts/0/label": "Kind", "/versions/10/facts/0/value": "Bundled procedural-language variant", "/versions/10/facts/1/label": "Family", "/versions/10/facts/1/value": "PL/pgSQL", "/versions/10/facts/2/label": "Trusted", "/versions/10/facts/3/label": "Handler", "/versions/10/facts/4/label": "Inline handler", "/versions/10/facts/5/label": "Validator", "/versions/10/facts/6/label": "Library", "/versions/10/facts/7/label": "Default version", "/versions/10/facts/8/label": "Module pathname", "/versions/10/facts/9/label": "Comment", "/versions/10/facts/9/value": "PL/pgSQL procedural language", "/versions/10/related/0/label": "plpgsql-control-structures", "/versions/10/related/1/label": "plpgsql-cursors", "/versions/10/related/2/label": "plpgsql-declarations", "/versions/10/related/3/label": "plpgsql-development-tips", "/versions/10/related/4/label": "plpgsql-errors-and-messages", "/versions/10/related/5/label": "plpgsql-expressions", "/versions/10/related/6/label": "plpgsql-implementation", "/versions/10/related/8/label": "plpgsql-porting", "/versions/10/related/9/label": "plpgsql-statements", "/versions/10/related/10/label": "plpgsql-structure", "/versions/10/related/11/label": "plpgsql-trigger", "/versions/10/sections/0/title": "Installation definition from the matching source archive", "/versions/10/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "0b42a874cdd6d82725953451e73b9e88457fc201cd2c467e6f453e638386e49b"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "b48cd5aa8d87103b011dda42012b2aab62de061283272b2a454d676f041fa4c3", "src/pl/plpgsql/src/plpgsql--1.0.sql": "66f1dc2c4eaa9be9a512361d6171bd29f6ac078c9125e2d5b7014535e951a0e5"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "11": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/11/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/11/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/11/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/11/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/11/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/11/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/11/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/11/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/11/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/11/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/11/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/11/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/11/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "label": "11.22", "major": "11", "channel": "historical", "revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "source_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "catalog_fingerprint": "8f21f4444b7f68923f4762af0eb7937fa2907026e91249483e79050de012c901"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://pg.center/docs/11/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 11 English manual", "sha256": "25b2cf2b11ea6deb32e204af2c94948b6efc1830e66cea098ed0f6755735e6dd", "language": "en", "original_url": "/docs/11/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE PROCEDURAL LANGUAGE plpgsql;\n\nCOMMENT ON PROCEDURAL LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">43.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 38.5.5 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u591a\u6001\u7c7b\u578b anyelement\u3001anyarray\u3001anynonarray\u3001anyenum \u548c anyrange\u3002\u591a\u6001\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\uff0c\u8be6\u89c1\u7b2c 38.2.5 \u8282\u3002\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u548c\u7b2c 43.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/11/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/11/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "6c58c48636a65a5b5746d451951231d085470adb4523064f5f7dcaf593f36717", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "4f4f02be7ae583cecf32fbcf26bc0f401b5717ead006eeafb7251361597275ea", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "5efc1b25b1bfd1b108c9d51d022c59afa066b106b22eac9d8ddb4e4d8096bf26", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "77e7b12dbac8100ba740d7dd8c40632ad516bcf94975f4f12cd2584a7e174efe", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "fdc58f4913e882e19c2eaeb85edc23f612fec2133037ebb4f0ee93f4df37c705", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "65eff4e7642ad7b3a41b3ce26074f53b8227c7dcb625b33dc3d8dbfbed4b7d71", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "2951864877099a13b83dce0e4eb195b7ecdd73a913e7597bcf1401f861643640", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "93e8060cc01208ce158c76eb60e38e7ec3dea925b7a0fdfb3ba9ee9d64f7ada1", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "ab7d3ceee15a893dd6dcc6c9eb89edb37817dafe7bc15e77a77fd520ca870dd1", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "0ea1942bad5eb7c41cd47d16a3b708b42e4fa5d534c0a2b1d2e48c7bf11d7586", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/11/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "d194998d1639aeabf6b5bb9497522fa4a40c36277ce3580f672fb3d425d0091f", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/11/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "588b221369d882b1634ee99fdfa0caf57e3947bced7023ffaafdf4d82bf51181", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/11/description/0": "PL/pgSQL procedural language", "/versions/11/facts/0/label": "Kind", "/versions/11/facts/0/value": "Bundled procedural-language variant", "/versions/11/facts/1/label": "Family", "/versions/11/facts/1/value": "PL/pgSQL", "/versions/11/facts/2/label": "Trusted", "/versions/11/facts/3/label": "Handler", "/versions/11/facts/4/label": "Inline handler", "/versions/11/facts/5/label": "Validator", "/versions/11/facts/6/label": "Library", "/versions/11/facts/7/label": "Default version", "/versions/11/facts/8/label": "Module pathname", "/versions/11/facts/9/label": "Comment", "/versions/11/facts/9/value": "PL/pgSQL procedural language", "/versions/11/related/0/label": "plpgsql-control-structures", "/versions/11/related/1/label": "plpgsql-cursors", "/versions/11/related/2/label": "plpgsql-declarations", "/versions/11/related/3/label": "plpgsql-development-tips", "/versions/11/related/4/label": "plpgsql-errors-and-messages", "/versions/11/related/5/label": "plpgsql-expressions", "/versions/11/related/6/label": "plpgsql-implementation", "/versions/11/related/8/label": "plpgsql-porting", "/versions/11/related/9/label": "plpgsql-statements", "/versions/11/related/10/label": "plpgsql-structure", "/versions/11/related/11/label": "plpgsql-transactions", "/versions/11/related/12/label": "plpgsql-trigger", "/versions/11/sections/0/title": "Installation definition from the matching source archive", "/versions/11/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "c78e6479abdbdb4f2efc91ba5beaa6daee75f9976b4178afe1f0e0b256f2190e"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "b48cd5aa8d87103b011dda42012b2aab62de061283272b2a454d676f041fa4c3", "src/pl/plpgsql/src/plpgsql--1.0.sql": "66f1dc2c4eaa9be9a512361d6171bd29f6ac078c9125e2d5b7014535e951a0e5"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "12": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/12/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/12/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/12/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/12/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/12/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/12/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/12/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/12/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/12/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/12/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/12/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/12/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/12/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "label": "12.22", "major": "12", "channel": "historical", "revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "source_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "catalog_fingerprint": "9f857f4ee4875f9c7de6bfc9df4b757dec8b3a0bb88eadb519c7bd267bd56149"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://pg.center/docs/12/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 12 English manual", "sha256": "51f96fb54896071d8d8601865ff2d11b3517059744801c31cbac4e4fa842b920", "language": "en", "original_url": "/docs/12/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE LANGUAGE plpgsql;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">42.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 37.5.5 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u591a\u6001\u7c7b\u578b anyelement\u3001anyarray\u3001anynonarray\u3001anyenum \u548c anyrange\u3002\u591a\u6001\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\uff0c\u8be6\u89c1\u7b2c 37.2.5 \u8282\u3002\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u548c\u7b2c 42.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/12/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/12/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "c26209f3ac6a4f96ad29b0f703fc0ed924ee2f7fe458c3caba3000e7ea3a3819", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "73a78698314628d41dfec7dc5cd7552a99cb2bf63d5b27cc364a86ff1035a1bf", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "3696bfae4051305b27655d516bb71062bc38e5f0bcf0a7ddab5358c7850b474f", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "0e6bcf59ca823203507cf562250a10fff4cfa969f19fe795dde1347e940d0395", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "ea5fac093355fbcade17e706570de6eaf87ce72065816cafc56d11e4f53da462", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "87d1e7d3b830c9622be0ee7521d8bd55e87d09a3e6cb835de1b01d009b1a6801", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "7100feda2bd5f7bc6b2f4f836a4f00ec0da3b58210957606dcfe21898c175d87", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "5af0d90872f2b189eb743d8b3afc22ae44256518c18fa5ed00c61126b30541f8", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "bb01af05f6f12315e9a8417cfdcf2d548f086ff9a7649303531fc1804b3ede6b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "9f462762340fb211aa9da41a413b90de73dfc5003abcd7deea83232c7d984265", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/12/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "bae0e1f07d89e8c6cd91e68f3b4508465f37f9f2af168ac857c2cffdb907541a", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/12/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "e318193efff0e8eef4e7bc18a47f02dd45d62faeddedcc67507d75c5b13fe169", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/12/description/0": "PL/pgSQL procedural language", "/versions/12/facts/0/label": "Kind", "/versions/12/facts/0/value": "Bundled procedural-language variant", "/versions/12/facts/1/label": "Family", "/versions/12/facts/1/value": "PL/pgSQL", "/versions/12/facts/2/label": "Trusted", "/versions/12/facts/3/label": "Handler", "/versions/12/facts/4/label": "Inline handler", "/versions/12/facts/5/label": "Validator", "/versions/12/facts/6/label": "Library", "/versions/12/facts/7/label": "Default version", "/versions/12/facts/8/label": "Module pathname", "/versions/12/facts/9/label": "Comment", "/versions/12/facts/9/value": "PL/pgSQL procedural language", "/versions/12/related/0/label": "plpgsql-control-structures", "/versions/12/related/1/label": "plpgsql-cursors", "/versions/12/related/2/label": "plpgsql-declarations", "/versions/12/related/3/label": "plpgsql-development-tips", "/versions/12/related/4/label": "plpgsql-errors-and-messages", "/versions/12/related/5/label": "plpgsql-expressions", "/versions/12/related/6/label": "plpgsql-implementation", "/versions/12/related/8/label": "plpgsql-porting", "/versions/12/related/9/label": "plpgsql-statements", "/versions/12/related/10/label": "plpgsql-structure", "/versions/12/related/11/label": "plpgsql-transactions", "/versions/12/related/12/label": "plpgsql-trigger", "/versions/12/sections/0/title": "Installation definition from the matching source archive", "/versions/12/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6261bb27dc93bf9105529d5f1a87b02e716f39d06e2f3a48ebd61292e4c70f7e"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "b48cd5aa8d87103b011dda42012b2aab62de061283272b2a454d676f041fa4c3", "src/pl/plpgsql/src/plpgsql--1.0.sql": "c1fd03aa2fdd5db25d025d83cd5ee52a335a532dfbf0f72554c0df7a18188b1e"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "13": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/13/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/13/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/13/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/13/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/13/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/13/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/13/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/13/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/13/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/13/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/13/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/13/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/13/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "label": "13.23", "major": "13", "channel": "historical", "revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "source_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "catalog_fingerprint": "c7015c845255c9d721c547c8ab9ef37825d332588c9691d982e6906b7d571002"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://pg.center/docs/13/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 13 English manual", "sha256": "93a9e509a9511632f4896600769c872d388284a91d1ae3b01b51744ed5ea2092", "language": "en", "original_url": "/docs/13/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">42.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">42.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 37.5.5 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u7b2c 37.2.5 \u8282\u4ecb\u7ecd\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4f7f\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\u3002\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 42.3.1 \u8282\u548c\u7b2c 42.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/13/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/13/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "67f8be7481c937c7a1fa5bf59d370fb96fd65b27f6896cb2b46c21f242f2615d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "a71c89aec959149eed0b28226fc88ca21e37b85e4ff672a7f9a1bc658140e586", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "6b2e074d61b8c8ccc1fe8cc5f0d04f2f4a5ffcbe3a1f128e4c3346d7f6fd7bfb", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "ceb67d920a9c8323aea244d7402caeca91bb277c7609635c650323b228dff70c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "9c6ca83cfdcdeeeb02e15cc72f4d4d0f4a7d20b34377e1310b916bc2c2ffcb77", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "f095c4430568973465db369a473d8b41860aa93372addce8183548a94ebb892d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "a5381b1b249f800d9d06d077940ba1cc41fe279270bebb5bef52614414ffa7cf", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "a496150f5f2b7749805eea134a2c0136453b30d824b2f9d6f866c5c1608de3f4", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "b8bb310fc597927e36956bf70644b2a64c04070384f8f6ad564f2b4ed5344f69", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "770e09ec4e3f26023efcebb435d349cd3333cf563772029f29e12f1cc8786d40", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/13/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "f3cbafd9039f16f246a5ca4cb9487aba19a4f334af1144748d7c8d5d97038d1c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/13/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "b244fbf9d3379f2e309264a34f5833a9ac2d33399f3a701c31be02036c766c20", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/13/description/0": "PL/pgSQL procedural language", "/versions/13/facts/0/label": "Kind", "/versions/13/facts/0/value": "Bundled procedural-language variant", "/versions/13/facts/1/label": "Family", "/versions/13/facts/1/value": "PL/pgSQL", "/versions/13/facts/2/label": "Trusted", "/versions/13/facts/3/label": "Handler", "/versions/13/facts/4/label": "Inline handler", "/versions/13/facts/5/label": "Validator", "/versions/13/facts/6/label": "Library", "/versions/13/facts/7/label": "Default version", "/versions/13/facts/8/label": "Module pathname", "/versions/13/facts/9/label": "Comment", "/versions/13/facts/9/value": "PL/pgSQL procedural language", "/versions/13/related/0/label": "plpgsql-control-structures", "/versions/13/related/1/label": "plpgsql-cursors", "/versions/13/related/2/label": "plpgsql-declarations", "/versions/13/related/3/label": "plpgsql-development-tips", "/versions/13/related/4/label": "plpgsql-errors-and-messages", "/versions/13/related/5/label": "plpgsql-expressions", "/versions/13/related/6/label": "plpgsql-implementation", "/versions/13/related/8/label": "plpgsql-porting", "/versions/13/related/9/label": "plpgsql-statements", "/versions/13/related/10/label": "plpgsql-structure", "/versions/13/related/11/label": "plpgsql-transactions", "/versions/13/related/12/label": "plpgsql-trigger", "/versions/13/sections/0/title": "Installation definition from the matching source archive", "/versions/13/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "d3ef3719d32b13944729c840232d23fe2a56d9502d5656ef184c62a3911116d1"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "14": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/14/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/14/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/14/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/14/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/14/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/14/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/14/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/14/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/14/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/14/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/14/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/14/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/14/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "label": "14.24", "major": "14", "channel": "stable", "revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "source_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "catalog_fingerprint": "b272e6a82e4c46efda81c3a6a4cdf7de6a83dfff7f02f226a392fbe9acdd3adb"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://pg.center/docs/14/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 14 English manual", "sha256": "a2491e8906b1f45815dce416711ecf6925da80b2daa518de513f9350b9ca5062", "language": "en", "original_url": "/docs/14/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">43.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 38.5.6 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u7b2c 38.2.5 \u8282\u4ecb\u7ecd\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4f7f\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\u3002\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u548c\u7b2c 43.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/14/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/14/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "3f91abd4a34e0e21630a314f687464d78dd7dd3cbf30c7f7e02b9125b9a89556", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "8100854157071ff715eb40ac77aacca3cf446f61d2f0965a6964962193f1952e", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "9c01741b0d294447b6a246a4e26e8806f7111c3fe2c20ca98e6e403cfd90ca63", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "d39ac5e06254f56133733ae05ce75857682203e4dc554420050ced0d1c03d1df", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "5974e8ee45cde0c455af56dcabe7230861e34f83177a6b8378ff2cfde671223c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "de92c0c5ec8a1fb677d798e3a29ce0380ee9ec64417a6c764697bb48088f6503", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "9829be24d0e2cc437650ef814857870ad1d589faee4242387f6e19d81003948e", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "46123c5d669065a7a257b697e6ce1ad3cd0573cd5c322522a336776d791ad9e6", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "ebaa2599b9e77608a5702f8a3c66812548c9b8a336acb6f45b6f2d3889a798b6", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "1773a76d352dbf8c976601091122fe00f678e15652d63558b8d8f066aeb94edb", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/14/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "8818a6d73a1a846050bfb0c4a7d0ed64dc318a01127b272002d44f8e4a6fe7ba", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/14/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "8f33daa94c2a02fcde0a22fc6eda32b7a78c3667bda53152a909f2b4f3b1d7a0", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/14/description/0": "PL/pgSQL procedural language", "/versions/14/facts/0/label": "Kind", "/versions/14/facts/0/value": "Bundled procedural-language variant", "/versions/14/facts/1/label": "Family", "/versions/14/facts/1/value": "PL/pgSQL", "/versions/14/facts/2/label": "Trusted", "/versions/14/facts/3/label": "Handler", "/versions/14/facts/4/label": "Inline handler", "/versions/14/facts/5/label": "Validator", "/versions/14/facts/6/label": "Library", "/versions/14/facts/7/label": "Default version", "/versions/14/facts/8/label": "Module pathname", "/versions/14/facts/9/label": "Comment", "/versions/14/facts/9/value": "PL/pgSQL procedural language", "/versions/14/related/0/label": "plpgsql-control-structures", "/versions/14/related/1/label": "plpgsql-cursors", "/versions/14/related/2/label": "plpgsql-declarations", "/versions/14/related/3/label": "plpgsql-development-tips", "/versions/14/related/4/label": "plpgsql-errors-and-messages", "/versions/14/related/5/label": "plpgsql-expressions", "/versions/14/related/6/label": "plpgsql-implementation", "/versions/14/related/8/label": "plpgsql-porting", "/versions/14/related/9/label": "plpgsql-statements", "/versions/14/related/10/label": "plpgsql-structure", "/versions/14/related/11/label": "plpgsql-transactions", "/versions/14/related/12/label": "plpgsql-trigger", "/versions/14/sections/0/title": "Installation definition from the matching source archive", "/versions/14/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "639fdd49ef4b39727fb065656243a12b6ed1952207113d4de143b09b51ce1e10"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "15": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/15/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/15/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/15/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/15/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/15/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/15/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/15/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/15/plpgsql-overview.html", "label": "plpgsql-overview"}, {"url": "/docs/15/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/15/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/15/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/15/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/15/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "label": "15.19", "major": "15", "channel": "stable", "revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89", "source_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89", "catalog_fingerprint": "fefe3c425147a86defada190c9b0663cfe02caa1724f5dede93e46457572252d"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://pg.center/docs/15/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 15 English manual", "sha256": "b3add032f57b9d2701c25fa619d069a219d4d752ab87a39e71c7e5d376eae66c", "language": "en", "original_url": "/docs/15/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">43.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 38.5.6 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u7b2c 38.2.5 \u8282\u4ecb\u7ecd\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4f7f\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\u3002\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u548c\u7b2c 43.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/15/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/15/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "11c998a27fafe9839ced1e87c4a6d656e2f782eeb5807298857d43b2b5e07819", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "afd47c14fc7e22a11a560848bd56fe8249f6efe0e672909a19a9b44a3f563590", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "baed45a6496a477aae9f31fed8bb3c910d37fc474c1adb0888e263b17f25035d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "ff0bbfa8731f473dbfe79ce191b719b8b2d163f343002c32b96d9d51dfc826cc", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "c1a460ca21dcf6e8892317afed1fbf74d2f5b5a6d4b7f91cfb8265877e84f25f", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "85fefc3cfd49b646932a11724b829b57a652ec73c096455d94990fc4266b2402", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "36de54e31de362c90a65d0f85629b31e05ec558057fdc885b18439216bfce293", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "e9e38697dc40cbb0f4d6fde0c04aa83312dd6c7d176f8beab8cb8751ff375161", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "919fb4c186b4f047797e7ac9a13bf60aab8dc913a105fd17891116a350a7079d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "456a324119f7a7952afabc048e0a0a8d70532428f583e886a78a504c03b2e1e4", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/15/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "039174c2c2a4d6e378ca7b36f48f71c36ea728d48c950d826e6ba03cf641a625", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/15/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "eae721cfde2e521a1202d38c7428269ba4b93d62adfefedccf8add045fc5046c", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/15/description/0": "PL/pgSQL procedural language", "/versions/15/facts/0/label": "Kind", "/versions/15/facts/0/value": "Bundled procedural-language variant", "/versions/15/facts/1/label": "Family", "/versions/15/facts/1/value": "PL/pgSQL", "/versions/15/facts/2/label": "Trusted", "/versions/15/facts/3/label": "Handler", "/versions/15/facts/4/label": "Inline handler", "/versions/15/facts/5/label": "Validator", "/versions/15/facts/6/label": "Library", "/versions/15/facts/7/label": "Default version", "/versions/15/facts/8/label": "Module pathname", "/versions/15/facts/9/label": "Comment", "/versions/15/facts/9/value": "PL/pgSQL procedural language", "/versions/15/related/0/label": "plpgsql-control-structures", "/versions/15/related/1/label": "plpgsql-cursors", "/versions/15/related/2/label": "plpgsql-declarations", "/versions/15/related/3/label": "plpgsql-development-tips", "/versions/15/related/4/label": "plpgsql-errors-and-messages", "/versions/15/related/5/label": "plpgsql-expressions", "/versions/15/related/6/label": "plpgsql-implementation", "/versions/15/related/8/label": "plpgsql-porting", "/versions/15/related/9/label": "plpgsql-statements", "/versions/15/related/10/label": "plpgsql-structure", "/versions/15/related/11/label": "plpgsql-transactions", "/versions/15/related/12/label": "plpgsql-trigger", "/versions/15/sections/0/title": "Installation definition from the matching source archive", "/versions/15/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "d79b5b1518bfc3da2b613c6e3819442f819c87d62ee6f1759ff87df13700b270"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "16": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/16/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/16/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/16/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/16/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/16/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/16/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/16/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/16/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/16/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/16/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/16/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/16/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/16/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "label": "16.15", "major": "16", "channel": "stable", "revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed", "source_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed", "catalog_fingerprint": "fa133458dc8f52e15083b4f59b7a582e2e378b608d3ac5c53054df458a374e23"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://pg.center/docs/16/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 16 English manual", "sha256": "c273d4a8ffbd67c5c7aad1d78032becad542a5b9ed22a8784c4eaa1860d86d31", "language": "en", "original_url": "/docs/16/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">43.1. \u6982\u8ff0</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.1. \u4f7f\u7528 PL/pgSQL \u7684\u4f18\u52bf</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\">43.1.2. \u652f\u6301\u7684\u53c2\u6570\u4e0e\u7ed3\u679c\u6570\u636e\u7c7b\u578b</h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4f7f\u7528 VARIADIC \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u5176\u884c\u4e3a\u4e0e SQL \u51fd\u6570\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1\u7b2c 38.5.6 \u8282\u3002</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de\u7b2c 38.2.5 \u8282\u4ecb\u7ecd\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4f7f\u51fd\u6570\u6bcf\u6b21\u8c03\u7528\u6240\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u53ef\u4ee5\u4e0d\u540c\u3002\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1\u7b2c 43.3.1 \u8282\u548c\u7b2c 43.6.1 \u8282\u3002</p>\n</div>\n</div>", "manual_path": "/docs/16/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/16/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "03d346611efc38b245bf966ae9b1b5d2d04b62d7bac7944daa1e5234480e7e79", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "ee022ea3ff5268e258b7f6ac761f5d3bfe96e1cb58fb36e4e53dcb9085a6fa64", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "a87927774372e6aac5722b9c696e6b69ab383b341e9c75a5a18a5ea6b28e0d6c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "04b39753c8d9964d05cc1b7575c5b38626a86a098c5d2f4cd480998eb1900750", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "87f411ee6d98fe0b37bc68cea244661a39c5bb9457594edb4616f0ceb1f093fd", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "dc7861559c5f227fb15909917ea2f151e9f30b7193ff2f2bd994bff5f070ac7b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "d0f9cf9a21e90d3a8e98e0f52d842827bba8b6067f91362a0b91f99355f85649", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "14abf87c49c2ba06756cb0893c43712f9b2179226550ed15322029c738712b51", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "bcb7ed9fdd3f5907ad4d1dfbfe23d4fa08ea013cd491a115591bd80309b04f14", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "94c0db86dddf533c5c164a174bf9f0a35d4b78dd0bdf0d56f1aaf033e9c4c7d1", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "c107204fd6bb49104f8aa690b6ba3a9343a0fb75c3d2bebdff9f6647b7ab02e8", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/16/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "d1ebdc23a45690d5efb89098fd59a400e11d5aa7e501b691db614ec4723e17f1", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/16/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "31d74a87040c3e9f26433e09586b34b0bb8a3170fddd45b3315619510ff72d53", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/16/description/0": "PL/pgSQL procedural language", "/versions/16/facts/0/label": "Kind", "/versions/16/facts/0/value": "Bundled procedural-language variant", "/versions/16/facts/1/label": "Family", "/versions/16/facts/1/value": "PL/pgSQL", "/versions/16/facts/2/label": "Trusted", "/versions/16/facts/3/label": "Handler", "/versions/16/facts/4/label": "Inline handler", "/versions/16/facts/5/label": "Validator", "/versions/16/facts/6/label": "Library", "/versions/16/facts/7/label": "Default version", "/versions/16/facts/8/label": "Module pathname", "/versions/16/facts/9/label": "Comment", "/versions/16/facts/9/value": "PL/pgSQL procedural language", "/versions/16/related/0/label": "plpgsql-control-structures", "/versions/16/related/1/label": "plpgsql-cursors", "/versions/16/related/2/label": "plpgsql-declarations", "/versions/16/related/3/label": "plpgsql-development-tips", "/versions/16/related/4/label": "plpgsql-errors-and-messages", "/versions/16/related/5/label": "plpgsql-expressions", "/versions/16/related/6/label": "plpgsql-implementation", "/versions/16/related/7/label": "plpgsql-overview", "/versions/16/related/8/label": "plpgsql-porting", "/versions/16/related/9/label": "plpgsql-statements", "/versions/16/related/10/label": "plpgsql-structure", "/versions/16/related/11/label": "plpgsql-transactions", "/versions/16/related/12/label": "plpgsql-trigger", "/versions/16/sections/0/title": "Installation definition from the matching source archive", "/versions/16/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "3f17556a937e8bbf158e664312b7517959b4a3cf8449867752a0dc8ba4710adf"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "17": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/17/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/17/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/17/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/17/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/17/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/17/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/17/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/17/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/17/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/17/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/17/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/17/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/17/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "label": "17.11", "major": "17", "channel": "stable", "revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979", "source_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979", "catalog_fingerprint": "4bbe3ac77becd618478f66aec420a533e9017be356c5c1d51a4b17f0fd497c07"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://pg.center/docs/17/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 17 English manual", "sha256": "12a593e4e51bdb0535cfc433f8ec2dc29d3b5ef75095a4f7f90be53b42be0240", "language": "en", "original_url": "/docs/17/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">41.1.\u00a0\u6982\u8ff0 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/17/plpgsql-overview.html#PLPGSQL-ADVANTAGES\">41.1.1. \u4f7f\u7528<span class=\"application\">PL/pgSQL</span>\u7684\u4f18\u70b9</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/17/plpgsql-overview.html#PLPGSQL-ARGS-RESULTS\">41.1.2. \u652f\u6301\u7684\u53c2\u6570\u548c\u7ed3\u679c\u6570\u636e\u7c7b\u578b</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 <code class=\"literal\">VARIADIC</code> \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u8fd9\u4e0e SQL \u51fd\u6570\u4e2d\u7684\u884c\u4e3a\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1<a class=\"xref\" href=\"/docs/17/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS\" title=\"36.5.6.\u00a0\u5e26\u6709\u53ef\u53d8\u6570\u91cf\u53c2\u6570\u7684SQL\u51fd\u6570\">\u7b2c\u00a036.5.6\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u4e5f\u53ef\u4ee5\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de<a class=\"xref\" href=\"/docs/17/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"36.2.5.\u00a0\u591a\u6001\u7c7b\u578b\">\u7b2c\u00a036.2.5\u00a0\u8282</a>\u4e2d\u63cf\u8ff0\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4ece\u800c\u5141\u8bb8\u51fd\u6570\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u5728\u4e0d\u540c\u8c03\u7528\u4e4b\u95f4\u53d8\u5316\u3002\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/17/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/17/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u548c<a class=\"xref\" href=\"/docs/17/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING\" title=\"41.6.1.\u00a0\u4ece\u51fd\u6570\u8fd4\u56de\">\u7b2c\u00a041.6.1\u00a0\u8282</a>\u3002</p>\n</div>\n</div>", "manual_path": "/docs/17/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/17/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "e2b664a56b150f9383b85f949374d38758d51b8180e5c6d702fde4ab98cdc814", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "a8b8b166d421a3cbd8fc645222be6adda5b367db5df4b275b6e68d0059dc374b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "23410ec1956fff937af325d4a7b6fe2989ffe477363a9d837b3a4f1397963b66", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "fefce4d6a2ed6610e265d75efbf56326d8df51f5b24fc906d07b4fd514ad7717", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "284f7258e276fb4c913839375be1e75ed5679fb0b3ebd60c3a01b0b9d364af62", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "ed72cc14d02ded82b8b459d8ba1b9186e5d39d4c7f0f0ca4160bab5b8c043e73", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "eb895a371b7c88c4cacad6629d47cf269635fbe5c19806e519da727aee14b4b6", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "97f38388dd0b25b54df1deb15a4e6790b5da410873bcdc9b5b1455ae4810db7c", "language": "zh", "matched_nodes": ["#PLPGSQL-OVERVIEW/div[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[1]", "#PLPGSQL-OVERVIEW/div[7]/p[2]", "#PLPGSQL-OVERVIEW/div[7]/p[3]", "#PLPGSQL-OVERVIEW/div[7]/p[7]", "page-title/h2"]}, {"url": "/docs/17/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "6b876cd68cbfc79c99b82f2c7c8ea39533d203f2c90b2b94fabca06b0accf2e3", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "76bc987b3733392940d6e5ff24db2774b7036822cdb7149bb0807e189b608f48", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "738063c61406d93f8c83326997b3908fca1a65442d737822c0edeae0e830489e", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/17/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "95778e0b54d6de47a0f31439b2de0d1dc97cc30d4e2ffa40c9f39e18ba8c6799", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/17/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "ddf3f39aec0d52b09d544f38312ac599d8e3ff85bee0194c1c8b3ed5f404a9cc", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/17/description/0": "PL/pgSQL procedural language", "/versions/17/facts/0/label": "Kind", "/versions/17/facts/0/value": "Bundled procedural-language variant", "/versions/17/facts/1/label": "Family", "/versions/17/facts/1/value": "PL/pgSQL", "/versions/17/facts/2/label": "Trusted", "/versions/17/facts/3/label": "Handler", "/versions/17/facts/4/label": "Inline handler", "/versions/17/facts/5/label": "Validator", "/versions/17/facts/6/label": "Library", "/versions/17/facts/7/label": "Default version", "/versions/17/facts/8/label": "Module pathname", "/versions/17/facts/9/label": "Comment", "/versions/17/facts/9/value": "PL/pgSQL procedural language", "/versions/17/related/0/label": "plpgsql-control-structures", "/versions/17/related/1/label": "plpgsql-cursors", "/versions/17/related/2/label": "plpgsql-declarations", "/versions/17/related/3/label": "plpgsql-development-tips", "/versions/17/related/4/label": "plpgsql-errors-and-messages", "/versions/17/related/5/label": "plpgsql-expressions", "/versions/17/related/6/label": "plpgsql-implementation", "/versions/17/related/7/label": "plpgsql-overview", "/versions/17/related/8/label": "plpgsql-porting", "/versions/17/related/9/label": "plpgsql-statements", "/versions/17/related/10/label": "plpgsql-structure", "/versions/17/related/11/label": "plpgsql-transactions", "/versions/17/related/12/label": "plpgsql-trigger", "/versions/17/sections/0/title": "Installation definition from the matching source archive", "/versions/17/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "d419b493282b5ad05b6abed8d757985a5aa34fb3eba917e75525530979d96e0a"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "18": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/18/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/18/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/18/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/18/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/18/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/18/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/18/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/18/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/18/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/18/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/18/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/18/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/18/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "catalog_fingerprint": "65c93d6048ef30e61023a84f9680fa6a92b1c383b7eb226741170077eb078502"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://pg.center/docs/18/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 18 English manual", "sha256": "7f93dfdf27c74b24d0bd355e845c7a6ff142aa9479bdcd0f203e8d37f36a3dfc", "language": "en", "original_url": "/docs/18/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">41.1.\u00a0\u6982\u8ff0 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/plpgsql-overview.html#PLPGSQL-ADVANTAGES\">41.1.1. \u4f7f\u7528<span class=\"application\">PL/pgSQL</span>\u7684\u4f18\u70b9</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/plpgsql-overview.html#PLPGSQL-ARGS-RESULTS\">41.1.2. \u652f\u6301\u7684\u53c2\u6570\u548c\u7ed3\u679c\u6570\u636e\u7c7b\u578b</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 <code class=\"literal\">VARIADIC</code> \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u8fd9\u4e0e SQL \u51fd\u6570\u4e2d\u7684\u884c\u4e3a\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1<a class=\"xref\" href=\"/docs/18/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS\" title=\"36.5.6.\u00a0\u5e26\u6709\u53ef\u53d8\u6570\u91cf\u53c2\u6570\u7684SQL\u51fd\u6570\">\u7b2c\u00a036.5.6\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u4e5f\u53ef\u4ee5\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de<a class=\"xref\" href=\"/docs/18/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"36.2.5.\u00a0\u591a\u6001\u7c7b\u578b\">\u7b2c\u00a036.2.5\u00a0\u8282</a>\u4e2d\u63cf\u8ff0\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4ece\u800c\u5141\u8bb8\u51fd\u6570\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u5728\u4e0d\u540c\u8c03\u7528\u4e4b\u95f4\u53d8\u5316\u3002\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/18/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/18/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u548c<a class=\"xref\" href=\"/docs/18/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING\" title=\"41.6.1.\u00a0\u4ece\u51fd\u6570\u8fd4\u56de\">\u7b2c\u00a041.6.1\u00a0\u8282</a>\u3002</p>\n</div>\n</div>", "manual_path": "/docs/18/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/18/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "ada67e189f7bb21c228f68b06ade27ba40793629e3b7edef02e2b5d6279fabf0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "b509296f78ac16f45e5e4f995abea5af4d1b0fc306df6a074da97792a031fefa", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "db78dc56c29a0a2eda625d4ce249ba1584670d6e0441e85e0dee0e3d7751b9ca", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "365a2e3bccf53d1a06bed9044b2836240f7e26eb0dea8e2344f29f80712814f0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "c508d55dc74fe58a3475136617ca5b57c9a11d1988ede37a3b2b08253e8af7c0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "6bc25685a7dce85be35a519903038017518816d66235ad4f5945c719dab415af", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "ebf43a851c80e2e5e914ebb1a65e638706168327170118129f57ea714fa29587", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "19b6cf613a6de3f176d87e839b976139940ee270343ffe518150c466814f1801", "language": "zh", "matched_nodes": ["#PLPGSQL-OVERVIEW/div[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[1]", "#PLPGSQL-OVERVIEW/div[7]/p[2]", "#PLPGSQL-OVERVIEW/div[7]/p[3]", "#PLPGSQL-OVERVIEW/div[7]/p[7]", "page-title/h2"]}, {"url": "/docs/18/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "7d60fcc82d4faed376ac1e8827a9a5f5f8fe64b464dcb20342aa35ce0ec4472c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "d85aaf74925d9df547f2952aa145e11a4b6984b15f053dd2007bde86c92e4a6b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "4193364a82ea89eedb7dda01230ddfda4609cff4472ac0bb08f928a0b3c37061", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/18/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "b4e3ae2e84e1aea7b493d59a9c307cad44cf94ab229e662b2739e15933b48186", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "0a55669b1ee519ba154ee5f54040f2f6410fb055ab43b99c170b1ec878972050", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/18/description/0": "PL/pgSQL procedural language", "/versions/18/facts/0/label": "Kind", "/versions/18/facts/0/value": "Bundled procedural-language variant", "/versions/18/facts/1/label": "Family", "/versions/18/facts/1/value": "PL/pgSQL", "/versions/18/facts/2/label": "Trusted", "/versions/18/facts/3/label": "Handler", "/versions/18/facts/4/label": "Inline handler", "/versions/18/facts/5/label": "Validator", "/versions/18/facts/6/label": "Library", "/versions/18/facts/7/label": "Default version", "/versions/18/facts/8/label": "Module pathname", "/versions/18/facts/9/label": "Comment", "/versions/18/facts/9/value": "PL/pgSQL procedural language", "/versions/18/related/0/label": "plpgsql-control-structures", "/versions/18/related/1/label": "plpgsql-cursors", "/versions/18/related/2/label": "plpgsql-declarations", "/versions/18/related/3/label": "plpgsql-development-tips", "/versions/18/related/4/label": "plpgsql-errors-and-messages", "/versions/18/related/5/label": "plpgsql-expressions", "/versions/18/related/6/label": "plpgsql-implementation", "/versions/18/related/7/label": "plpgsql-overview", "/versions/18/related/8/label": "plpgsql-porting", "/versions/18/related/9/label": "plpgsql-statements", "/versions/18/related/10/label": "plpgsql-structure", "/versions/18/related/11/label": "plpgsql-transactions", "/versions/18/related/12/label": "plpgsql-trigger", "/versions/18/sections/0/title": "Installation definition from the matching source archive", "/versions/18/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "a1e46654a895217c71be87a69663dd21409a71124fbf0e5dda7a0b724f725ab6"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "19": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/19/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/19/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/19/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/19/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/19/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/19/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/19/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/19/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/19/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/19/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/19/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/19/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/19/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "label": "19beta4", "major": "19", "channel": "preview", "revision": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86", "source_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86", "catalog_fingerprint": "62fbf1a3689dbe8bf7e6b3372cfe6fbf867581427b3858a94c8419b77a4d2d1d"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, {"url": "https://pg.center/docs/19/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 19 English manual", "sha256": "0c9878b8af229dae348c65bf221f83b15f8dc940395f99e3c4749cf4c41e081b", "language": "en", "original_url": "/docs/19/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">41.1.\u00a0\u6982\u8ff0 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/19/plpgsql-overview.html#PLPGSQL-ADVANTAGES\">41.1.1. \u4f7f\u7528<span class=\"application\">PL/pgSQL</span>\u7684\u4f18\u70b9</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/19/plpgsql-overview.html#PLPGSQL-ARGS-RESULTS\">41.1.2. \u652f\u6301\u7684\u53c2\u6570\u548c\u7ed3\u679c\u6570\u636e\u7c7b\u578b</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 <code class=\"literal\">VARIADIC</code> \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u8fd9\u4e0e SQL \u51fd\u6570\u4e2d\u7684\u884c\u4e3a\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1<a class=\"xref\" href=\"/docs/19/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS\" title=\"36.5.6.\u00a0\u5e26\u6709\u53ef\u53d8\u6570\u91cf\u53c2\u6570\u7684SQL\u51fd\u6570\">\u7b2c\u00a036.5.6\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u4e5f\u53ef\u4ee5\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de<a class=\"xref\" href=\"/docs/19/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"36.2.5.\u00a0\u591a\u6001\u7c7b\u578b\">\u7b2c\u00a036.2.5\u00a0\u8282</a>\u4e2d\u63cf\u8ff0\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4ece\u800c\u5141\u8bb8\u51fd\u6570\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u5728\u4e0d\u540c\u8c03\u7528\u4e4b\u95f4\u53d8\u5316\u3002\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/19/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/19/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u548c<a class=\"xref\" href=\"/docs/19/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING\" title=\"41.6.1.\u00a0\u4ece\u51fd\u6570\u8fd4\u56de\">\u7b2c\u00a041.6.1\u00a0\u8282</a>\u3002</p>\n</div>\n</div>", "manual_path": "/docs/19/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/19/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "89bba069d83284a7f39cf542da6f1cdc233bc01d8f06fbc5a07b9e5411ea23ce", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "bc78a42a5484e6f36b6499f4aea383c0264a6b903953535211a40791793beb8d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "19e49ba50a986a4cdbb72a4831477b3f81278d121488afd8c633bf8b2f993bbc", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "01ab6419fb8540cbfd39a8127a86fba4e217bfaa0eb420aed6e1c06aeca2b9bc", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "b7c9ca9c110202594c121ca9e063afc07363c3cff162575b1c11cc8c245e37fd", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "dc579849f473afea713a7fd83c523041998537c4a488f3ac7c1c7198b5df142b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "d159b77bd9ee06ea3d0e055f0061f2bd96afbf0ab775404480985f4e65816c55", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "b79b36fbfb75cd357c9605bbfefb7333a218b11c9763c581002ebcde1c6ec532", "language": "zh", "matched_nodes": ["#PLPGSQL-OVERVIEW/div[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[1]", "#PLPGSQL-OVERVIEW/div[7]/p[2]", "#PLPGSQL-OVERVIEW/div[7]/p[3]", "#PLPGSQL-OVERVIEW/div[7]/p[7]", "page-title/h2"]}, {"url": "/docs/19/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "d3a42ceb845dda49adf3d11e6a662f4f45d1a47957fae370a29e9200ec7ac707", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "17cce1af12d14ac571e51ce73f2c02c3d823fa85df5a848fc7f1c6c2e1cd334a", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "45a875da7a78db853c1d659e487a5a5607bbbc1b24dbab9aa527da774533c769", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/19/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "3e4822a106b74cef8dcbff824e1ab6351e02fb3cbefa95b17f6ad327f3045774", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/19/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "4056d789f19f1a18998c4ebfadc64306022a3e9bcfc83fc8d56417a34ffc1868", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/19/description/0": "PL/pgSQL procedural language", "/versions/19/facts/0/label": "Kind", "/versions/19/facts/0/value": "Bundled procedural-language variant", "/versions/19/facts/1/label": "Family", "/versions/19/facts/1/value": "PL/pgSQL", "/versions/19/facts/2/label": "Trusted", "/versions/19/facts/3/label": "Handler", "/versions/19/facts/4/label": "Inline handler", "/versions/19/facts/5/label": "Validator", "/versions/19/facts/6/label": "Library", "/versions/19/facts/7/label": "Default version", "/versions/19/facts/8/label": "Module pathname", "/versions/19/facts/9/label": "Comment", "/versions/19/facts/9/value": "PL/pgSQL procedural language", "/versions/19/related/0/label": "plpgsql-control-structures", "/versions/19/related/1/label": "plpgsql-cursors", "/versions/19/related/2/label": "plpgsql-declarations", "/versions/19/related/3/label": "plpgsql-development-tips", "/versions/19/related/4/label": "plpgsql-errors-and-messages", "/versions/19/related/5/label": "plpgsql-expressions", "/versions/19/related/6/label": "plpgsql-implementation", "/versions/19/related/7/label": "plpgsql-overview", "/versions/19/related/8/label": "plpgsql-porting", "/versions/19/related/9/label": "plpgsql-statements", "/versions/19/related/10/label": "plpgsql-structure", "/versions/19/related/11/label": "plpgsql-transactions", "/versions/19/related/12/label": "plpgsql-trigger", "/versions/19/sections/0/title": "Installation definition from the matching source archive", "/versions/19/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "136d64ee2584ed5cc82f4f2f457c51347e613be74f96779fd4a9031cf98b0559"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "20": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/devel/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/devel/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/devel/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/devel/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/devel/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/devel/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/devel/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/devel/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/devel/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/devel/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/devel/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/devel/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/devel/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "label": "20devel", "major": "20", "channel": "devel", "revision": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41", "source_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41", "catalog_fingerprint": "398fbb9f262264053c02fbf79f88be0a6770c1473faa6ecd5931d6ec41b8258b", "source_snapshot_utc": "26-Sep-2026 20:22"}, "sources": [{"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, {"url": "https://pg.center/docs/devel/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 20 English manual", "sha256": "7202bce9e8548da61529e98ad2a35c20b028f8e1f4a3dc30e1be504c0719da67", "language": "en", "original_url": "/docs/devel/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">41.1.\u00a0\u6982\u8ff0 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/devel/plpgsql-overview.html#PLPGSQL-ADVANTAGES\">41.1.1. \u4f7f\u7528<span class=\"application\">PL/pgSQL</span>\u7684\u4f18\u70b9</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/devel/plpgsql-overview.html#PLPGSQL-ARGS-RESULTS\">41.1.2. \u652f\u6301\u7684\u53c2\u6570\u548c\u7ed3\u679c\u6570\u636e\u7c7b\u578b</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 <code class=\"literal\">VARIADIC</code> \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u8fd9\u4e0e SQL \u51fd\u6570\u4e2d\u7684\u884c\u4e3a\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1<a class=\"xref\" href=\"/docs/devel/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS\" title=\"36.5.6.\u00a0\u5e26\u6709\u53ef\u53d8\u6570\u91cf\u53c2\u6570\u7684SQL\u51fd\u6570\">\u7b2c\u00a036.5.6\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u4e5f\u53ef\u4ee5\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de<a class=\"xref\" href=\"/docs/devel/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"36.2.5.\u00a0\u591a\u6001\u7c7b\u578b\">\u7b2c\u00a036.2.5\u00a0\u8282</a>\u4e2d\u63cf\u8ff0\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4ece\u800c\u5141\u8bb8\u51fd\u6570\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u5728\u4e0d\u540c\u8c03\u7528\u4e4b\u95f4\u53d8\u5316\u3002\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/devel/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/devel/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u548c<a class=\"xref\" href=\"/docs/devel/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING\" title=\"41.6.1.\u00a0\u4ece\u51fd\u6570\u8fd4\u56de\">\u7b2c\u00a041.6.1\u00a0\u8282</a>\u3002</p>\n</div>\n</div>", "manual_path": "/docs/devel/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/devel/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "bc5dce37df515326829540e11d1fb047a70a3c911249c6395896b980ee9eabc0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "58642a180df5f015a05d94c5d78b45ed1d39fc485da69a840e1fa03dbd646aa3", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "d2511585c4782cee83516ab74957e01c35fb25ed462e0f37441e9207b3f085f6", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "7e8c06f7a69c0879c91209ef14f51aab7b94ef40c7eb08132c67e4e351e04e3e", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "e031aa8bf86cb688f0318bc1d262e4b81e24f78745e745090cc3b18672f24c05", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "90452c44e5ef40a6f2b7424ae1172edb86c39d5cbfa788920b29986645f1ef4c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "3cc93b51145ef7fcaa0cc21dbddaef0d85fa074aca9feece3b4711ea9ef8c140", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "9f3cebb104f4f7fbd0a078f826f750bf73e364eda4f9a4294de27b2ccea204d9", "language": "zh", "matched_nodes": ["#PLPGSQL-OVERVIEW/div[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[1]", "#PLPGSQL-OVERVIEW/div[7]/p[2]", "#PLPGSQL-OVERVIEW/div[7]/p[3]", "#PLPGSQL-OVERVIEW/div[7]/p[7]", "page-title/h2"]}, {"url": "/docs/devel/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "50242fc5104f5a1da33d459d42ae0bc4271954a98e11f043b9b0e047e92b74dd", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "bd035a4f311bbeb44bb47b0cdf68345b01290f461b909206fa7f7009aaddcf91", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "72f415c1e185815c00206af2faf2af869649e0883d459529407c3ed7174d90c1", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/devel/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "7c7cf1ded06b8b29815493aeb0afafa6bdd67e619df599870d531b3c09a6a81d", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/devel/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "469e4be2030ddc72e6855f7e81c2d37f8e4d1838f0c7f62c36d86204106e787f", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/summary": "PL/pgSQL procedural language", "/category": "PL/pgSQL", "/versions/20/description/0": "PL/pgSQL procedural language", "/versions/20/facts/0/label": "Kind", "/versions/20/facts/0/value": "Bundled procedural-language variant", "/versions/20/facts/1/label": "Family", "/versions/20/facts/1/value": "PL/pgSQL", "/versions/20/facts/2/label": "Trusted", "/versions/20/facts/3/label": "Handler", "/versions/20/facts/4/label": "Inline handler", "/versions/20/facts/5/label": "Validator", "/versions/20/facts/6/label": "Library", "/versions/20/facts/7/label": "Default version", "/versions/20/facts/8/label": "Module pathname", "/versions/20/facts/9/label": "Comment", "/versions/20/facts/9/value": "PL/pgSQL procedural language", "/versions/20/related/0/label": "plpgsql-control-structures", "/versions/20/related/1/label": "plpgsql-cursors", "/versions/20/related/2/label": "plpgsql-declarations", "/versions/20/related/3/label": "plpgsql-development-tips", "/versions/20/related/4/label": "plpgsql-errors-and-messages", "/versions/20/related/5/label": "plpgsql-expressions", "/versions/20/related/6/label": "plpgsql-implementation", "/versions/20/related/7/label": "plpgsql-overview", "/versions/20/related/8/label": "plpgsql-porting", "/versions/20/related/9/label": "plpgsql-statements", "/versions/20/related/10/label": "plpgsql-structure", "/versions/20/related/11/label": "plpgsql-transactions", "/versions/20/related/12/label": "plpgsql-trigger", "/versions/20/sections/0/title": "Installation definition from the matching source archive", "/versions/20/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "e3e54ad6f84a96ee3faffec4c238cead61c899bdc9643f7c8bdac7587d754b26"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}}}, "snapshot": {"facts": [{"label": "\u79cd\u7c7b", "value": "\u968f\u6e90\u7801\u63d0\u4f9b\u7684\u8fc7\u7a0b\u8bed\u8a00\u53d8\u4f53"}, {"label": "\u64cd\u4f5c\u7b26\u5bb6\u65cf", "value": "\u201c \u5916\u5c42\u5757 \u201d"}, {"label": "\u53ef\u4fe1", "value": "t"}, {"label": "\u5904\u7406\u51fd\u6570", "value": "plpgsql_call_handler"}, {"label": "\u5185\u8054\u4ee3\u7801\u5904\u7406\u51fd\u6570", "value": "plpgsql_inline_handler"}, {"label": "\u6821\u9a8c\u51fd\u6570", "value": "plpgsql_validator"}, {"label": "\u5e93", "value": "$libdir/plpgsql"}, {"label": "\u9ed8\u8ba4\u7248\u672c", "value": "1.0"}, {"label": "\u6a21\u5757\u8def\u5f84", "value": "$libdir/plpgsql"}, {"label": "\u6ce8\u91ca", "value": "PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"}], "tables": [], "aliases": [], "related": [{"url": "/docs/18/plpgsql-control-structures.html", "label": "\u63a7\u5236\u7ed3\u6784"}, {"url": "/docs/18/plpgsql-cursors.html", "label": "\u6e38\u6807"}, {"url": "/docs/18/plpgsql-declarations.html", "label": "\u58f0\u660e"}, {"url": "/docs/18/plpgsql-development-tips.html", "label": "PL/pgSQL \u5f00\u53d1\u63d0\u793a"}, {"url": "/docs/18/plpgsql-errors-and-messages.html", "label": "\u9519\u8bef\u548c\u6d88\u606f"}, {"url": "/docs/18/plpgsql-expressions.html", "label": "\u8868\u8fbe\u5f0f"}, {"url": "/docs/18/plpgsql-implementation.html", "label": "PL/pgSQL \u5185\u90e8\u673a\u5236"}, {"url": "/docs/18/plpgsql-overview.html", "label": "\u6982\u8ff0"}, {"url": "/docs/18/plpgsql-porting.html", "label": "\u4ece Oracle PL/SQL \u79fb\u690d"}, {"url": "/docs/18/plpgsql-statements.html", "label": "\u57fa\u672c\u8bed\u53e5"}, {"url": "/docs/18/plpgsql-structure.html", "label": "PL/pgSQL \u7684\u7ed3\u6784"}, {"url": "/docs/18/plpgsql-transactions.html", "label": "\u4e8b\u52a1\u7ba1\u7406"}, {"url": "/docs/18/plpgsql-trigger.html", "label": "\u89e6\u53d1\u5668\u51fd\u6570"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "catalog_fingerprint": "65c93d6048ef30e61023a84f9680fa6a92b1c383b7eb226741170077eb078502"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://pg.center/docs/18/plpgsql-overview.html", "path": "plpgsql-overview.html", "label": "PostgreSQL 18 English manual", "sha256": "7f93dfdf27c74b24d0bd355e845c7a6ff142aa9479bdcd0f203e8d37f36a3dfc", "language": "en", "original_url": "/docs/18/plpgsql-overview.html"}], "sections": [{"code": "/* src/pl/plpgsql/src/plpgsql--1.0.sql */\n\nCREATE FUNCTION plpgsql_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpgsql_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE TRUSTED LANGUAGE plpgsql\n  HANDLER plpgsql_call_handler\n  INLINE plpgsql_inline_handler\n  VALIDATOR plpgsql_validator;\n\n-- The language object, but not the functions, can be owned by a non-superuser.\nALTER LANGUAGE plpgsql OWNER TO @extowner@;\n\nCOMMENT ON LANGUAGE plpgsql IS 'PL/pgSQL procedural language';", "title": "\u540c\u6784\u5efa\u6e90\u7801\u4e2d\u7684\u5b89\u88c5\u5b9a\u4e49", "paragraphs": ["\u6b64\u6269\u5c55\u968f\u6e90\u7801\u63d0\u4f9b\uff1b\u6536\u5f55\u5b83\u5e76\u4e0d\u8868\u793a\u5df2\u5b89\u88c5\u8be5\u8bed\u8a00\u6216\u5916\u90e8\u8fd0\u884c\u65f6\u3002"]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "comment": "PL/pgSQL procedural language", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpgsql"}, "description": ["PL/pgSQL \u8fc7\u7a0b\u8bed\u8a00"], "manual_html": "<div class=\"sect1\" id=\"PLPGSQL-OVERVIEW\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">41.1.\u00a0\u6982\u8ff0 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u662f PostgreSQL \u6570\u636e\u5e93\u7cfb\u7edf\u7684\u4e00\u79cd\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\u3002\u5b83\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u521b\u5efa\u4e00\u79cd\u5177\u5907\u4ee5\u4e0b\u7279\u70b9\u7684\u53ef\u52a0\u8f7d\u8fc7\u7a0b\u8bed\u8a00\uff1a</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u53ef\u7528\u4e8e\u521b\u5efa\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u89e6\u53d1\u5668\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u4e3a SQL \u8bed\u8a00\u589e\u52a0\u63a7\u5236\u7ed3\u6784\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u6267\u884c\u590d\u6742\u8ba1\u7b97\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u7ee7\u627f\u6240\u6709\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u578b\u3001\u51fd\u6570\u3001\u8fc7\u7a0b\u548c\u8fd0\u7b97\u7b26\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u5b9a\u4e49\u4e3a\u53d7\u670d\u52a1\u5668\u4fe1\u4efb\u7684\u8bed\u8a00\uff0c</li>\n<li class=\"listitem\" lang=\"zh\">\u6613\u4e8e\u4f7f\u7528\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">PL/pgSQL \u521b\u5efa\u7684\u51fd\u6570\u53ef\u7528\u4e8e\u4efb\u4f55\u5141\u8bb8\u4f7f\u7528\u5185\u7f6e\u51fd\u6570\u7684\u5730\u65b9\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u5305\u542b\u590d\u6742\u6761\u4ef6\u8ba1\u7b97\u7684\u51fd\u6570\uff0c\u518d\u7528\u5b83\u5b9a\u4e49\u8fd0\u7b97\u7b26\u6216\u7528\u4e8e\u7d22\u5f15\u8868\u8fbe\u5f0f\u3002</p>\n<p lang=\"zh\">\u4ece PostgreSQL 9.0 \u5f00\u59cb\uff0cPL/pgSQL \u9ed8\u8ba4\u5b89\u88c5\u3002\u4e0d\u8fc7\uff0c\u5b83\u4ecd\u7136\u662f\u53ef\u52a0\u8f7d\u6a21\u5757\uff0c\u56e0\u6b64\u7279\u522b\u6ce8\u91cd\u5b89\u5168\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u9009\u62e9\u79fb\u9664\u5b83\u3002</p>\n<div class=\"sect2\" id=\"PLPGSQL-ADVANTAGES\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/plpgsql-overview.html#PLPGSQL-ADVANTAGES\">41.1.1. \u4f7f\u7528<span class=\"application\">PL/pgSQL</span>\u7684\u4f18\u70b9</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PostgreSQL \u548c\u5927\u591a\u6570\u5176\u4ed6\u5173\u7cfb\u6570\u636e\u5e93\u4f7f\u7528 SQL \u4f5c\u4e3a\u67e5\u8be2\u8bed\u8a00\u3002\u5b83\u53ef\u79fb\u690d\u4e14\u6613\u4e8e\u5b66\u4e60\uff0c\u4f46\u6bcf\u6761 SQL \u8bed\u53e5\u90fd\u5fc5\u987b\u7531\u6570\u636e\u5e93\u670d\u52a1\u5668\u5355\u72ec\u6267\u884c\u3002</p>\n<p lang=\"zh\">\u8fd9\u610f\u5473\u7740\u5ba2\u6237\u7aef\u5e94\u7528\u5fc5\u987b\u5c06\u6bcf\u4e2a\u67e5\u8be2\u53d1\u9001\u7ed9\u6570\u636e\u5e93\u670d\u52a1\u5668\uff0c\u7b49\u5f85\u5904\u7406\uff0c\u63a5\u6536\u5e76\u5904\u7406\u7ed3\u679c\uff0c\u6267\u884c\u4e00\u4e9b\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u53d1\u9001\u540e\u7eed\u67e5\u8be2\u3002\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u4f1a\u4ea7\u751f\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u4e0e\u6570\u636e\u5e93\u670d\u52a1\u5668\u4f4d\u4e8e\u4e0d\u540c\u673a\u5668\u4e0a\uff0c\u8fd8\u4f1a\u4ea7\u751f\u7f51\u7edc\u5f00\u9500\u3002</p>\n<p lang=\"zh\">\u4f7f\u7528 PL/pgSQL \u53ef\u4ee5\u5c06\u4e00\u7ec4\u8ba1\u7b97\u548c\u4e00\u7cfb\u5217\u67e5\u8be2\u653e\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\uff0c\u517c\u5177\u8fc7\u7a0b\u8bed\u8a00\u7684\u80fd\u529b\u4e0e SQL \u7684\u6613\u7528\u6027\uff0c\u540c\u65f6\u663e\u8457\u51cf\u5c11\u5ba2\u6237\u7aef\uff0f\u670d\u52a1\u5668\u901a\u4fe1\u5f00\u9500\u3002</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\" lang=\"zh\">\u6d88\u9664\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u989d\u5916\u7684\u5f80\u8fd4\u901a\u4fe1\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7684\u4e2d\u95f4\u7ed3\u679c\u65e0\u9700\u5c01\u9001\uff0c\u4e5f\u65e0\u9700\u5728\u670d\u52a1\u5668\u4e0e\u5ba2\u6237\u7aef\u4e4b\u95f4\u4f20\u8f93\u3002</li>\n<li class=\"listitem\" lang=\"zh\">\u53ef\u4ee5\u907f\u514d\u591a\u8f6e\u67e5\u8be2\u89e3\u6790\u3002</li>\n</ul>\n</div>\n<p lang=\"zh\">\u4e0e\u4e0d\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5e94\u7528\u76f8\u6bd4\uff0c\u8fd9\u53ef\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u3002</p>\n<p lang=\"zh\">\u6b64\u5916\uff0c\u5728 PL/pgSQL \u4e2d\u53ef\u4ee5\u4f7f\u7528 SQL \u7684\u5168\u90e8\u6570\u636e\u7c7b\u578b\u3001\u8fd0\u7b97\u7b26\u548c\u51fd\u6570\u3002</p>\n</div>\n<div class=\"sect2\" id=\"PLPGSQL-ARGS-RESULTS\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/plpgsql-overview.html#PLPGSQL-ARGS-RESULTS\">41.1.2. \u652f\u6301\u7684\u53c2\u6570\u548c\u7ed3\u679c\u6570\u636e\u7c7b\u578b</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u53ef\u4ee5\u63a5\u53d7\u670d\u52a1\u5668\u652f\u6301\u7684\u4efb\u610f\u6807\u91cf\u6216\u6570\u7ec4\u7c7b\u578b\u53c2\u6570\uff0c\u5e76\u8fd4\u56de\u8fd9\u4e9b\u7c7b\u578b\u7684\u7ed3\u679c\uff0c\u4e5f\u53ef\u4ee5\u63a5\u53d7\u6216\u8fd4\u56de\u6309\u540d\u79f0\u6307\u5b9a\u7684\u4efb\u610f\u590d\u5408\u7c7b\u578b\uff08\u884c\u7c7b\u578b\uff09\u3002\u8fd8\u53ef\u4ee5\u5c06\u51fd\u6570\u58f0\u660e\u4e3a\u63a5\u53d7 record\uff0c\u8868\u793a\u4efb\u610f\u590d\u5408\u7c7b\u578b\u90fd\u53ef\u4f5c\u4e3a\u8f93\u5165\uff1b\u6216\u58f0\u660e\u4e3a\u8fd4\u56de record\uff0c\u8868\u793a\u7ed3\u679c\u662f\u884c\u7c7b\u578b\uff0c\u5176\u5217\u7531\u8c03\u7528\u67e5\u8be2\u4e2d\u7684\u58f0\u660e\u786e\u5b9a\uff0c\u8be6\u89c1\u7b2c 7.2.1.4 \u8282\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 <code class=\"literal\">VARIADIC</code> \u6807\u8bb0\u58f0\u660e\u4e3a\u63a5\u53d7\u53ef\u53d8\u6570\u91cf\u7684\u53c2\u6570\u3002\u8fd9\u4e0e SQL \u51fd\u6570\u4e2d\u7684\u884c\u4e3a\u5b8c\u5168\u76f8\u540c\uff0c\u8be6\u89c1<a class=\"xref\" href=\"/docs/18/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS\" title=\"36.5.6.\u00a0\u5e26\u6709\u53ef\u53d8\u6570\u91cf\u53c2\u6570\u7684SQL\u51fd\u6570\">\u7b2c\u00a036.5.6\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\"><span class=\"application\">PL/pgSQL</span> \u51fd\u6570\u4e5f\u53ef\u4ee5\u58f0\u660e\u4e3a\u63a5\u53d7\u548c\u8fd4\u56de<a class=\"xref\" href=\"/docs/18/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"36.2.5.\u00a0\u591a\u6001\u7c7b\u578b\">\u7b2c\u00a036.2.5\u00a0\u8282</a>\u4e2d\u63cf\u8ff0\u7684\u591a\u6001\u7c7b\u578b\uff0c\u4ece\u800c\u5141\u8bb8\u51fd\u6570\u5904\u7406\u7684\u5b9e\u9645\u6570\u636e\u7c7b\u578b\u5728\u4e0d\u540c\u8c03\u7528\u4e4b\u95f4\u53d8\u5316\u3002\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/18/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u3002</p>\n<p lang=\"zh\">\u5bf9\u4e8e\u80fd\u591f\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u7684\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0cPL/pgSQL \u51fd\u6570\u4e5f\u53ef\u58f0\u660e\u4e3a\u8fd4\u56de\u8be5\u7c7b\u578b\u7684\u201c\u96c6\u5408\u201d\uff08\u6216\u8868\uff09\u3002\u6b64\u7c7b\u51fd\u6570\u901a\u8fc7\u4e3a\u7ed3\u679c\u96c6\u7684\u6bcf\u4e2a\u5143\u7d20\u6267\u884c RETURN NEXT\uff0c\u6216\u901a\u8fc7 RETURN QUERY \u8f93\u51fa\u67e5\u8be2\u6c42\u503c\u7ed3\u679c\u6765\u751f\u6210\u8f93\u51fa\u3002</p>\n<p lang=\"zh\">\u6700\u540e\uff0c\u5982\u679c PL/pgSQL \u51fd\u6570\u6ca1\u6709\u6709\u7528\u7684\u8fd4\u56de\u503c\uff0c\u53ef\u4ee5\u5c06\u5176\u58f0\u660e\u4e3a\u8fd4\u56de void\u3002\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u6539\u5199\u4e3a\u8fc7\u7a0b\u3002\uff09</p>\n<p lang=\"zh\">PL/pgSQL \u51fd\u6570\u4e5f\u53ef\u7528\u8f93\u51fa\u53c2\u6570\u58f0\u660e\u4ee3\u66ff\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u8fd9\u6ca1\u6709\u4e3a\u8bed\u8a00\u589e\u52a0\u6839\u672c\u6027\u80fd\u529b\uff0c\u4f46\u901a\u5e38\u5f88\u65b9\u4fbf\uff0c\u5c24\u5176\u662f\u5728\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\u3002\u4e5f\u53ef\u7528 RETURNS TABLE \u8bb0\u6cd5\u4ee3\u66ff RETURNS SETOF\u3002</p>\n<p lang=\"zh\">\u5177\u4f53\u793a\u4f8b\u89c1<a class=\"xref\" href=\"/docs/18/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS\" title=\"41.3.1.\u00a0\u58f0\u660e\u51fd\u6570\u53c2\u6570\">\u7b2c\u00a041.3.1\u00a0\u8282</a>\u548c<a class=\"xref\" href=\"/docs/18/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING\" title=\"41.6.1.\u00a0\u4ece\u51fd\u6570\u8fd4\u56de\">\u7b2c\u00a041.6.1\u00a0\u8282</a>\u3002</p>\n</div>\n</div>", "manual_path": "/docs/18/plpgsql-overview.html", "localization": {"status": "complete", "sources": [{"url": "/docs/18/plpgsql-control-structures.html", "method": "same-major semantic node", "sha256": "ada67e189f7bb21c228f68b06ade27ba40793629e3b7edef02e2b5d6279fabf0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-cursors.html", "method": "same-major semantic node", "sha256": "b509296f78ac16f45e5e4f995abea5af4d1b0fc306df6a074da97792a031fefa", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-declarations.html", "method": "same-major semantic node", "sha256": "db78dc56c29a0a2eda625d4ce249ba1584670d6e0441e85e0dee0e3d7751b9ca", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-development-tips.html", "method": "same-major semantic node", "sha256": "365a2e3bccf53d1a06bed9044b2836240f7e26eb0dea8e2344f29f80712814f0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-errors-and-messages.html", "method": "same-major semantic node", "sha256": "c508d55dc74fe58a3475136617ca5b57c9a11d1988ede37a3b2b08253e8af7c0", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-expressions.html", "method": "same-major semantic node", "sha256": "6bc25685a7dce85be35a519903038017518816d66235ad4f5945c719dab415af", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-implementation.html", "method": "same-major semantic node", "sha256": "ebf43a851c80e2e5e914ebb1a65e638706168327170118129f57ea714fa29587", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-overview.html", "method": "same-major semantic node", "sha256": "19b6cf613a6de3f176d87e839b976139940ee270343ffe518150c466814f1801", "language": "zh", "matched_nodes": ["#PLPGSQL-OVERVIEW/div[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[0]", "#PLPGSQL-OVERVIEW/div[1]/dl[0]/dt[1]", "#PLPGSQL-OVERVIEW/div[7]/p[2]", "#PLPGSQL-OVERVIEW/div[7]/p[3]", "#PLPGSQL-OVERVIEW/div[7]/p[7]", "page-title/h2"]}, {"url": "/docs/18/plpgsql-porting.html", "method": "same-major semantic node", "sha256": "7d60fcc82d4faed376ac1e8827a9a5f5f8fe64b464dcb20342aa35ce0ec4472c", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-statements.html", "method": "same-major semantic node", "sha256": "d85aaf74925d9df547f2952aa145e11a4b6984b15f053dd2007bde86c92e4a6b", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-structure.html", "method": "same-major semantic node", "sha256": "4193364a82ea89eedb7dda01230ddfda4609cff4472ac0bb08f928a0b3c37061", "language": "zh", "matched_nodes": ["#PLPGSQL-STRUCTURE/div[13]/p[1]/span[1]", "page-title/h2"]}, {"url": "/docs/18/plpgsql-transactions.html", "method": "same-major semantic node", "sha256": "b4e3ae2e84e1aea7b493d59a9c307cad44cf94ab229e662b2739e15933b48186", "language": "zh", "matched_nodes": ["page-title/h2"]}, {"url": "/docs/18/plpgsql-trigger.html", "method": "same-major semantic node", "sha256": "0a55669b1ee519ba154ee5f54040f2f6410fb055ab43b99c170b1ec878972050", "language": "zh", "matched_nodes": ["page-title/h2"]}], "language": "zh", "original_text": {"/versions/18/description/0": "PL/pgSQL procedural language", "/versions/18/facts/0/label": "Kind", "/versions/18/facts/0/value": "Bundled procedural-language variant", "/versions/18/facts/1/label": "Family", "/versions/18/facts/1/value": "PL/pgSQL", "/versions/18/facts/2/label": "Trusted", "/versions/18/facts/3/label": "Handler", "/versions/18/facts/4/label": "Inline handler", "/versions/18/facts/5/label": "Validator", "/versions/18/facts/6/label": "Library", "/versions/18/facts/7/label": "Default version", "/versions/18/facts/8/label": "Module pathname", "/versions/18/facts/9/label": "Comment", "/versions/18/facts/9/value": "PL/pgSQL procedural language", "/versions/18/related/0/label": "plpgsql-control-structures", "/versions/18/related/1/label": "plpgsql-cursors", "/versions/18/related/2/label": "plpgsql-declarations", "/versions/18/related/3/label": "plpgsql-development-tips", "/versions/18/related/4/label": "plpgsql-errors-and-messages", "/versions/18/related/5/label": "plpgsql-expressions", "/versions/18/related/6/label": "plpgsql-implementation", "/versions/18/related/7/label": "plpgsql-overview", "/versions/18/related/8/label": "plpgsql-porting", "/versions/18/related/9/label": "plpgsql-statements", "/versions/18/related/10/label": "plpgsql-structure", "/versions/18/related/11/label": "plpgsql-transactions", "/versions/18/related/12/label": "plpgsql-trigger", "/versions/18/sections/0/title": "Installation definition from the matching source archive", "/versions/18/sections/0/paragraphs/0": "This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "a1e46654a895217c71be87a69663dd21409a71124fbf0e5dda7a0b724f725ab6"}, "source_files": {"src/pl/plpgsql/src/plpgsql.control": "9457c3f51d6bdfab93f13080d177795a9274c025e378fb613218342e3a3c7b45", "src/pl/plpgsql/src/plpgsql--1.0.sql": "f4e7e05438808ac0da0b3801397d16e36102969af7e2ffc982def5b7524fb557"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/pgSQL", "handler": "plpgsql_call_handler", "library": "$libdir/plpgsql", "trusted": "t", "validator": "plpgsql_validator", "inline_handler": "plpgsql_inline_handler", "default_version": "1.0"}, "comparison_hash": "e85051f39a242ce658cedd87ac97437817f0f1b2baf992d8d37c9d29df8b558b", "manual_language": "zh"}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}