gpt4 book ai didi

oracle - 封装规范中的程序

转载 作者:行者123 更新时间:2023-12-04 02:34:35 24 4
gpt4 key购买 nike

我有一个名为 的包保存数据库值

我有两个名为 的程序存储记录 另一个叫 db_activities .
db_activities 将通过传递 中的所有值从我的应用程序中调用db_activities 我会调用 存储记录 插入和删除的过程。

我需要定义存储记录 包装规范中的程序?当我没有在规范中定义 store_records 时,我收到错误 store_records not declared in this scope.
存储记录 程序我不想公开,因此我没有添加规范。
我该如何解决这个问题?

最佳答案

如果您不希望某些程序公开可用,您可能不会在包规范中声明它们。仅在包体中声明它们。您所面临的错误的原因是包体中程序的声明顺序或缺少前向声明。例如:

 create or replace package Test_pkg as
2 procedure Proc1;
3 end;
4 /

Package created

create or replace package body Test_pkg as
2
3 procedure proc1 is
4 begin
5 proc2;
6 end;
7
8 procedure Proc2 is
9 begin
10 dbms_output.put_line('proc2 is being executed');
11 end;
12
13 end;
14 /

Warning: Package body created with compilation errors
Error: PLS-00313: 'PROC2' not declared in this scope

发生这种情况是因为我们正在调用 Proc2稍后在包中声明。在这种情况下,我们的选择是:

声明 pro2在调用它的程序之前
 create or replace package body Test_pkg as
2
3
4 procedure Proc2 is
5 begin
6 dbms_output.put_line('proc2 is being executed');
7 end;
8
9 procedure proc1 is
10 begin
11 proc2;
12 end;
13
14 end;
15 /

Package body created

使用前向声明。
create or replace package body Test_pkg as
2
3 procedure Proc2;
4
5 procedure proc1 is
6 begin
7 proc2;
8 end;
9
10 procedure Proc2 is
11 begin
12 dbms_output.put_line('proc2 is being executed');
13 end;
14
15
16 end;
17 /

Package body created

SQL> exec test_pkg.Proc1;

proc2 is being executed

PL/SQL procedure successfully completed

关于oracle - 封装规范中的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com