很抱歉问了这么一个基本问题,但是我还没有完成我的Oracle课程,而且我已经被要求做一些运行PL/SQL过程。我已经使用SQL安装了一个“包”,请参阅下面(C_FIX_STUCK_COS)。
但是现在我需要使用SQL>提示符(最后是通过Bash脚本)从SQLPlus提示符执行它。因此,在之前添加了一个“存储过程”并让它使用execute命令运行之后,我再次尝试使用我的包。
execute C_FIX_STUCK_COS
但是,如果出现以下错误,则会失败:
BEGIN C_FIX_STUCK_COS; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'C_FIX_STUCK_COS' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我想我没有使用正确的执行方法,但还没有在网上找到任何对我有帮助的东西。
被调用的过程'inside‘不包含任何参数:
PROCEDURE FIX_STUCK_COS
-- Main procedure, called from external source
IS
TYPE GEN_CURSOR IS REF CURSOR;
v_CO_CUR GEN_CURSOR;
请有人快速解释一下(如果可能的话)包和“存储过程”有什么不同?但更重要的是,有人能告诉我如何执行‘包’吗?非常感谢。
发布于 2018-05-19 17:19:56
您不能执行PL/SQL包,因为它只是一个或多个例程(存储过程和函数)的容器。通常,您使用包来组织各种相关例程。
通过引用单个例程的名称来执行(调用)包中的单个例程。
exec PKG_NAME.SPROC_NAME
或者在你的情况下
exec C_FIX_STUCK_COS.FIX_STUCK_COS
因为包和SP都有非常相似的名称(这本身并不一定是一个好主意)。
发布于 2022-06-22 02:22:29
它是一个函数,所以您必须使用
SELECT C_FIX_STUCK_COS.FIX_STUCK_COS() FROM DUAL
https://dba.stackexchange.com/questions/207279
复制相似问题