传递给变量时发出问题

时间:2016-05-29 02:56:52

标签: oracle oracle10g

我试图比较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

它不在循环中工作

提前感谢您的帮助!

2 个答案:

答案 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 ...