暂无图片
sql问题
我来答
分享
情线
2024-04-10
sql问题

Oracle中执行下面SQL脚本,会得到什么样的结果?

 create table T1 ( id NUMBER, name VARCHAR2(10) );

 create table T2 ( id NUMBER ); 


insert into t1 values(1,'zhao'); 

insert into t2 values(1); 

commit;


create or replace procedure sp_test 

as begin delete t1 where name in (select name from t2); 

end sp_test; 

exec sp_test();




A、创建存储过程语法报错。


B、存储过程成功调用,T1表数据被删除。


C、创建存储过程未报错,调用存储过程报语法错误。


D、存储过程成功调用,T1表数据未被删除。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
yBmZlQzJ

B、存储过程成功调用,T1表数据被删除。

暂无图片 评论
暂无图片 有用 1
打赏 0
情线
题主
2024-04-10
delete t1 where name in (select name from t2); 我很纳闷这个语句为啥会执行成功
chengang

B、存储过程成功调用,T1表数据被删除。

原因是子查询是可以引用外表的列的。因为你的 name没有指定表名。所以name其实是 T1表的name

暂无图片 评论
暂无图片 有用 0
打赏 0
情线
题主
2024-04-10
select name from t2 这个name指的是t1表?
chengang
答主
2024-04-10
是的啊。不然这个语句肯定不能删除T1的数据啊。你可以做一个测试 你写t2.name 连语法都过不了。要报错。
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