首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 實作 REVERSE 函數:相容 Oracle/SQL Server 的字串反轉 UDF

     編輯:DB2 教學

背景

Oracle 內建 REVERSE('1234') → '4321'(參數/回傳皆 CHAR);SQL Server 內建 REVERSE 接受 VARCHAR/NVARCHAR。DB2 無內建 REVERSE,本文提供相容實作。

Oracle/SQL Server 行為驗證

  • Oracle:REVERSE('1234 ') 回傳 ' 4321',長度保留 8 → 回傳 CHAR 型別。
  • SQL Server:參數 VARCHAR/NVARCHAR,回傳同型別,數字隱含轉換。

DB2 SQL PL 實作

CREATE OR REPLACE FUNCTION REVERSE (p1 VARCHAR(200))
RETURNS VARCHAR(200)
SPECIFIC "REVERSE"
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
READS SQL DATA
BEGIN
  DECLARE v_str VARCHAR(200) DEFAULT '';
  DECLARE v_index INTEGER;
  SET v_index = LENGTH(p1);
  WHILE (v_index >= 1) DO
    SET v_str = v_str || SUBSTR(p1, v_index, 1);
    SET v_index = v_index - 1;
  END WHILE;
  RETURN v_str;
END@

測試驗證

VALUES REVERSE('123456');  -- 654321
VALUES REVERSE(1234);      -- 4321(隱含型別轉換)

部署建議

  • 置於共用 Schema(如 SYSTOOLS 或自訂 UTIL),授予 PUBLIC EXECUTE。
  • 若需支援 CLOB/BLOB,另行實作 REVERSE_CLOB 等變體。
  • 效能:純 SQL 迴圈,極長字串(>10萬字元)建議改用 Java UDF 或遞迴 CTE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved