今天执行oracle部分语句
alter table student modify birthday default systime,提示ORA-00984 列在此处不允许,个人分析为列birthday不支持格式到时分秒,但是问题来了
如何更新表student的列birthday的格式支持时分秒呢我写了一句然后语句是错误的alter table student modify birthday (to_date=('yyyy-MM-dd HH24:mi:ss'));
请问各位大师如何实现
问题2:
constraint建立的约束是否只对单表生效,亦或者只对单句生效,别的表是否可以调用不是自己表的constraint约束呢?
问题3:
alter table student modify cardId unique与alter table customer add constraint xxxxxx unique(cardId); 实现的内容既然一样那么有什么差别呢?
问题4:
建立的索引是否只适应单表,或者只适用已经指定的单列或者几列呢?
问题5:
创建包、 包体以及过程函数是不是最后的一句话里面都要加上“/”呢,函数加上是会出现错误的函数,其它的不知道是不是都需要加“/”
问题6:
何种情况为必须是用游标处理的情况?
7 个解决方案
#1
oracle时间字段是datetime,相关操作可如下:
--oracle中时间相关的一些操作
Select sysdate from dual --取当前系统时间
Select to_char(sysdate , 'YYYY-MM-DD HH:MI:SS') from dual --取当前系统时间,转换为字符串
Select trunc(sysdate) from dual --取当前日期
Select trunc(sysdate , 'MM') from dual --取当前月的第一天
Select trunc(sysdate , 'YYYY') from dual --取当年的元旦
Select to_char(sysdate , 'ss') from dual --取当前时间秒部分
Select to_char(sysdate , 'mi') from dual --取当前时间分钟部分
Select to_char(sysdate , 'HH24') from dual --取当前时间小时部分
Select to_char(sysdate , 'DD') from dual --取当前时间日期部分
Select to_char(sysdate , 'MM') from dual --取当前时间月部分
Select to_char(sysdate , 'YYYY') from dual --取当前时间年部分
Select to_char(sysdate , 'w') from dual --取当前时间是一个月中的第几周(从1日开始算)
Select to_char(sysdate , 'ww') from dual --取当前时间是一年中的第几周(从1.1开始算)
Select to_char(sysdate , 'iw') from dual --取当前时间是一年中的第几周(按实际日历的)
Select to_char(sysdate , 'd') from dual --取当前时间是一周的第几天,从星期天开始,周六结束
Select to_char(sysdate , 'day') from dual --取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’
Select to_char(sysdate , 'ddd') from dual --当前日是一年中的第几天
Select Add_months(sysdate , 12) from dual --取一年后的今天
Select sysdate - (sysdate - 100) from dual --取两个日期之间的天数
Select (sysdate - (sysdate - 100)) * 1440 from dual --取两个日期之间的分钟数
Select (sysdate - (sysdate - 100)) * 1440 * 60 from dual --取两个日期之间的秒数
Select months_between(sysdate,sysdate - 100) from dual --取两个日期间隔的月份
Select trunc(months_between(sysdate,sysdate - 100)) from dual --取两个日期间隔的月份
Select trunc(last_day(sysdate)) from dual --取当前月的最后一天
Select next_day(sysdate , 1) from dual --取当前日之后第一个星期天,里面的’1’表示取星期日,如果今天正好是星期日,则会显示下一个星期日
1.显示当前时间
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_time from dual;
/*
CURRENT_TIME
-------------------
2007-09-29 09:29:03
1 row selected
*/
select current_date current_time from dual;
/*
CURRENT_TIME
----------------
2007-9-29 10:34:
1 row selected
*/
2.只显示日期,不显示时间
select to_char(sysdate,'yyyy-mm-dd') current_date from dual;
/*
CURRENT_DATE
------------
2007-09-29
1 row selected
*/
按时间分组求和
ID INPUT_DATE NUM
-- ------------------ ---
1 2007-9-29 9:52:53 10
2 2007-9-29 9:53:16 20
3 2007-9-29 9:53:32 30
4 2007-9-29 9:53:41 40
5 2007-9-29 9:53:52 50
6 2007-9-28 9:00:00 60
7 2007-9-28 9:01:00 70
8 2007-9-28 9:02:00 80
9 2007-9-28 10:00:00 90
1、对上述数据按日期求和,结果如下:
日期 NUM
---------- ----------
2007-09-28 300
2007-09-29 150
--sql语句
select to_char(input_date,'yyyy-mm-dd') 日期 , sum(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd')
--结果
/*
日期 NUM
---------- ----------
2007-09-28 300
2007-09-29 150
2 rows selected
*/
2、对数据按每天每小时求和,结果如下:
日期 NUM
------------- ----------
2007-09-28 09 210
2007-09-28 10 90
2007-09-29 09 150
--sql语句
select to_char(input_date,'yyyy-mm-dd hh24') 日期 , sum(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd hh24')
--结果
/*
日期 NUM
------------- ----------
2007-09-28 09 210
2007-09-28 10 90
2007-09-29 09 150
3 rows selected
*/
3.按日期取num最大值的记录
ID INPUT_DATE NUM
-- ---------- ---
9 2007-09-28 90
5 2007-09-29 50
--sql
select a.id , to_char(a.input_date,'yyyy-mm-dd') input_date,a.num from jh01 a,
(
select to_char(input_date,'yyyy-mm-dd') input_date, max(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd')
) b
where to_char(a.input_date,'yyyy-mm-dd') = b.input_date and a.num = b.num
/*
ID INPUT_DATE NUM
-- ---------- ---
9 2007-09-28 90
5 2007-09-29 50
2 rows selected
*/
#2
提示ORA-00984 错误是由于ORACLE没有SYSTIME,应该用SYSDATE。
DATE数据类型已包含了日期和时间。
DATE数据类型已包含了日期和时间。
#3
1、用sysdate 。date类型包括日期和事件,再详细的可以用timestamp
2、别的表是否可以调用不是自己表的constraint约束? 没理解你的意思。字面上看,不能。。
3、多少还是有差异的。比如,modify模式,不能同时修改两个列,而add constraint可以,modify不能指定表空间,add模式可以等等。
4、索引是建立在列上,你的“适应”是个什么概念?
5、/ 表示执行的意思
6、没有必须。即使是单行处理,也可以弄个集合,然后用for等循环,不过,更麻烦了。
2、别的表是否可以调用不是自己表的constraint约束? 没理解你的意思。字面上看,不能。。
3、多少还是有差异的。比如,modify模式,不能同时修改两个列,而add constraint可以,modify不能指定表空间,add模式可以等等。
4、索引是建立在列上,你的“适应”是个什么概念?
5、/ 表示执行的意思
6、没有必须。即使是单行处理,也可以弄个集合,然后用for等循环,不过,更麻烦了。
#4
你好,感谢你的回答,关于第二点别的表是否可以调用不是自己表的constraint约束,意思就是当我用constraint命令对一个test1表建立了约束条件a1后,用已建立的a1约束是否可以对别的表test表进行同样约束呢?
关于第四点:适用的意思就是说 建立的东西是否只能使用在建立的索引所指定的单列或者列?
谢谢
关于第四点:适用的意思就是说 建立的东西是否只能使用在建立的索引所指定的单列或者列?
谢谢
#5
自己的小帖子帮忙顶下啊
#6
#7
2、有相关约束,比如主键和外键的关系
4、你在a列建索引,当然需要a列参与查询才能起作用。至于你查的内容嘛,可以不是索引列
4、你在a列建索引,当然需要a列参与查询才能起作用。至于你查的内容嘛,可以不是索引列
#1
oracle时间字段是datetime,相关操作可如下:
--oracle中时间相关的一些操作
Select sysdate from dual --取当前系统时间
Select to_char(sysdate , 'YYYY-MM-DD HH:MI:SS') from dual --取当前系统时间,转换为字符串
Select trunc(sysdate) from dual --取当前日期
Select trunc(sysdate , 'MM') from dual --取当前月的第一天
Select trunc(sysdate , 'YYYY') from dual --取当年的元旦
Select to_char(sysdate , 'ss') from dual --取当前时间秒部分
Select to_char(sysdate , 'mi') from dual --取当前时间分钟部分
Select to_char(sysdate , 'HH24') from dual --取当前时间小时部分
Select to_char(sysdate , 'DD') from dual --取当前时间日期部分
Select to_char(sysdate , 'MM') from dual --取当前时间月部分
Select to_char(sysdate , 'YYYY') from dual --取当前时间年部分
Select to_char(sysdate , 'w') from dual --取当前时间是一个月中的第几周(从1日开始算)
Select to_char(sysdate , 'ww') from dual --取当前时间是一年中的第几周(从1.1开始算)
Select to_char(sysdate , 'iw') from dual --取当前时间是一年中的第几周(按实际日历的)
Select to_char(sysdate , 'd') from dual --取当前时间是一周的第几天,从星期天开始,周六结束
Select to_char(sysdate , 'day') from dual --取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’
Select to_char(sysdate , 'ddd') from dual --当前日是一年中的第几天
Select Add_months(sysdate , 12) from dual --取一年后的今天
Select sysdate - (sysdate - 100) from dual --取两个日期之间的天数
Select (sysdate - (sysdate - 100)) * 1440 from dual --取两个日期之间的分钟数
Select (sysdate - (sysdate - 100)) * 1440 * 60 from dual --取两个日期之间的秒数
Select months_between(sysdate,sysdate - 100) from dual --取两个日期间隔的月份
Select trunc(months_between(sysdate,sysdate - 100)) from dual --取两个日期间隔的月份
Select trunc(last_day(sysdate)) from dual --取当前月的最后一天
Select next_day(sysdate , 1) from dual --取当前日之后第一个星期天,里面的’1’表示取星期日,如果今天正好是星期日,则会显示下一个星期日
1.显示当前时间
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_time from dual;
/*
CURRENT_TIME
-------------------
2007-09-29 09:29:03
1 row selected
*/
select current_date current_time from dual;
/*
CURRENT_TIME
----------------
2007-9-29 10:34:
1 row selected
*/
2.只显示日期,不显示时间
select to_char(sysdate,'yyyy-mm-dd') current_date from dual;
/*
CURRENT_DATE
------------
2007-09-29
1 row selected
*/
按时间分组求和
ID INPUT_DATE NUM
-- ------------------ ---
1 2007-9-29 9:52:53 10
2 2007-9-29 9:53:16 20
3 2007-9-29 9:53:32 30
4 2007-9-29 9:53:41 40
5 2007-9-29 9:53:52 50
6 2007-9-28 9:00:00 60
7 2007-9-28 9:01:00 70
8 2007-9-28 9:02:00 80
9 2007-9-28 10:00:00 90
1、对上述数据按日期求和,结果如下:
日期 NUM
---------- ----------
2007-09-28 300
2007-09-29 150
--sql语句
select to_char(input_date,'yyyy-mm-dd') 日期 , sum(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd')
--结果
/*
日期 NUM
---------- ----------
2007-09-28 300
2007-09-29 150
2 rows selected
*/
2、对数据按每天每小时求和,结果如下:
日期 NUM
------------- ----------
2007-09-28 09 210
2007-09-28 10 90
2007-09-29 09 150
--sql语句
select to_char(input_date,'yyyy-mm-dd hh24') 日期 , sum(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd hh24')
--结果
/*
日期 NUM
------------- ----------
2007-09-28 09 210
2007-09-28 10 90
2007-09-29 09 150
3 rows selected
*/
3.按日期取num最大值的记录
ID INPUT_DATE NUM
-- ---------- ---
9 2007-09-28 90
5 2007-09-29 50
--sql
select a.id , to_char(a.input_date,'yyyy-mm-dd') input_date,a.num from jh01 a,
(
select to_char(input_date,'yyyy-mm-dd') input_date, max(num) num
from jh01
group by to_char(input_date,'yyyy-mm-dd')
) b
where to_char(a.input_date,'yyyy-mm-dd') = b.input_date and a.num = b.num
/*
ID INPUT_DATE NUM
-- ---------- ---
9 2007-09-28 90
5 2007-09-29 50
2 rows selected
*/
#2
提示ORA-00984 错误是由于ORACLE没有SYSTIME,应该用SYSDATE。
DATE数据类型已包含了日期和时间。
DATE数据类型已包含了日期和时间。
#3
1、用sysdate 。date类型包括日期和事件,再详细的可以用timestamp
2、别的表是否可以调用不是自己表的constraint约束? 没理解你的意思。字面上看,不能。。
3、多少还是有差异的。比如,modify模式,不能同时修改两个列,而add constraint可以,modify不能指定表空间,add模式可以等等。
4、索引是建立在列上,你的“适应”是个什么概念?
5、/ 表示执行的意思
6、没有必须。即使是单行处理,也可以弄个集合,然后用for等循环,不过,更麻烦了。
2、别的表是否可以调用不是自己表的constraint约束? 没理解你的意思。字面上看,不能。。
3、多少还是有差异的。比如,modify模式,不能同时修改两个列,而add constraint可以,modify不能指定表空间,add模式可以等等。
4、索引是建立在列上,你的“适应”是个什么概念?
5、/ 表示执行的意思
6、没有必须。即使是单行处理,也可以弄个集合,然后用for等循环,不过,更麻烦了。
#4
你好,感谢你的回答,关于第二点别的表是否可以调用不是自己表的constraint约束,意思就是当我用constraint命令对一个test1表建立了约束条件a1后,用已建立的a1约束是否可以对别的表test表进行同样约束呢?
关于第四点:适用的意思就是说 建立的东西是否只能使用在建立的索引所指定的单列或者列?
谢谢
关于第四点:适用的意思就是说 建立的东西是否只能使用在建立的索引所指定的单列或者列?
谢谢
#5
自己的小帖子帮忙顶下啊
#6
#7
2、有相关约束,比如主键和外键的关系
4、你在a列建索引,当然需要a列参与查询才能起作用。至于你查的内容嘛,可以不是索引列
4、你在a列建索引,当然需要a列参与查询才能起作用。至于你查的内容嘛,可以不是索引列