Oracle 在过程中调用函数

Oracle 在过程中调用函数,oracle,oracle10g,Oracle,Oracle10g,我为这个可能是基本问题提前道歉。我是学生,现在是关键时刻 我正在使用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

我为这个可能是基本问题提前道歉。我是学生,现在是关键时刻

我正在使用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\u gla\u accounts”行……我做错了什么?
据我所知,函数返回的值为1或0,在过程中,如果函数返回的值为1,我希望将param字段添加到表中。如果函数返回0,我希望过程引发错误

test\u glaccounts\u description
获取一个参数(
account\u description\u param
)并返回一个
数字。因此,为了调用函数,需要传入一个参数。假设您希望传入传递到
插入gla\u with\u 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;

test\u glaccounts\u description
接受一个参数(
account\u description\u param
)并返回一个
数字。因此,为了调用函数,需要传入一个参数。假设您希望传入传递到
插入gla\u with\u 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;

发布完整的错误堆栈总是很有帮助的。说“它不喜欢”之类的话并不能告诉我们你犯了什么错误。我在下面的答案中猜到了错误。如果我猜错了(例如,可能会有更多语法错误),发布完整的错误堆栈将非常有用。发布完整的错误堆栈总是很有用的。说“它不喜欢”之类的话并不能告诉我们你犯了什么错误。我在下面的答案中猜到了错误。如果我猜错了(例如,可能会有更多语法错误),发布完整的错误堆栈将非常有用。这非常有效!非常感谢您的快速和有用的回复…我已经为此工作了很多小时了!那很有效!非常感谢您的快速和有用的回复…我已经为此工作了很多小时了!