使用查询在select子句中指定列名

Ana*_*man 2 sql oracle dynamic-sql oracle11g

我有一个SQL查询,我想动态指定列的名称.
假设我有一个名为的表TABLE_A,它有一个名称列ID.我想知道我是否可以这样做:

 SELECT (SELECT 'ID' 
           FROM DUAL) 
   FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)

显然这是不可能的.有更好的方法吗?

OMG*_*ies 6

SQL不支持动态列或表名 - 您需要使用动态SQL来获得所需的功能.动态SQL意味着在将字符串(包含查询)提交到数据库以进行解释之前,根据需要构造字符串.

大多数数据库都支持动态SQL,但语法通常非常不同.Oracle提供:

  • EXECUTE IMMEDIATE
  • 使用隐式游标

此链接提供了两者的示例.

为免我们忘记Little Bobby Tables,动态SQL增加了SQL注入攻击的风险......

  • +1,我们不能经常提醒安全编码. (2认同)