我试图比较where子句中的变量值。 变量具有正确的值,但在where子句中它不起作用。
Declare var varchar (50)
Begin
For i in (select table_name from tmp_table)
Loop
Var := i.table_name
Insert into new_table
Select * from all_tab_name atn
Where atn.table in (var)
Endloop
End;
这是示例查询我的原始查询更大但这是我有问题的点 它可以工作,如果我硬编码一个表名,但如果我传递变量或直接分配i.table_name
它不在循环中工作提前感谢您的帮助!
答案 0 :(得分:1)
有几件事情马上跳出来,但修复后你可能会发现更多的错误。
Oracle建议在varchar上使用varchar2,但这不是错误。然后,你没有在声明的末尾添加分号(;
); 是一个错误,这足以让编译器抛出错误。然后,你在其他几个地方错过了分号。这是你第一次在PL / SQL中写任何东西吗?这当然就是这样。
您使用循环变量i
,但您没有声明它。这将引发另一个错误。您说这是较长代码的一部分,并且可能在其他地方声明i
- 然后您必须编辑您的帖子以包含代码的所有相关部分(如果您能够理解哪些那些是。
然后为var赋值i.table_name。那是什么意思?我已经是从tmp_table中选择的table_name;你的意思是我有一个名为,巧合的是,table_name?非常不可能。你的意思是简单地将i分配给var?
我真的无法理解接下来几行代码中的任何内容,你在那里尝试做什么?
最后,END LOOP是两个字;如果你写Endloop,你会得到另一个错误。
我建议您在开始编写程序之前花点时间学习PL / SQL;你发布的内容对它的理解非常非常少。只要编写您不理解的代码而不检查正确的含义和正确的语法,并在此处发布以获取帮助,您就不会节省任何时间。这不是它的工作方式。
祝你好运!答案 1 :(得分:0)
您缺少条款into ...