SQL的哪些实现具有类似PSM的功​​能?

时间:2010-06-29 01:02:25

标签: sql mysql oracle db2 informix

虽然Oracle是最早创建存储过程(PL / SQL)的人之一,然后是Informix with(SPL),除了DB2之外的RDBMS产品在1998年之后实现了SQL / PSM或它的一部分?...哪个RDBMS'可以支持如下例所示:?

 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;

2 个答案:

答案 0 :(得分:1)

只有DB2接近PSM,AFAIK。 Sybase很早就开始了Transact-SQL;微软借用了这个。可能需要检查的三匹黑马是MySQL,PostgreSQL和Ingres。但是,我不记得当我查看他们的代码时,他们中的任何一个都接近PSM。

然而,谷歌搜索'mysql psm'表明MySQL 5.x和PostgreSQL 8.2支持一种接近标准的PSM形式。 (对'ingres psm'的搜索表明,Ingres中的PSM是'部分排序合并'连接技术。)

答案 1 :(得分: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;

分享并享受。