Sql Oracle中具有函数的简单包处于无效状态
我正在阅读有关软件包的文章,我想从创建一个新的软件包开始,它有一个返回数字的函数。我是这样做的:Sql Oracle中具有函数的简单包处于无效状态,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在阅读有关软件包的文章,我想从创建一个新的软件包开始,它有一个返回数字的函数。我是这样做的: CREATE OR REPLACE PACKAGE KP_XYZ_TEST_SQL AS FUNCTION CONTAINS() RETURN NUMBER; END KP_XYZ_TEST_SQL; CREATE OR REPLACE PACKAGE BODY KP_XYZ_TEST_SQL AS FUNCTION CONTAINS() RETURN NUMBER AS BEGIN
CREATE OR REPLACE PACKAGE KP_XYZ_TEST_SQL AS
FUNCTION CONTAINS() RETURN NUMBER;
END KP_XYZ_TEST_SQL;
CREATE OR REPLACE PACKAGE BODY KP_XYZ_TEST_SQL AS
FUNCTION CONTAINS() RETURN NUMBER AS
BEGIN
RETURN 1;
END CONTAINS;
END KP_XYZ_TEST_SQL;
一切似乎都执行得很好,包和包体都已创建。但是当我尝试执行CONTAINS()
时,我得到一个错误:ORA-06576:包或函数KP\u XYZ\u TEST\u SQL处于无效状态
这是我尝试执行我的函数的方式:
SELECT KP_XYZ_TEST_SQL.CONTAINS() FROM DUAL;
试试这个:
CREATE OR REPLACE PACKAGE KP_XYZ_TEST_SQL AS
FUNCTION CONTAINS RETURN NUMBER;
END KP_XYZ_TEST_SQL;
/
CREATE OR REPLACE PACKAGE BODY KP_XYZ_TEST_SQL AS
FUNCTION CONTAINS RETURN NUMBER AS
BEGIN
RETURN 1;
END CONTAINS;
END KP_XYZ_TEST_SQL;
如果函数不包含参数,则不应在函数名后使用“()”。它不起作用。但是我发现了一个问题。。。我在它的主体前添加了一个包。当我反过来做的时候,一切都开始起作用了……不,它应该起作用。唯一要做的事情是先执行规范部分,然后执行主体部分,而不是全部一起执行。此外,如果在包规范之前添加正文,则肯定会出现“无法编译没有规范的正文”错误。函数名后面的括号也不起作用。我已经编辑了答案,所以整个脚本可以一次执行。