Oracle和MSSQL中循环的使用


1、Oracle

  1. CREATE OR REPLACE FUNCTION SETSTATE(OLDVALUE VARCHAR2, POS NUMBER, SVALUE VARCHAR2)  
  2. RETURN VARCHAR2  
  3. IS  
  4. RETURN_VALUE VARCHAR2 (20);  
  5. LEN NUMBER(8);  
  6. I NUMBER(8);  
  7. TEMP_VALUE VARCHAR2(1);  
  8. BEGIN  
  9.      LEN := LENGTH(OLDVALUE);  
  10.      IF POS > LEN THEN  
  11.         RETURN '指定的索引大于字符串的长度!';  
  12.      END IF;  
  13.      I := 0;  
  14.      RETURN_VALUE := '';  
  15.      FOR I IN 1..LEN LOOP  
  16.          TEMP_VALUE := SUBSTR(OLDVALUE, I, 1);  
  17.          IF I = POS THEN  
  18.             TEMP_VALUE := SVALUE;  
  19.          END IF;  
  20.          RETURN_VALUE := RETURN_VALUE || TEMP_VALUE;  
  21.      END LOOP;  
  22.      RETURN RETURN_VALUE;  
  23. END;  

2、MSSQL

  1. IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'SETSTATE')  
  2.  DROP FUNCTION SETSTATE  
  3. GO  
  4. CREATE FUNCTION SETSTATE(@OLDVALUE NVARCHAR(20), @POS INT, @SVALUE NVARCHAR(1))  
  5. RETURNS NVARCHAR(20)  
  6. AS  
  7. BEGIN  
  8.  DECLARE @RETURN_VALUE NVARCHAR(20),  
  9.  @LENGTH INT,  
  10.  @I INT,  
  11.  @TEMP_VALUE NVARCHAR(1);  
  12.  SET @LENGTH = LEN(@OLDVALUE);  
  13.  SET @I = 1;  
  14.  SET @RETURN_VALUE = '';  
  15.  IF(@POS > @LENGTH)  
  16.   SET @RETURN_VALUE = @OLDVALUE;  
  17.  ELSE  
  18.   BEGIN  
  19.    WHILE(@I <= @LENGTH)  
  20.    BEGIN  
  21.     SET @TEMP_VALUE = SUBSTRING(@OLDVALUE, @I, 1);  
  22.     IF (@I = @POS)  
  23.      SET @TEMP_VALUE = @SVALUE;  
  24.     SET @RETURN_VALUE = @RETURN_VALUE + @TEMP_VALUE;  
  25.     SET @I = @I + 1;  
  26.    END  
  27.   END  
  28.  RETURN @RETURN_VALUE;  
  29. END  
  30. GO  

相关内容