-1

数値を取り、引数値の 2 倍を返したい。私はそれが

float timestwo(float num){ num*2; 戻り値;}

ただし、plsql は、より難読化されたアプローチを要求しているようです。オラクル11gが要求するアプローチに従ったと思っていましたが、以下のコードを実行しようとすると、

exec dbms_output.enable(1000000); --boilerplate
set serveroutput on           --boilerplate
CREATE OR REPLACE FUNCTION timestwo (num
IN number)
RETURN number IS
   product number(2) := 0;
BEGIN
   product := (num*2);
   RETURN product;
END;
/
EXECUTE timestwo(5);
show error                       --boilerplate

dbms は次のエラーをスローします。

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'TIMESTWO' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
No errors

明らかに関数宣言は間違っていますが、この単純なコードを正しく実装する方法を知っている人はいますか?

4

1 に答える 1

7

関数は有効ですが、間違って呼び出しています。関数を定義しました。エラーが示唆するように、プロシージャとして呼び出しています。

次のいずれかを実行できます。

select timestwo(5) from dual;

または SQL*Plus では:

var result number;
exec :result := timestwo(5);
print result

product関数は実際には変数を定義する必要はありません。次のように少し単純化できます。

create or replace function timestwo(num in number)
return number is
begin
    return num*2;
end;
/

10...これは、2 桁を超える積を提供する大きな入力番号 ( など) に対してもエラーになりません。もちろん、それが意図的でない限り... *8-)

于 2013-04-23T19:12:36.460 に答える