sách gpt4 ai đã đi

Oracle 向一个对象类型添加一个新的成员函数/过程

In lại 作者:行者123 更新时间:2023-12-02 00:27:10 25 4
mua khóa gpt4 Nike

我正在尝试执行以下操作;假设我在 Oracle 中创建了一个对象类型

create type test as object(
name varchar2(12),
member procedure print1);
/
create type body test is
member procedure print1 is
begin
dbms_output.put_line('Test');
end print1;
end;
/

现在我想添加一个新的成员过程 print2 - 同样,我可以通过键入:

alter type test
add member procedure print2 cascade;

现在,我的问题是:如何只定义 body 并添加 print2 而无需重复其他定义?我知道我可以为这两个过程创建或替换主体测试并列出实现,但这不切实际,因为我必须维护其他人编写的对象类型的代码,而且我不知道他们是如何实现代码的,只是这些过程和功能存在。

我浏览了文档和网络,但找不到答案,而且 Oracle 希望开发人员再次输入所有定义对我来说似乎很愚蠢。

问候,乔治

1 Câu trả lời

如何创建一个动态添加定义到类型的过程:

create or replace procedure add_procedure(p_new_procedure_definition varchar2)
authid current_user

v_object_type_body varchar2(32767) := 'create or replace ';
begin
--Build string with current definitions
for source_code in
(
select text
from user_source
where name = 'TEST'
and type = 'TYPE BODY'
order by line
) loop
--Don't include the last "END;" yet.
--(Huge assumption that the package ends with "END;")
if replace(upper(trim(source_code.text)),chr(10)) <> 'END;' then
v_object_type_body := v_object_type_body||source_code.text;
end if;
end loop;

--Add new definition
v_object_type_body := v_object_type_body||chr(10)||
p_new_procedure_definition||chr(10)||'end;';

--For debugging
--dbms_output.put_line(v_object_type_body);

--Compile the type
execute immediate v_object_type_body;
end;
/

然后像这样运行它:

begin
add_procedure(
'
member procedure print2 is
begin
dbms_output.put_line(''Test2'');
end print2;
'
);
end;
/

尽管您需要对包裹的结束方式做出一些相当大的假设。要使其成为真正通用的解决方案,您需要构建一个 PL/SQL 解析器,这基本上是不可能的。该过程仅适用于 32K,如果类型非常大,您可能需要使用 CLOB。

关于Oracle 向一个对象类型添加一个新的成员函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461756/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com