【问题标题】:Which implementations of SQL have PSM like functionality?哪些 SQL 实现具有类似 PSM 的功能?
【发布时间】: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;

【问题讨论】:

    标签: sql mysql oracle db2 informix


    【解决方案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;
      

      分享和享受。

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 2010-12-21
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多