写点什么

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

作者:YashanDB
  • 2024-07-26
    广东
  • 本文字数:472 字

    阅读完需:约 2 分钟

问题现象

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


create table test_tab1 (c1 int, c2 int);create table test_tab2 (c1 int, c2 int); select * from test_tab1 t1join test_tab2 t2 on t2.c1=t1.c1join 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 的过程中,尽量区别各个变量的名称,防止重名后难以定位。

用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB知识库】列与存储过程中重名变量/别名问题_yashandb_YashanDB_InfoQ写作社区