2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0

DO

DO — 執行匿名程式碼塊

概要

DO [ LANGUAGE lang_name ] code

描述

DO 執行一個匿名程式碼塊,或者說是一個過程語言中的瞬時匿名函式。

程式碼塊被視為一個沒有引數、返回void的函式體。它只會被解析和執行一次。

可選的LANGUAGE子句可以寫在程式碼塊的前面或後面。

引數

code

要執行的過程語言程式碼。這必須像CREATE FUNCTION一樣,指定為一個字串字面量。推薦使用美元引用字面量。

lang_name

程式碼所用過程語言的名稱。如果省略,預設是plpgsql

註釋

所用的過程語言必須已經透過CREATE EXTENSION安裝到當前資料庫中。plpgsql是預設安裝的,但其他語言則不是。

使用者必須對該過程語言擁有USAGE許可權,或者如果該語言不受信任,則必須是超級使用者。這與在語言中建立函式的許可權要求相同。

如果在事務塊中執行DO,則過程程式碼不能執行事務控制語句。只有當DO在自己的事務中執行時,才允許使用事務控制語句。

示例

將模式public中所有檢視的所有許可權授予角色webuser

DO $$DECLARE r record;
BEGIN
    FOR r IN SELECT table_schema, table_name FROM information_schema.tables
             WHERE table_type = 'VIEW' AND table_schema = 'public'
    LOOP
        EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
    END LOOP;
END$$;

相容性

SQL標準中沒有DO語句。

另請參閱

CREATE LANGUAGE

提交更正

如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處,或者需要進一步說明之處,請使用此表格報告文件問題。