gpt4 book ai didi

oracle - 创建 Oracle 包体

转载 作者:行者123 更新时间:2023-12-04 23:58:24 27 4
gpt4 key购买 nike

我正在尝试为包装奠定基础,但即使开始也遇到了麻烦。我已经成功创建了一个基本的包规范,并且只想测试包体,但我无法编译它。规范代码是:

CREATE OR REPLACE PACKAGE synchronize_my_data 
AS
PROCEDURE synchronize_data(p_run_date IN date);
END synchronize_my_data;

这是包体代码:
CREATE OR REPLACE PACKAGE BODY synchronize_my_data 
IS
PROCEDURE synchronize_data(p_run_date IN date) IS
PROCEDURE process_deletes(p_run_date IN date) IS
BEGIN
dbms_output.put_line('Run Date: ' || to_char(p_run_date, 'MM/DD/YYYY'));
END process_deletes;
BEGIN
process_deletes(p_run_date);
END synchronize_data;

END synchronize_my_data;

我不断收到编译错误,但无法弄清楚代码有什么问题。这似乎是基本代码,我只是错过了一些明显的东西吗?

最佳答案

该代码似乎为我编译。你遇到了什么错误?

SQL> CREATE OR REPLACE PACKAGE synchronize_my_data
2 AS
3 PROCEDURE synchronize_data(p_run_date IN date);
4 END synchronize_my_data;
5 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY synchronize_my_data
2 IS
3 PROCEDURE synchronize_data(p_run_date IN date) IS
4 PROCEDURE process_deletes(p_run_date IN date) IS
5 BEGIN
6 dbms_output.put_line('Run Date: ' || to_char(p_run_date, 'MM/DD/YYYY'));
7 END process_deletes;
8 BEGIN
9 process_deletes(p_run_date);
10 END synchronize_data;
11
12 END synchronize_my_data;
13 /

Package body created.

从一般风格的角度来看,在包体中的另一个过程中定义一个过程通常没有什么意义。使用包的好处之一是您可以同时拥有公共(public)和私有(private)过程。您可以创建 process_deletes程序作为私有(private)程序,只需在主体中定义它而不在规范中定义它。
CREATE OR REPLACE PACKAGE BODY synchronize_my_data 
IS
PROCEDURE process_deletes(p_run_date IN date)
IS
BEGIN
dbms_output.put_line('Run Date: ' || to_char(p_run_date, 'MM/DD/YYYY'));
END process_deletes;

PROCEDURE synchronize_data(p_run_date IN date)
IS
BEGIN
process_deletes(p_run_date);
END synchronize_data;

END synchronize_my_data;

这不应该与您遇到的任何错误有关。但它应该使您的代码更容易处理。

关于oracle - 创建 Oracle 包体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770508/

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