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

前端之家收集整理的这篇文章主要介绍了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包进行操作,但是应该谨慎使用这些方法逻辑.例如,如果要创建表,则应首先检查此表是否已存在,使用数据字典视图.

猜你在找的Oracle相关文章