【YashanDB知识库】列与存储过程中重名变量/别名问题

问题现象

当一条查询中出现了重复别名,或者在一个存储过程中出现了变量名称与查询中别名相同,就会报错。这个问题在多个客户现场出现。

create table test_tab1 (c1 int, c2 int);
create table test_tab2 (c1 int, c2 int);
 
select * from test_tab1 t1
join test_tab2 t2 on t2.c1=t1.c1
join test_tab2 t2 on t2.c1=t1.c2;
 
drop table abcd;
create table abcd(c1 number,c2 number);
declare
  v_c number;
begin
  select sum(c2) v_c
  into v_c
  from abcd;
end;
/

问题的风险及影响

风险是会出现一个难以找到为什么的报错,比如找不到from之类的问题。

问题影响版本

截止2024年4月,最新版本依旧有该问题。

问题发生原因

在verify的时候,没有做变量分层处理,类似于编译器中变量压栈的操作。

解决方法及规避方式

通过修改变量名称可以临时规避这个问题。

问题分析和处理过程

1、发现编译报错;

2、如果是普通查询,那么寻找其中是否出现了别名相同的表;

3、如果是存储过程,那么需要寻找申请的变量与存储过程中报错语句的列别名是否相同。

经验总结

在写SQL的过程中,尽量区别各个变量的名称,防止重名后难以定位。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值