DO — 執行一個匿名程式碼區塊
DO [ LANGUAGElang_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
語句。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。