Snowflake 是否提供任何存储过程?
SHOW PROCEDURES IN ACCOUNT;
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
-- 0 rows
SHOW FUNCTIONS IN ACCOUNT;
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
-- 571
我们有相当广泛的函数列表,但我找不到单个存储过程。
某些函数(例如 SYSTEM$CANCEL_ALL_QUERIES
)包含副作用,这意味着它们可能是存储过程(它们甚至支持通过 CALL 执行):
SELECT SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);
CALL SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);
这种方法背后有什么理由吗?
答案 0 :(得分:1)
Snowflake 在过去 6 年中一直是一个不断发展的产品。当它第一次发布时,不支持动态 SQL aka Procedures,也很少支持数据库自省,就像在 PostgreSQL 的系统表中一样。
许多“做 X”或“告诉我 Y”是通过相当丑陋的函数调用完成的,这清楚地向您展示了逃离沙坑的地方(与 PostgreSQL 相比,其中 db health/state 也是“表” )。我记得我们的团队编写了支持从 SHOW 命令读取结果的代码,因为 RESULT_SCAN 不存在。
所以平台发生了很大的变化,现在用“功能”的心智模型只读,“程序”改变心态,似乎做的事情符合模型。