哪些 SQL 实现具有类似 PSM 的功能?
Posted
技术标签:
【中文标题】哪些 SQL 实现具有类似 PSM 的功能?【英文标题】:Which implementations of SQL have PSM like functionality? 【发布时间】:2010-06-29 01:02:24 【问题描述】:虽然 Oracle 是最早创建存储过程 (PL/SQL) 的公司之一,然后是 Informix with (SPL),除了 DB2 之外,哪些 RDBMS 产品在 1998 年之后实现了 SQL/PSM 或其子集?.. 哪个 RDBMS 可以支持像下面的例子中的procs?:
CREATE OR REPLACE FUNCTION foo1(a integer)
RETURNS void AS $$
CASE a
WHEN 1, 3, 5, 7, 9 THEN
PRINT a, 'is odd number';
WHEN 2, 4, 6, 8, 10 THEN
PRINT a. 'is odd number';
ELSE
PRINT a, 'isn't from range 1..10';
END CASE;
$$ LANGUAGE plpgpsm;
【问题讨论】:
【参考方案1】:只有 DB2 接近 PSM,AFAIK。 Sybase 很早就有了 Transact-SQL。微软借用了它。可能值得一试的三匹黑马是 mysql、PostgreSQL 和 Ingres。但是,当我查看他们的代码时,我不记得认为他们中的任何一个都接近 PSM。
但是,Google 搜索“mysql psm”表明 MySQL 5.x 和 PostgreSQL 8.2 支持一种接近标准的 PSM 形式。 (搜索“ingres psm”表明 Ingres 中的 PSM 是一种“部分排序合并”连接技术。)
【讨论】:
【参考方案2】:似乎每个产品都包含自己的存储模块实现,但大多数都非常相似。例如,您的示例可以用 Oracle 的 PL/SQL 重写如下:
CREATE OR REPLACE PROCEDURE foo1(a integer) AS
BEGIN
CASE
WHEN a IN (1, 3, 5, 7, 9) THEN
DBMS_OUTPUT.PUT_LINE(a || ' is odd number');
WHEN a IN (2, 4, 6, 8, 10) THEN
DBMS_OUTPUT.PUT_LINE(a || ' is even number');
ELSE
DBMS_OUTPUT.PUT_LINE(a || ' isn''t FROM RANGE 1..10');
END CASE;
END;
分享和享受。
【讨论】:
以上是关于哪些 SQL 实现具有类似 PSM 的功能?的主要内容,如果未能解决你的问题,请参考以下文章