Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中具有函数的简单包处于无效状态_Sql_Oracle_Oracle11g - Fatal编程技术网

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;

如果函数不包含参数,则不应在函数名后使用“()”。

它不起作用。但是我发现了一个问题。。。我在它的主体前添加了一个包。当我反过来做的时候,一切都开始起作用了……不,它应该起作用。唯一要做的事情是先执行规范部分,然后执行主体部分,而不是全部一起执行。此外,如果在包规范之前添加正文,则肯定会出现“无法编译没有规范的正文”错误。函数名后面的括号也不起作用。我已经编辑了答案,所以整个脚本可以一次执行。