4

このコマンドを Oracle 10.2 で問題なく実行できます。

SQL> select instr(unistr('foo'), chr(4050596145)) as hazit from dual;

     HAZIT
----------
     0

だから私はそれを関数にカプセル化しようとしました:

CREATE OR REPLACE FUNCTION hazit(string IN VARCHAR2) RETURN INTEGER
AS
BEGIN
    RETURN instr(unistr(string), chr(4050596145));
END;
/

Function created.

しかし、使用しようとすると、数値オーバーフロー エラーが発生します。

SQL> select hazit('foo') FROM DUAL;
select hazit('foo') FROM DUAL
       *
ERROR at line 1:
ORA-01426: numeric overflow
ORA-06512: at "DWHEELER.HAZIT", line 4

何を与える?

4

1 に答える 1

2

説明はありませんが、これはうまくいくようです:

CREATE OR REPLACE FUNCTION hazit(string IN VARCHAR2) RETURN NUMBER IS
i number;
BEGIN
    select instr(unistr(string), chr(4050596145))
      into i from dual;
    return i;
END;
/

ここにフィドルがあります

于 2012-10-11T11:18:03.117 に答える