【问题标题】:I'd like to select all values from all databases我想从所有数据库中选择所有值
【发布时间】:2020-09-24 19:03:28
【问题描述】:

我将 Oracle 12c 与许多来来去去的数据库一起使用。我可以运行“select * from all_users”并获取我所有用户数据库的列表。现在我可以指定我想查询哪个用户的表,但我真的很想查询它们。所以像“select * from all_users.client”这样的东西可以从所有用户那里获取所有客户端。我知道这行不通,坦率地说,这里可能没有办法做我想做的事,但如果有,请指出我正确的方向。

【问题讨论】:

  • 动态 SQL 是你的朋友。
  • 我认为您的意思是“来自所有”,而不是数据库
  • 程序要点:您的短语“来来去去的许多数据库”和“我所有用户数据库的列表”听起来像是您将“数据库”与“用户”混为一谈。也许您来自 MSSQL 背景,其中“数据库”一词的含义与 oracle 中的完全不同。在 oracle 中,数据库有用户,用户有表。用户没有数据库,数据库也不倾向于“来来去去”。同样在 oracle 中,术语“用户”和“模式”几乎是同义词,“模式”是特定用户拥有的对象的集合。
  • 所有数据库都属于同一个container吗?

标签: sql oracle


【解决方案1】:

我创建了一个 SQL 脚本,您可以运行该脚本来导出所有表(您有权访问)中的所有信息。使用 SQLcl,您可以 set sqlformat csv 以便您运行的任何选择返回以逗号分隔的列。您还可以修改收集表名的 select 语句以限制要返回的表。

另外请注意,我遇到了一些表名中包含对文件名无效的字符的表。例如,我有一些表名称中包含 $ 的表,但这不是文件名的有效字符,因此如果您遇到这种情况,您可能需要为此添加更正。

set pagesize 0
set linesize 20000
set heading off
set feedback off

spool export_tables.sql

  SELECT 'spool ' || owner || '.' || table_name || '.csv' || chr(10)
      || 'select * from ' || owner || '.' || table_name || ';' || chr(10)
      || 'spool off'
    FROM all_tables
   WHERE owner NOT IN ('SYS',
                       'SYSTEM',
                       'OUTLN',
                       'DBSFWUSER',
                       'AUDSYS',
                       'DBSNMP',
                       'APPQOSSYS',
                       'XDB',
                       'WMSYS',
                       'OJVMSYS',
                       'CTXSYS')
ORDER BY owner, table_name;

spool off;

set sqlformat csv
set heading on

@export_tables.sql

【讨论】:

    【解决方案2】:

    我想你想获取用户的所有表格:

    select * from all_tables order by owner, table_name;
    

    返回用户名和表名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多