使用过程和/或函数查找数字的指数(不使用POW或内置函数)

时间:2017-03-01 22:04:54

标签: oracle plsql

我正在尝试使用不使用POW函数或任何内置函数的过程来创建一种方法来查找数字的指数(在这种情况下,基数为4,指数为2,因此答案应为16)找到指数。最后我想从用户那里获取输入数字。

    set serveroutput on;
CREATE OR REPLACE PROCEDURE Exponent(base number, exponent number) as
answer number;
BEGIN
   base := 4;
   exponent := 2;

   LOOP
   IF exponent > 1 THEN
        answer := base * base;
   END IF;
   END LOOP;
   dbms_output.put_line('Answer is: ' || answer);
END;
/

错误(7,25):PLS-00103:"表达' BASE'不能用作任务目标"和"表达' EXPONENT'不能用作任务目标"

关于如何在不使用像POW这样的内置函数的情况下解决错误和/或获得指数的更好方法的任何想法?

2 个答案:

答案 0 :(得分:0)

在您的程序中,baseexponent是输入参数,无法更改。你有几个选择:

1)将参数复制到过程内部的变量并操纵这些内部值,或者 2)将参数更改为输入/输出参数,以便更改它们。

示例:

1)

CREATE OR REPLACE PROCEDURE Exponent(pin_base number, pin_exponent number) as
  base number := pin_base;
  exponent number := pin_exponent;
answer number;
BEGIN
   base := 4;
   exponent := 2;

   LOOP
   IF exponent > 1 THEN
        answer := base * base;
   END IF;
   END LOOP;
   dbms_output.put_line('Answer is: ' || answer);
END;

2)

CREATE OR REPLACE PROCEDURE Exponent(base IN OUT number,
                                     exponent IN OUT number) as
answer number;
BEGIN
   base := 4;
   exponent := 2;

   LOOP
   IF exponent > 1 THEN
        answer := base * base;
   END IF;
   END LOOP;
   dbms_output.put_line('Answer is: ' || answer);
END;

答案 1 :(得分:0)

最好的事情是Oracle提供的内置功能可以尽可能地满足目的。 (几乎所有时间都比定制代码更好)尝试使用EXP功能。我试图根据我的理解制作自定义代码。希望这会有所帮助。

    CREATE OR REPLACE
  FUNCTION EXP_DUMMY(
      BASE_IN IN NUMBER,
      EXPO_IN IN NUMBER)
    RETURN PLS_INTEGER
  AS
    lv PLS_INTEGER:=1;
  BEGIN
    FOR I IN
    (SELECT base_in COL1 FROM DUAL CONNECT BY level < expo_in+1
    )
    LOOP
      lv:=lv*i.col1;
    END LOOP;
    RETURN
    CASE
    WHEN EXPO_IN = 0 THEN
      1
    ELSE
      lv
    END;
  END;

SELECT EXP_DUMMY(2,4) FROM DUAL;