Teradata存储过程调用报错:为何提示过程内部的XYZ不存在?
解决Teradata存储过程调用时的"对象不存在"错误
嘿,这个问题我太熟了——你调用存储过程时犯了一个新手常踩的小坑:没有给字符串类型的传入参数加单引号!
当你执行call ABC.SHOWTABLE (XYZ,MYTABLE);时,Teradata会把XYZ和MYTABLE当成标识符来解析——也就是认为它们是存储过程内部的参数名、列名,或者某个数据库对象的名字,而不是你想要传入的字符串值。所以它才会去ABC.SHOWTABLE这个存储过程里找名为XYZ的参数/列,找不到就抛出了你看到的错误。
快速修正:给参数加单引号
只要把传入的字符串用单引号包裹,Teradata就会把它们当成字符串常量处理,问题立刻解决:
CALL ABC.SHOWTABLE('XYZ', 'MYTABLE');
进阶优化:让数据库参数可选
如果你的存储过程经常需要查询当前会话数据库下的表,可以优化一下存储过程,给my_database参数设置默认值为当前数据库,这样调用起来更方便:
REPLACE PROCEDURE ABC.SHOWTABLE ( my_table VARCHAR(30), my_database VARCHAR(30) = CURRENT_DATABASE ) BEGIN DECLARE sqlstr VARCHAR(500); SET sqlstr = 'SHOW TABLE ' || my_database || '.' || my_table ; EXECUTE IMMEDIATE sqlstr; END;
之后调用当前数据库的表时,就可以简化成:
CALL ABC.SHOWTABLE('MYTABLE');
内容的提问来源于stack exchange,提问作者Rakshit Sakhuja
相关产品推荐
相关产品推荐

