要实现这样一个功能,即输入开始时间和截止时间,动态生产这样的一个表:
开始时间2003,截止时间2005,生产的表只有一列:
时间:
2003
2004
2005该怎么做啊?看了一个网友给的提示,不是很明白!他给的意见:建立一个函数fn('2003','2005'),该函数就是返回这个时间段中的每一年。
然后:select * from table(fn(('2003','2005')),
他还给了截图。但是对于这个语句select * from table(fn(('2003','2005')),我不理解,from后面直接就是table关键字,也没有具体表,谁能帮我解释一下。还有这个函数fn('2003','2005')该如何写啊?那个网友因为有事,这几天都不在,而我又急着需要解决这个问题。拜托了!
开始时间2003,截止时间2005,生产的表只有一列:
时间:
2003
2004
2005该怎么做啊?看了一个网友给的提示,不是很明白!他给的意见:建立一个函数fn('2003','2005'),该函数就是返回这个时间段中的每一年。
然后:select * from table(fn(('2003','2005')),
他还给了截图。但是对于这个语句select * from table(fn(('2003','2005')),我不理解,from后面直接就是table关键字,也没有具体表,谁能帮我解释一下。还有这个函数fn('2003','2005')该如何写啊?那个网友因为有事,这几天都不在,而我又急着需要解决这个问题。拜托了!
解决方案 »
- truncate 如何设置条件?????
- 纠结一个行政区划字段的存储问题,盼指教
- 请教点基础的自定义函数问题。麻烦了。。。
- 为何不能进入oracle mangment server?
- oracle9i 有三张光盘,安装到百分之60的时候就过不去了, 换机器还是这样. 谢谢帮助!
- 请问:我在用sqlplus连接库时,我随便输入了用户名和密码就登陆进去了(是用sysdba),那不有问题了,谁都能进去了??
- 在线等待 odbc连接oracle出错问题?
- 在vc中我用如下语句(select "name" from mytable where "name" like '%联通%' 查不到
- 求sql语句多表连接和外连接的相关技术文章和书籍
- occi 连接数据库createconnection的问题
- 数据库(Oracle)Ajax讨(Jquery)讨论群组建
- oracle9i如何匹配中文的汉字?
connect by rownum <= 2005 - 2003 + 1;from后面那个table关键字是将函数返回的结果转换为表类型,因为select from只能从表中取数据
connect by rownum <= 2005 - 2003 + 1; 这个思路是我原来做的,主要是想了解下fn('2003','2005')这个函数该如何写?刚开始用pl/sql编程,很菜!fn('2003','2005')返回值应该是什么类型才可以转换成table?
如果根据输入的参数,譬如2003,和2005,来产生一个数组,不就能避免connect by了么?还没有试验。明天再弄了,如果成功再来回复,呵呵
1、
SQL> select 2003 + rownum - 1 from dual ;2003+ROWNUM-1
-------------
2003只有一条记录 加了个CONNECT BY怎么就查出了3条呢?2、
SQL> select 2003 + rownum - 1 from dual
2 where rownum <= 3;2003+ROWNUM-1
-------------
2003
试了下用WHERE是不行的3、
我只理解CONNECT BY和START WITH连用时候的功能
这里光是用个CONNECT BY就看不太懂了
相当于:
while ( i < 3 ){
result = 2003 + i - 1;
i ++;
}select 2003 + rownum - 1 from dual
connect by 1=1 and rownum <= 2005 - 2003 + 1;
这样写应该也是可以的
去掉connect by后,就只剩下一条记录了。
可以了。
create or replace type noarray as varray(20) of varchar2(30);create or replace function getArrayTest(year1 int,year2 int) return noarray
as
yearresult noarray:=noarray();
begin
for i in year1..year2 loop
yearresult.extend;
yearresult(yearresult.count):=TO_CHAR(i);
end loop;
return yearresult;
end;
select * from table(getarraytest(2005,2008))f;就可以了,但是这种情况,我怎么使用别名啊?
我想给查询到的第一列给个别名,咋给啊?
如果是固定的表,譬如test表的no列:
select test.no as "编号" from test;就可以了
但是现在的情况是这种动态表,该怎么给他的第一列用个别名呢?
------------------------------
2005
2006
2007
2008