RosettaCodeData/Task/Look-and-say-sequence/SQL-PL/look-and-say-sequence.sql

41 lines
825 B
SQL

SET SERVEROUTPUT ON @
BEGIN
DECLARE NMBR VARCHAR(100) DEFAULT '1';
DECLARE J SMALLINT DEFAULT 1;
CALL DBMS_OUTPUT.PUT_LINE(NMBR);
WHILE (J < 10) DO
BEGIN
DECLARE I SMALLINT;
DECLARE SIZE SMALLINT;
DECLARE ACTUAL CHAR(1);
DECLARE REPEAT CHAR(1);
DECLARE RESULT VARCHAR(100);
DECLARE TIMES SMALLINT;
SET REPEAT = SUBSTR(NMBR, 1, 1);
SET NMBR = SUBSTR(NMBR, 2) || ' ';
SET TIMES = 1;
SET I = 1;
SET SIZE = LENGTH(NMBR);
WHILE (I <= SIZE) DO
SET ACTUAL = SUBSTR(NMBR, I, 1);
IF (ACTUAL <> REPEAT) THEN
SET RESULT = COALESCE(RESULT, '') || TIMES || '' || REPEAT;
SET TIMES = 1;
SET REPEAT = ACTUAL;
ELSE
SET TIMES = TIMES + 1;
END IF;
SET I = I + 1;
END WHILE;
CALL DBMS_OUTPUT.PUT_LINE(RESULT);
SET NMBR = RESULT;
END ;
SET J = J + 1;
END WHILE;
END @