Oracle中的动态列名称

时间:2012-07-03 13:55:42

标签: oracle dynamic

我正在尝试动态设置列标题。

这里的例子是:

SELECT Name, COUNT(cars) AS (('cars_from_year_') || year)
FROM peaple 
WHERE car = 'GM'
AND Date BETWEEN (year || '0401') AND (year || '0430');

year应为ex。 2012年和每年(2013,2014,...)的变化(即这是动态的)。

我知道调用select to_char(sysdate,'YYYY') from dual但不知道如何实现上面的select语句?

3 个答案:

答案 0 :(得分:3)

列名必须在编译时知道。您显然希望使用动态列名,因此您需要将编译推迟到实际执行。有几种方法可以执行此操作:例如DBMS_SQLEXECUTE IMMEDIATEREF CURSOR

以下是REF CURSORSQL*Plus的示例:

SQL> var x refcursor
SQL> DECLARE
  2     l_year NUMBER := 2012;
  3  BEGIN
  4     OPEN :x
  5        FOR 'SELECT ''This is the year ''||:year AS "Year ' || l_year || '"
  6               FROM DUAL'
  7        USING l_year;
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> print x

Year 2012
--------------------------
This is the year 2012

答案 1 :(得分:1)

可以使用交叉表完成。看看thisthis查询oracle上的交叉表

答案 2 :(得分:0)

尝试11g现在可用的枢轴命令,否则根据Vincent Malgrat,pl / sql是你唯一的选择。

好问题!