oracle execute immediate create,oracle – 为什么需要EXECUTE IMMEDIATE?

我是一个SQL Server用户,我有一个小项目要使用Oracle,所以我试图了解Oracle的一些特性,我认为我需要一些帮助来更好地理解以下情况:

我想在创建临时表之前测试它是否存在,所以我在这里有这个代码:

DECLARE

table_count INTEGER;

var_sql VARCHAR2(1000) := 'create GLOBAL TEMPORARY table TEST (

hello varchar(1000) NOT NULL)';

BEGIN

SELECT COUNT(*) INTO table_count FROM all_tables WHERE table_name = 'TEST';

IF table_count = 0 THEN

EXECUTE IMMEDIATE var_sql;

END IF;

END;

它正常工作,所以在我执行一次后,我在我的IF上添加了一个else语句:

ELSE

insert into test (hello) values ('hi');

再次执行它,并在我的测试表中添加了一行.

好吧,我的代码准备就绪并且正常工作,所以我删除了临时表并尝试再次运行整个语句,但是当我这样做时,我收到以下错误:

ORA-06550: line 11, column 19:

PL/SQL: ORA-00942: table or view does not exist

ORA-06550: line 11, column 7:

PL/SQL: SQL Statement ignored

06550. 00000 - "line %s, column %s:\n%s"

*Cause: Usually a PL/SQL compilation error.

*Action:

然后我将我的else语句更改为this,现在它再次起作用:

ELSE

EXECUTE IMMEDIATE 'insert into test (hello) values (''hi'')';

我的问题是为什么单独运行我可以简单地使用插入而不是EXECUTE IMMEDIATE以及为什么我的SELECT语句在BEGIN之后仍然有效,而其他所有其他似乎都需要EXECUTE IMMEDIATE才能正常运行?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值