我正在尝试动态设置列标题。
这里的例子是:
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语句?
答案 0 :(得分:3)
列名必须在编译时知道。您显然希望使用动态列名,因此您需要将编译推迟到实际执行。有几种方法可以执行此操作:例如DBMS_SQL
,EXECUTE IMMEDIATE
和REF CURSOR
。
以下是REF CURSOR
和SQL*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)
答案 2 :(得分:0)
尝试11g现在可用的枢轴命令,否则根据Vincent Malgrat,pl / sql是你唯一的选择。
好问题!