我正在尝试使用不使用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这样的内置函数的情况下解决错误和/或获得指数的更好方法的任何想法?
答案 0 :(得分:0)
在您的程序中,base
和exponent
是输入参数,无法更改。你有几个选择:
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;