以 table.column 格式返回 Oracle 列名?

2024-01-23

是否有任何设置或方法可以用来让 Oracle 返回结果<table>.<column>格式?例如:

Query:

SELECT     *
FROM       foo f
INNER JOIN bar b
ON         b.foo_id = f.id

期望的结果:

F.ID  F.BLAH  B.ID  B.FOO_ID  B.BLAH
--------------------------------------------------------
1     blah    7     1         blah
2     blah    8     2         blah
3     blah    9     2         blah

显而易见的解决方案是为每列单独设置别名SELECT f.id AS F_ID, ...;但是,我需要导出一些非常大的旧表(300 多个列),因此使用此方法会导致查询庞大且不切实际。


Oracle 中没有“选项”可以执行此操作;你may能够找到允许您这样做的客户,因为这是通常在客户中完成的工作;我不知道有一个。

扩展tbone 的回答 https://stackoverflow.com/a/12230772/458741你必须动态地执行此操作。这does not意味着您必须列出每一列。你会使用数据字典 http://docs.oracle.com/cd/E11882_01/server.112/e25789/datadict.htm#CNCPT2140, 具体来说所有选项卡列 http://docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_2103.htm#REFRN20277 or user_tab_columns创建您的查询。创建具有您想要的确切定义的视图会更容易,以便您可以根据需要重复使用它。

目的是利用列存在作为字符串存储在表中的事实,以便创建查询来使用该列。由于列名和表名存储为字符串,因此您可以使用字符串聚合技术轻松创建查询或 DDL 语句,然后可以手动或动态执行它们。

如果您使用的是 Oracle 11g 第 2 版listagg http://docs.oracle.com/cd/E11882_01/server.112/e25554/analysis.htm#DWHSG8702功能可帮助您:

select 'create or replace view my_view as 
        select '
      || listagg( table_name || '.' || column_name 
               || ' as ' 
               || substr(table_name,1,1) || '_' 
               || column_name, ', ')
        within group 
         ( order by case when table_name = 'FOO' then 0 else 1 end
                  , column_id
          )
       || ' from foo f
            join bar b
              on f.id = b.foo_id'
  from user_tab_columns
 where table_name in ('FOO','BAR')
        ;

假设这个表结构:

create table foo ( id number, a number, b number, c number);
create table bar ( foo_id number, a number, b number, c number);

这个单一查询产生以下结果:

create or replace view my_view as 
 select FOO.ID as F_ID, FOO.A as F_A, FOO.B as F_B, FOO.C as F_C
      , BAR.FOO_ID as B_FOO_ID, BAR.A as B_A, BAR.B as B_B, BAR.C as B_C 
   from foo f 
   join bar b on f.id = b.foo_id

这是一个SQL小提琴 http://www.sqlfiddle.com/#!4/362b3/3来证明这一点。

如果您不使用 11.2,则可以使用未记录的函数获得完全相同的结果wm_concat http://psoug.org/definition/WM_CONCAT.htm或用户定义的函数stragg http://www.oracle.com/splash/collabsuite/maintenance/index.html,由汤姆·凯特创建。 Oracle Base 有一篇文章关于字符串聚合技术 http://www.oracle-base.com/articles/misc/string-aggregation-techniques.phpStack Overflow 上有很多帖子。

作为一个小附录,您实际上可以通过对上述查询进行少量更改来创建您正在寻找的内容。您可以使用带引号的标识符 http://docs.oracle.com/cd/E11882_01/server.112/e10592/sql_elements008.htm在中创建一个列TABLE_NAME.COLUMN_NAME格式。你have将其引用为.不是 Oracle 中对象名称的有效字符。这样做的好处是你得到的正是你想要的。缺点是,如果不使用,查询创建的视图会非常痛苦select * from ...;选择命名列将require他们被引用。

select 'create or replace view my_view as
        select '
      || listagg( table_name || '.' || column_name 
               || ' as ' 
               || '"' || table_name || '.'
               || column_name || '"', ', ')
        within group 
         ( order by case when table_name = 'FOO' then 0 else 1 end
                  , column_id
          )
       || ' from foo f
            join bar b
              on f.id = b.foo_id'
  from user_tab_columns
 where table_name in ('FOO','BAR')
        ;

