【问题标题】:Loop through PL/SQL Row循环遍历 PL/SQL 行
【发布时间】:2023-03-19 12:32:01
【问题描述】:

我正在寻找某种方法来迭代 PL/SQL 行,但我没有得到任何合适的结果。

例如,如果我有一个看起来像 row(first_name,last_name) 的 PL/SQL 行,并且我想在不知道该行的情况下使用 PL/SQL 打印名字和姓氏,即我不知道如何行看起来像所以我需要一些看起来像这样的代码

FOR column IN My_Row  --some way to iterate through the row.
LOOP
    PRINT column...   --do my stuff, in this example
END LOOP;

【问题讨论】:

  • “PL/SQL 行”是什么意思?行类型?一个(逗号分隔的)字符串?为什么你不知道行的结构?你是怎么得到这一行的?
  • 是的'它是一个ROWTYPE,我不知道的原因是因为我想遍历所有数据库,这意味着将达到我数据库中存在的各种ROWTYPE到那个代码。顺便说一句,主要思想是查找数据库中包含某个单元格中给定值的所有表。谢谢。

标签: sql oracle plsql plsqldeveloper


【解决方案1】:

如果您知道该行所在的表的名称,那么您可以从ALL_TAB_COLUMNS 获取列的名称。您可以围绕它构建动态 SQL。请参阅这篇 Ask Tom 文章,了解以下内容:Referencing %rowtype variables without using column names

根据您的评论,您将浏览所有表格,以便您可以使用 ALL_TABLES 获取所有表格的名称。但请记住,ALL_TABLES 是您的登录名可以访问的所有表,而 DBA_TABLES 是数据库中的每个表,USER_TABLES 是您的用户拥有的表。

【讨论】:

  • 非常感谢,它对我很有帮助,太棒了!
  • 某些异常 ALL_TAB_COLUMNS 包含表-列对,但并非所有 db 都存在于表中...... ALL_TAB_COLUMNS 中仅存在少数表。我可以从其他地方获取这些值吗?
  • @Asaf Maimon - ALL_TAB_COLUMNS 显示您拥有权限的表的列,对应于ALL_TABLES。同样,DBA_TAB_COLUMNS 包含数据库中所有表的列,但您可能无权查看或从它显示的某些表中进行选择。
  • ahhhh,我知道了,看我有一些问题,可能你会找到一些解决方案,我正在尝试遍历所有数据库以获取所有包含某些值的表.但是如果表 ALL_TAB_COLUMNS 只包含我对它们有权限的表,我如何搜索我没有权限的表的值?我可以从这些表中选择值,所以我确信有一种方法可以检查它们是否包含一些值......谢谢
  • @Asaf Maimon - 见this question。但是你不能搜索你看不到的数据。您需要以可以查看所有表的用户身份运行查询;或单独作为每个表的所有者(使用USER_TABLES);或让 DBA 为您运行它。
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 2021-07-30
  • 2016-07-24
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多