1

おそらく基本的な質問を前もってお詫び申し上げます。私は学生で、今がクランチタイムです!

Oracle 10g Express を使用しています。

関数を作成しました:

create or replace FUNCTION test_glaccounts_description
(
account_description_param VARCHAR2
) 
RETURN NUMBER
AS
  description_dup_var NUMBER;
BEGIN
  SELECT 1
  INTO description_dup_var
  FROM general_ledger_accounts
  WHERE account_description = account_description_param;

  RETURN description_dup_var;  
  EXCEPTION 
    WHEN NO_DATA_FOUND THEN
    RETURN 0;
END;

そして、プロシージャでその関数を使用したいと思います。私はもう試した:

PROCEDURE insert_gla_with_test
(
  account_number_param  NUMBER,
  account_description_param VARCHAR2
)
 AS
BEGIN 
  IF test_glaccounts_description = 1 THEN
  INSERT INTO  general_ledger_accounts
  VALUES (account_number_param, account_description_param);
  ELSE raise_application_error (-20001, 'Duplicate account description');
  END IF;
END;

しかし、「test_gla_accounts」行が好きではありません.....何が間違っていますか? 私の理解では、関数は 1 または 0 の値を返します。関数が 1 を返した場合、テーブルにパラメーター フィールドを追加したいと思います。関数が 0 を返した場合、手順でエラーを発生させたいと思います。

4

1 に答える 1

4

test_glaccounts_descriptionパラメータ ( account_description_param) を取り、 を返しますNUMBER。したがって、関数を呼び出すには、パラメーターを渡す必要があります。プロシージャaccount_description_paramに渡された を渡したいと仮定するとinsert_gla_with_test

CREATE OR REPLACE PROCEDURE insert_gla_with_test
(
  account_number_param  NUMBER,
  account_description_param VARCHAR2
)
 AS
BEGIN 
  IF test_glaccounts_description( account_description_param ) = 1 THEN
    INSERT INTO  general_ledger_accounts
      VALUES (account_number_param, account_description_param);
  ELSE 
    raise_application_error (-20001, 'Duplicate account description');
  END IF;
END;
于 2012-12-05T18:30:00.807 に答える