【问题标题】:Issue while passing to variable传递给变量时出现问题
【发布时间】:2016-05-29 02:56:52
【问题描述】:

我正在尝试比较 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,它就不会在循环中工作

提前感谢您的帮助!

【问题讨论】:

  • “不工作”是什么意思?除非您告诉我们什么不起作用,否则我们无法为您提供帮助。
  • 请发布您收到的确切错误消息

标签: oracle oracle10g


【解决方案1】:

有几件事情马上就跳出来了,但是在你修复这些之后你可能会发现更多的错误。

Oracle 建议使用 varchar2 而不是 varchar,但这不是一个错误。然后,您没有在声明末尾添加分号 (;); 一个错误,足以让编译器抛出一个错误。然后,您在其他几个地方缺少分号。这是你第一次用 PL/SQL 写东西吗?看起来确实是这样。

您使用了循环变量i,但您没有声明它。这将引发另一个错误。您说这是较长代码的一部分,也许 i 在其他地方声明 - 那么您必须编辑您的帖子以包含代码的所有相关部分(如果您能够理解哪些是)。

然后将值 i.table_name 分配给 var。这意味着什么? i 已经是从 tmp_table 中选择的 table_name;你的意思是我有一个名为table_name 的列吗?非常不可能。您的意思是简单地将 i 分配给 var 吗?

我真的无法从接下来的几行代码中理解任何内容,你想在那里做什么?

最后,END LOOP 是两个字;如果你写 Endloop 你会得到另一个错误。

我建议您在开始编写程序之前花一些时间学习 PL/SQL;您发布的内容表明对它的了解非常非常少。仅编写您不理解的代码,而不检查正确的含义和正确的语法,并将其发布在此处寻求帮助,您不会节省任何时间。这不是它的工作原理。

祝你好运!

【讨论】:

    【解决方案2】:

    你缺少子句into ...

    【讨论】:

    • 这个答案可能实际上对 OP 没有帮助,因为不清楚如何应用您的建议来解决问题。请说明您的建议,例如通过显示生成的正确代码。
    猜你喜欢
    • 2022-06-15
    • 2016-02-09
    • 2023-01-22
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多