Oracle 在过程中调用函数
我为这个可能是基本问题提前道歉。我是学生,现在是关键时刻 我正在使用Oracle 10g Express 我创建了一个函数: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
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;
发布完整的错误堆栈总是很有帮助的。说“它不喜欢”之类的话并不能告诉我们你犯了什么错误。我在下面的答案中猜到了错误。如果我猜错了(例如,可能会有更多语法错误),发布完整的错误堆栈将非常有用。发布完整的错误堆栈总是很有用的。说“它不喜欢”之类的话并不能告诉我们你犯了什么错误。我在下面的答案中猜到了错误。如果我猜错了(例如,可能会有更多语法错误),发布完整的错误堆栈将非常有用。这非常有效!非常感谢您的快速和有用的回复…我已经为此工作了很多小时了!那很有效!非常感谢您的快速和有用的回复…我已经为此工作了很多小时了!