2010-06-29 86 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; 

分享和享受。