2010-06-29 55 views
1

虽然Oracle是最早创建存储过程(PL/SQL)之一,但是带有(SPL)的Informix除了DB2以外哪些RDBMS产品在1998年之后实现了SQL/PSM或它的子集?哪个RDBMS可以支持特效如以下示例中所示?:SQL的哪些实现具有PSM功能?

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。

但是,谷歌搜索'mysql psm'表明MySQL 5.x和PostgreSQL 8.2支持一种接近标准的PSM形式。 (搜索'ingres psm'显示Ingres中的PSM是'Partial Sort Merge'加入技术。)

1

看来每个产品都包含自己的存储模块实现,但大多数都非常相似。例如,您的示例可以在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; 

分享和享受。