该查询返回 http://www.sqlfiddle.com/#!4/362b3/5:

create or replace view my_view as 
 select FOO.ID as "FOO.ID", FOO.A as "FOO.A", FOO.B as "FOO.B", FOO.C as "FOO.C"
      , BAR.FOO_ID as "BAR.FOO_ID", BAR.A as "BAR.A"
      , BAR.B as "BAR.B", BAR.C as "BAR.C"
   from foo f 
   join bar b on f.id = b.foo_id
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以 table.column 格式返回 Oracle 列名? 的相关文章

  • 插入期间违反唯一约束:为什么? (甲骨文)

    我正在尝试在表中创建一个新行 表上有两个约束 一个是关键字段 DB ID 另一个是将值限制为字段 ENV 中的几个之一 当我进行插入时 我没有将关键字段作为我尝试插入的字段之一 但我收到此错误 unique constraint N390
  • 表与视图的性能

    最近开始使用一个数据库 其中的惯例是为每个表创建一个视图 如果您假设表和视图之间存在一对一的映射 我想知道是否有人可以告诉我这样做对性能的影响 顺便说一句 这是在 Oracle 上的 假设问题是关于非物化视图 实际上取决于视图所基于的查询以
  • 在 MVC3 应用程序中使用具有表单身份验证的 Oracle 数据库

    我编写了一个简单的 MVC3 应用程序 并遵循了有关如何设置经过身份验证的用户的教程 本教程使用 SQL Server Express 数据库 是否可以使用 Oracle 数据库代替 SQL Server 这只是更改 web config
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • 如何找到 Oracle 视图的基础列和表名称?

    这听起来应该很简单 但事实并非如此 我找不到任何 Oracle 元数据 视图可以提供 Oracle 视图列的基础列和表名称 我发现这样做的唯一方法是解析视图源 SQL 这与精确的科学相去甚远 为了解释我想要什么 请考虑我在 SCOTT 模式
  • SQL SELECT 对值求和,不包括重复项

    我在 Oracle SQL 中遇到一个问题 我正在尝试解决这个问题 我将用一个例子来说明 我正在查询三个表 Employees EmployeeID Name 1 John Smith 2 Douglas Hoppalot 3 Harry
  • 如何查看授予其他用户的架构哪些权限

    考虑这种情况 在数据库中 我有两个用户 A 和 B 及其相应的架构 我想知道 如何获取信息 架构 B 中的用户 A 有哪些权限 考虑这种情况 我们有两个用户及其关联的场景 我们有用户A和用户B 在A中 假设我们有TB1 TB2 在B中 假设
  • Oracle 11g OFFSET FETCH 给出错误

    我正在进行查询并尝试从数据库中获取随机数量的行 但 Oracle 一直告诉我我的命令尚未正确结束 select from random table order by random column name offset 0 rows fetc
  • 无法在 .NET 中加载 Oracle.DataAccess 的文件或程序集

    当我尝试运行一个简单的程序来访问 oracle 时 我收到此消息 无法加载文件或程序集 Oracle DataAccess 版本 2 111 7 20 文化 中性 PublicKeyToken 89b483f429c47342 或其依赖项之
  • Oracle ODP.net 托管驱动程序与非托管驱动程序

    托管和非托管 Oracle ODP Net 驱动程序之间是否存在任何性能基准 即 除了架构 部署简单性之外 迁移到托管驱动程序是否有任何优势 我想分享一些结果 我认为与部署的简便性相比 性能上的小缺陷是值得的 Note seg意味着秒 对于
  • 如何在Oracle中使用Timestamp_to_scn和Scn_to_timestamp?

    我的查询结果是这样的 select cast to date a start time mm dd yyyy hh mi ss pm as timestamp date of call ora rowscn from calling tab
  • Pivotal Cloud Foundry - 连接到外部 Oracle 数据库

    我正在创建一个 Spring boot 应用程序 该应用程序连接到一个不由 PCF 管理 或驻留在外部 的 Oracle 数据库 在我的本地开发环境中 我在 application properties 文件中配置了数据库连接详细信息 有人
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • LiveSQL 不断向我显示:ORA-00933:SQL 命令未正确结束[重复]

    这个问题在这里已经有答案了 INSERT INTO Countries Country Capital Cities VALUES Philippines Manila 122 USA Washington 19495 Brazil Bra
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4
  • Oracle 中的日期字符串(以毫秒为单位)

    我想将以下字符串转换为日期 2004 09 30 23 53 48 140000000 I tried to date YYYY MM DD HH24 MI SS FF9 But PL SQL http en wikipedia org w
  • Oracle 语法 - 我们是否必须在新旧语法之间进行选择?

    我在一个由大约 8 名开发人员组成的团队中负责大约 1 000 000 行源代码的代码库 我们的代码基本上是一个使用 Oracle 数据库的应用程序 但代码随着时间的推移而不断发展 我们有大量九十年代中期的源代码 团队中就我们用于查询 Or
  • 从函数内的 SELECT 返回一个变量

    我正在尝试创建一个返回 varchar 的函数 其中一个字段形成一个选择 即聚合字段 我收到下一个错误 ORA 01422 exact fetch returns more than requested number of rows 我的理
  • 循环预定义值

    有没有办法在 oracle 中执行 for every 如下所示 begin for VAR in 1 2 5 loop dbms output put line The value VAR end loop end 我知道你可以这样做 b

