加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 15:14:10 所属栏目:百科 来源:网络整理
导读:在Oracle PL / SQL块中,为什么允许动态sql begin execute immediate 'drop table table_name';end; 但静电不是吗? begin drop table table_name;end; 我希望答案比“因为这就是语言的运作方式”更具洞察力. 答案是PL / SQL不支持动态多态.它只支持静态多态,
在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包进行操作,但是应该谨慎使用这些方法逻辑.例如,如果要创建表,则应首先检查此表是否已存在,使用数据字典视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读