DO — 執行匿名程式碼塊
DO [ LANGUAGElang_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
語句。
如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處,或者需要進一步說明之處,請使用此表格報告文件問題。