【问题标题】:oracle sqlplus not returning values for loop with selectoracle sqlplus 不使用选择返回循环值
【发布时间】:2014-04-26 04:48:05
【问题描述】:

我以类似的方式创建了一个带有 select 的 for in 循环:

for i in (select column_name from all_tab_columns where table_name = '')
   strinvar := i.column_name

这段代码在 plsql developer 中执行时会返回: 第 1 列 第 2 列 等等

当我尝试在 sqlplus 中执行此操作时,我没有得到任何结果。我还尝试在 sqlplus 中执行此操作并将结果打印到如下文件中:

 for i in (select column_name from all_tab_columns where table_name = '')
       strinvar := i.column_name
utl_file.put_line(Filehandle, strinvar);

但它没有打印任何东西。我错过了什么吗? 最后,另一个问题与从变量中获取 select 语句中的值有关:

declare 
tab_name varchar2(100) := 'Test';

Begin
 for i in (select column_name from all_tab_columns where table_name = tab_name )
           strinvar := i.column_name
    utl_file.put_line(Filehandle, strinvar);

我可以有这样的东西还是应该为表名创建一个游标并从游标中获取名称?

你能给我建议吗? 最好的祝福 乔治乔治欧

【问题讨论】:

  • 除了您的代码无效 - 缺少 loopend loop,缺少分号等,您似乎正在寻找一个名称为 null 的表格 - 假设您是实际上在两个客户端中运行相同(有效)的代码,您是作为同一个用户连接的,还是至少作为两个可以访问您为其获取列的表的用户连接的用户?
  • 我上面写的代码只是伪代码,它不会编译,因为我不在工作中查看实际代码。同样在查询中,我记得我尝试使用 select column_name from all_tab_columns where table_name = ''and owner = user ,这也没有任何区别。我的问题是我是否可以在 sqlplus 的 stmt 中执行 for 以及是否可以将表名作为变量

标签: oracle cursor sqlplus


【解决方案1】:

您是否尝试过将假脱机与脚本中的 select 语句结合使用,您是在 Powershell/bat/SQL 中编写它还是只想按需手动运行?此外,如果您尝试从特定表中获取列名以作为变量传递,您可能希望将输出假脱机到一个数组中,以便能够将输出作为变量处理。

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2018-05-27
    相关资源
    最近更新 更多