私は 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 を受け入れます。これを入力変数として使用しています。それはブール値を返しますが、それが私が使用しているものです。
私が言ったように、これは基本的なコードなので、基本的な何かが欠けていると思います。