https://learn.microsoft.com/en-us/sql/relational-databases/u...
https://learn.microsoft.com/en-us/sql/relational-databases/u...
https://en.wikipedia.org/wiki/SQL/PSM
Within this ADA-esque world, packages, procedures, and functions may initiate DML.
Assuming these objects are in the default "definer rights" context, the DML runs with the full privilege of the owner of the code (this can be adjusted to "invoker rights" with a pragma).
Perhaps this is why Microsoft ignores it (as Sybase did before it).
(PS: Postgres does have a concept of "safe" languages. Safe languages are expected to run programs only with the database permissions of the calling context, and prevent all other IO. However, Postgres does nothing to ensure that they do, that's the language plugin's job. Also, those functions can still perform DML and DDL as long as the calling context has the permissions to do so.)
By the way, you can do the same in SQL Server via what Microsoft ambiguously calls an Assembly. Via Assemblies, SQL Server can load procedures, aggregates and, yes, functions, from a .NET DLL file.
As far as I know, the only implementation outside of Sybase and Microsoft is Amazon's Babelfish.
https://aws.amazon.com/rds/aurora/babelfish/
It goes without saying that SQL/PSM is far more pervasive on many more platforms, precisely because it is an ANSI standard.
select *
from (
delete
from users
returning id
)