3

私は SQL Server の T-SQL の経験がありますが、最近 Oracle データベース (11g) を利用するプロジェクトに取り組み始め、基本的なコードと思われるものを書く際に問題が発生しています。

一連の値が数値であるかどうかをテストし、数値である場合にのみテーブルに挿入する必要があります。PL/SQL には is_number 関数がないようなので、AskTom の質問に基づいて独自に作成しました。

create or replace 
function          IS_NUMBER(str in varchar2) return boolean
IS
  n number;
BEGIN
  select to_number(str) into n from dual;
  return (true);
EXCEPTION WHEN OTHERS THEN
  return (false);
END;

最終的には、この関数を WHERE 句で使用したいと考えていますが、今のところ、実行できるようにするだけです。

declare
  str varchar2(1);
  n boolean;
begin
  str := '0';
  select ca_stage.is_number(str) into n from dual;
end;

SQL Developer でこれを実行しようとすると、次のエラー レポートが表示されます。

Error report:
ORA-06550: line 6, column 39:
PLS-00382: expression is of wrong type
ORA-06550: line 6, column 19:
PLS-00382: expression is of wrong type
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

エラー報告は簡単ですが、意味がありません。この関数は varchar2 を受け入れます。これを入力変数として使用しています。それはブール値を返しますが、それが私が使用しているものです。

私が言ったように、これは基本的なコードなので、基本的な何かが欠けていると思います。

4

1 に答える 1

4

VARCHAR2 などの SQL データ型を返します。また、WHEN OTHERS を使用しないことをお勧めします。また、デュアルのクエリは必要ありません。

create or replace 
function IS_NUMBER(str in varchar2) return varchar2
IS
  n number;
BEGIN
  n := to_number(str);
  return 'Y';
EXCEPTION WHEN VALUE_ERROR THEN
  return 'N';
END;
于 2013-10-25T04:02:29.090 に答える