哪些 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 的功能?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存储过程

MySQL中的存储过程

SQL 怎么实现模糊查询?

DBA必备的23款最佳SQL管理工具,精选

具有类似博客功能的反应路由器[重复]

微信里的小程序有哪些功能,谁能给一个具体详细的回答