随机推荐

  • 没有 ToolBarManager 的黑莓标签栏

    我想为我的黑莓项目创建一个具有精确外观和感觉的工具栏 任何帮助是极大的赞赏 请注意 我无法使用 ToolBarManager 我的项目应该支持OS 5 0之后的所有设备 Thanks 这是如何在黑莓中创建选项卡的示例代码 之后我一共看了 3
  • 如何测试具有外部依赖项的 Webpack 包?

    总的来说 我对 Webpacker 和 Rails 还很陌生 我最近开始使用 Webpacker 来捆绑 React 组件 由于应用程序的一部分仍然使用资产管道 因此一些依赖项仍然存储在vendor assets javascript 并可
  • 在实现表单关闭的 WPF MVVM 模式时获取“仅在创建窗口并显示为对话框后才能设置 DialogResult”

    我正在尝试实施this https stackoverflow com a 3329467 713683WPF 表单关闭的 MVVM 模式也在此进行了解释blog http blog excastle com 2010 07 25 mvvm
  • 我可以使用 JOOQ 作为 SQL 解析器吗?

    我正在尝试解析 Java 中的 SELECT 语句 我熟悉 JOOQ 并希望使用它 我知道它并没有明确设计为 SQL 解析器 实际上它的功能远不止于此 因此我认为可能有一种方法可以使用其内部解析器来解析 SELECT 查询 我看到了一些有关
  • 将旧的 mysql 与 PDO 混合

    我正在编写一个使用一些遗留代码的应用程序 较新的代码使用 PDO 而较旧的代码使用原始 mysql 库 第一个代码中的事务中输入了大量数据 以便我可以在错误时回滚 但是在某些时候会调用遗留代码并需要查看相同的数据 除非连接是共享的 否则旧代
  • 快速排序递归深度 O(n) 的堆栈空间不会导致堆栈溢出?

    在最坏的情况下 快速排序递归深度需要 O n 的堆栈空间 为什么在最坏的情况下它不会导致大集合的堆栈溢出 顺序颠倒 如果在枢轴的两侧进行递归 那么在最坏的情况下 它确实会导致足够大的数据的堆栈溢出 这就是为什么没有人在生产代码中使用简单的快
  • 将图像序列化为字符串

    论坛里的好朋友 我一直在搜索很多 但我找不到如何序列化图像并将其传递给 android 中的字符串 可能并非如此 如果有人知道并想告诉我 我将非常感激 虽然java awt Image类不是 未实现 java io Serializable
  • C# 检查复选框状态的更清晰方法?

    我有以下代码 它将布尔值列表作为参数 然后通过单独验证列表来设置每个检查列表的检查状态 有没有更有效的方法来编写以下代码 例如 通过使用循环 public PointCtrlRowSelectionForm List
  • 将函数应用于 R 中的数据帧列表

    我需要有关如何以迭代方式管理列表的帮助 我有以下清单list它由多个具有相同列但行数不同的数据框组成 例子 1 id InpatientDays ERVisits OfficeVisits Narcotics 1 a 0 0 18 1 2
  • 使用 .aar NoClassDefFoundError 但类存在并且已 Dexed

    我有几个项目是为了创建 aar 而构建的 然后我将此 aar 导入到 Android Studio 的 libs 下 此依赖项的 build gradle 文件如下所示 repositories flatDir dirs libs depe
  • 我如何将 ╚ 放入批处理文件中

    我正在尝试在批处理文件中添加行 等 但是将它们直接插入批处理文件中会产生一些我没有输入的奇怪字符 我正在使用记事本 通过alt 200键入这些字符或者取决于我想要的字符 Windows 10 和命令提示符版本 10 0 10240 有什么解
  • 如何在node.js中使用基本身份验证从url获取用户名和密码? [复制]

    这个问题在这里已经有答案了 我需要获取浏览器从 url 发送到我的 node js 应用程序的用户名和密码 我挖掘了各种文档和对象 但找不到任何有用的东西 有人知道该怎么做吗 使用身份验证标头不是一个选项 因为现代的 Bowser 不设置它
  • 是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何?

    据 Apple 介绍 Lion 中引入的新 XPC Services API 为与 Grand Central Dispatch GCD 和 launchd 集成的基本进程间通信提供了一种轻量级机制 似乎可以使用这个 API 作为一种 IP
  • UIWebView 最初不加载某些 URL

    UIWebView 遇到如此奇怪的问题 我无法在网上找到解决方案 我有一个 iPad 应用程序 其中有网络视图 首次安装并运行应用程序时 我尝试加载一个教育网站 http my tac edu au 网络视图只是挂起并超时 我杀死了该应用程
  • 使用相同的内部表示和最少的样板处理多种类型?

    我发现自己在用 Haskell 编写大型程序时经常遇到一个问题 我发现自己经常想要多个不同的类型共享内部表示和几个核心操作 有两种相对明显的方法可以解决这个问题 一种是使用类型类 GeneralizedNewtypeDeriving扩大 将
  • SOAP 和 HTTP 协议的区别?

    SOAP 和 HTTP 协议有什么区别 当我们说 SOAP over HTTP 时 这是什么意思 您可以通过 HTTP 提供任何内容 例如 HTML 图像 声音 视频等 SOAP 是一种基于 XML 的消息编码 通常通过 HTTP 发送 但
  • 如何将比其父元素宽的元素居中?

    我目前有一个固定宽度为 900px 的 div 我想添加一个固定宽度为 950px 的子 iframe 并且我希望它与中心完美对齐 那怎么办呢 Thanks 您可以将子项放置在 50 处 然后使用负边距 即子项宽度的一半 parent po
  • 检查 php 脚本是否仍在运行

    我有一个脚本可以监听 jabber 服务器并做出相应的响应 虽然它不应该停止 但昨晚它却停止了 现在我想每分钟运行一个 cron 作业来检查脚本是否正在运行 如果没有运行则启动它 问题是 如何检查特定脚本是否仍在运行 一些解决方案已经发布h
  • C# 替换 docx 中的文本字符串

    使用 C 有没有一种好方法可以在 docx 文件中查找和替换文本字符串 而无需在该计算机上安装 word 是的 使用Open XML http openxmldeveloper org default aspx 这是一篇解决您的具体问题的文
  • 以 table.column 格式返回 Oracle 列名?

    是否有任何设置或方法可以用来让 Oracle 返回结果 table table