带包的Oracle过程调用';s常数

带包的Oracle过程调用';s常数,oracle,stored-procedures,Oracle,Stored Procedures,让我们假设以下简单场景: CALL DBMS_XMLSCHEMA.DELETESCHEMA( schemaurl => 'non_existing_schemaurl', delete_option => DBMS_XMLSCHEMA.DELETE_INVALIDATE); -- ORA-06553: PLS-221: 'DELETE_INVALIDATE' is not a procedure or is undefined 同时,当提供整数值或在PL/S

让我们假设以下简单场景:

CALL DBMS_XMLSCHEMA.DELETESCHEMA(
   schemaurl      => 'non_existing_schemaurl',
   delete_option  => DBMS_XMLSCHEMA.DELETE_INVALIDATE);
-- ORA-06553: PLS-221: 'DELETE_INVALIDATE' is not a procedure or is undefined
同时,当提供整数值或在PL/SQL块内运行时,不会发生错误:

-- 1)
CALL DBMS_XMLSCHEMA.DELETESCHEMA(
   schemaurl      => 'non_existing_schemaurl',
   delete_option  => 2);

-- 2)
BEGIN
DBMS_XMLSCHEMA.DELETESCHEMA(
   schemaurl      => 'non_existing_schemaurl',
   delete_option  => DBMS_XMLSCHEMA.DELETE_INVALIDATE);
END;
/


是否可以将
DBMS\u XMLSCHEMA.
CALL
(搜索可信/官方来源)结合使用?

您尝试调用的方式只能在pl/sql的任何命名或未命名块中使用。 要独立调用它,只需传递参数

CALL DBMS_XMLSCHEMA.DELETESCHEMA('none_existing_schemaurl','DELETE_INVALIDATE');
根据报告:

使用CALL语句执行例程(独立过程或 函数,或在类型或包中定义的过程或函数) 从SQL内部

关键是最后两个词-在SQL中。很容易将
CALL
与SQL*Plus命令
EXEC
类似,但是
CALL
在SQL上下文中运行,而
EXEC
在PL/SQL上下文中运行


PL/SQL包变量不能在SQL语句中使用(带有函数的PL/SQL除外,但该功能在此上下文中不起作用)。不幸的是,我找不到该声明的权威来源(这就是为什么这是一个Wiki答案;希望其他人可以添加该来源,然后删除这句话)。

建议的
调用DBMS_XMLSCHEMA.DELETESCHEMA('none_existing_schemall','DELETE_INVALIDATE')不起作用。可能重复的