支援的版本:目前 (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 中一樣。建議使用 dollar-quoted literal。

lang_name

程式碼所使用的程序語言名稱。如果省略,預設值為 plpgsql

備註

要使用的程序語言必須已經透過 CREATE EXTENSION 安裝到目前的資料庫中。預設情況下會安裝 plpgsql,但其他語言則不會。

使用者必須擁有程序語言的 USAGE 權限,或者如果該語言是不受信任的語言,則必須是超級使用者。 這與以該語言建立函數的權限要求相同。

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

範例

授予角色 webuser 對於 schema public 中所有檢視表的全部權限。

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 語句。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。