Plsql 代码>空值。优点;我把它留在这里,这样OP就可以看到这个,并计算出他们本来是怎么写代码的,但是你的答案是正确的,特别是如果他们想传递小数或负值。请注意MT0对负数或小数的评论。是的,但要求不是负数或小数点,它只是拔出了最大的数字。 FUNCTION FBI

Plsql 代码>空值。优点;我把它留在这里,这样OP就可以看到这个,并计算出他们本来是怎么写代码的,但是你的答案是正确的,特别是如果他们想传递小数或负值。请注意MT0对负数或小数的评论。是的,但要求不是负数或小数点,它只是拔出了最大的数字。 FUNCTION FBI,plsql,oracle11g,Plsql,Oracle11g,代码>空值。优点;我把它留在这里,这样OP就可以看到这个,并计算出他们本来是怎么写代码的,但是你的答案是正确的,特别是如果他们想传递小数或负值。请注意MT0对负数或小数的评论。是的,但要求不是负数或小数点,它只是拔出了最大的数字。 FUNCTION FBIG(N NUMBER) RETURN NUMBER IS R NUMBER; M NUMBER; S NUMBER; BEGIN M := N; WHILE M>0 LOOP R := MOD(M,1


代码>空值。优点;我把它留在这里,这样OP就可以看到这个,并计算出他们本来是怎么写代码的,但是你的答案是正确的,特别是如果他们想传递小数或负值。请注意MT0对负数或小数的评论。是的,但要求不是负数或小数点,它只是拔出了最大的数字。
FUNCTION FBIG(N NUMBER) RETURN NUMBER 
IS
  R NUMBER; 
  M NUMBER;
  S NUMBER;

  BEGIN
  M := N;
  WHILE M>0 LOOP  
  R := MOD(M,10); 
  M := FLOOR(M/10);   
  S := GREATEST(R,M); 
   END LOOP;
 RETURN S;
  END FBIG;
END;
/

EXEC DBMS_OUTPUT.PUT_LINE(FBIG(47839));
SQL> create or replace function fbig (n number)
  2  return number
  3  is
  4    retval number;
  5  begin
  6    select max(num)
  7    into retval
  8    from (select substr(to_char(n), level, 1) num
  9          from dual
 10          connect by level <= length(n)
 11         );
 12
 13    return retval;
 14  end;
 15  /

    Function created.

SQL> select fbig(47839) res1,
  2         fbig(125.774) res2
  3  from dual;

      RES1       RES2
---------- ----------
         9          7

SQL>
CREATE FUNCTION FBIG(N NUMBER) RETURN NUMBER 
IS
  s CONSTANT VARCHAR2(4000) := TO_CHAR( n );
  c CHAR(1);
  m CHAR(1) := NULL;
BEGIN
  FOR i IN 1 .. LENGTH( s ) LOOP
    c := SUBSTR( s, i, 1 );
    IF c = '.' THEN
      EXIT;
    ELSIF m IS NULL OR c > m THEN
      m := c;
    END IF;
  END LOOP;
  RETURN TO_NUMBER( m );
END FBIG;
/
M := N;
WHILE M>0 LOOP  
  R := MOD(M,10); 
  M := FLOOR(M/10);   
  S := GREATEST(R,M); 
END LOOP;
CREATE FUNCTION FBIG(N NUMBER) RETURN NUMBER 
IS
  s NUMBER(1,0) := NULL;
  r NUMBER(1,0) := NULL;
  m NUMBER      := FLOOR( ABS( n ) );
BEGIN
  WHILE m > 0 LOOP
    r := MOD( m, 10 );
    IF s IS NULL OR r > s THEN
      s := r;
    END IF;
    m := ( m - r ) / 10;
  END LOOP;
  RETURN s;
END FBIG;
/
FUNCTION fbig(n NUMBER) RETURN NUMBER IS
  r NUMBER;
  m NUMBER;
  s NUMBER := 0;

BEGIN
  m := n;
  WHILE m > 0
  LOOP
    r := MOD(m, 10);
    m := floor(m / 10);
    s := greatest(r, s);
  END LOOP;
  RETURN s;
END fbig;
/