微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle – 为什么PL / SQL中不允许使用静态ddl?

在Oracle PL / sql块中,为什么允许动态sql
begin
    execute immediate 'drop table table_name';
end;

但静电不是吗?

begin
    drop table table_name;
end;

我希望答案比“因为这就是语言的运作方式”更具洞察力.

答案是PL / sql不支持动态多态.它只支持静态多态,因为

所有PL / sql生成“DIANA” – > Ada的描述性中间归因表示法,一种树形结构的中间语言. DIANA由编译器内部使用.

在编译时,PL / sql代码被转换为系统代码生成相应的DIANA.现在想想是否有像create table语句这样的DDL语句,它在编译时不存在,它将在运行程序后创建.你的PL / sql引擎如何生成DIANA然后????

DIANA在PL / sql中扮演重要角色来检查/验证子程序.这是必需的,因为我们知道子程序可以使用数据库对象,如表,视图,同义词或其他存储过程.下次运行程序时,对象可能已更改/删除/ droped.例如:有人可能已经下了桌子,存储的过程或功能单一可能已经改变了.

这就是为什么通常使用PL / sql来操纵数据库结构中的数据,而不是操纵这些结构.

但是有一些方法可以使用动态sql和DBMS_sql包进行操作,但是应该谨慎使用这些方法逻辑.例如,如果要创建表,则应首先检查此表是否已存在,使用数据字典视图.

原文地址:https://www.jb51.cc/oracle/204992.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