??xml version="1.0" encoding="utf-8" standalone="yes"?>
select * from mytable where install_date > to_date('20050101','yyyymmdd');
取得当前日期是本月的W几?/p>
SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from
dual;
TO_CHAR(SYSDATE,'YY
-------------------
20030327 4
18:16:09
SQL> select to_char(sysdate,'W') from dual;
T
-
4
?:取得当前日期是一个星期中的第几天,注意星期日是W一?/p>
SQL> select sysdate,to_char(sysdate,'D') from dual;
SYSDATE T
--------- -
27-MAR-03 5
cM:
select to_char(sysdate,'yyyy') from dual; --q?
select
to_char(sysdate,'Q' from dual; --?
select
to_char(sysdate,'mm') from dual; --?
select
to_char(sysdate,'dd') from dual; --?
ddd q中的第几天
WW
q中的第几个星期
W 该月中第几个星期
DAY 周中的星期几
D 今天Ҏ的NUMBER
'1','星期?, '2','星期一',
'3','星期?, '4','星期?,
'5','星期?, '6','星期?, '7','星期?
hh 时(12)
hh24 时(24)
Mi ?
ss U?/p>
?:取当前日期是星期几中文显C?
SQL> select to_char(sysdate,'day') from dual;
TO_CHAR(SYSDATE,'DAY')
----------------------
星期?/p>
?:如果一个表在一个datecd的字D上面徏立了索引Q如何?/p>
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
?: 得到当前的日?br />
select sysdate from dual;
?: 得到当天凌晨0??U的日期
select trunc(sysdate) from dual;
-- 得到q天的最后一U?br /> select trunc(sysdate) + 0.99999 from dual;
-- 得到时的具体数?br /> select trunc(sysdate) + 1/24 from dual;
select trunc(sysdate) + 7/24 from dual;
?:得到明天凌晨0??U的日期
select trunc(sysdate+1) from dual;
select trunc(sysdate)+1 from dual;
?: 本月一日的日期
select trunc(sysdate,'mm') from dual;
?:得到下月一日的日期
select trunc(add_months(sysdate,1),'mm') from dual;
?0:q回当前月的最后一?
select last_day(sysdate) from dual;
select
last_day(trunc(sysdate)) from dual;
select trunc(last_day(sysdate)) from
dual;
select trunc(add_months(sysdate,1),'mm') - 1 from dual;
?1: 得到一q的每一?br />
select trunc(sysdate,'yyyy')+ rn -1
date0
from
(select rownum rn from all_objects
where rownum<366);
?2:今天是今q的WN?br />
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
?3:如何在给现有的日期加?q?br /> select add_months(sysdate,24) from dual;
?4:判断某一日子所在年分是否ؓ润年
select
decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','q_') from
dual;
?5:判断两年后是否ؓ润年
select
decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','q_')
from dual;
?6:得到日期的季?/p>
select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;
select to_char(sysdate, 'Q') from dual;
获取本周一,周日的日?/p>
select trunc(sysdate,'d')+1,trunc(sysdate,'d')+7 from dual;
http://www.douzhe.com/docs/bbsjh/8/3383.html q个帖子的讨论,整理如下Q?/p>
A、有一个比较麻烦但保证成功的方法?br /> 1、在本地创徏一个Access数据库,Excel数据先导入到Access。可直接导入点击鼠标右键Q选择导入Q文件类型选择要导入的Excel文gQ也可通过创徏宏用TransferSpreadsheet函数实现?br /> 2、在本地创徏ODBCQ链接oracle数据库。将oracle中需要导入数据的表以链接表的方式在本地Access中创建(千万不要使用导入表)?br /> 3、在Access数据库中创徏插入查询导入好的Excel数据导入到oracle中?
此方法保证成功?/p>
B、也可以导入sql server 用它的导出工具导入oracle 但对一些image字段支持不好Q你如果
没这U字D就行?/p>
用MS_sqlserver 提供的数据导出导入功能可以方便的把excel方便的导入oracle数据?/p>
C、一U方法:
先把Excel另存?csv格式文gQ如test.csvQ再~写一个insert.ctl
用sqlldrq行导入!
insert.ctl内容如下Q?br />
load data --1、控制文件标?br />
infile 'test.csv' --2、要输入的数据文件名为test.csv
append into table table_name --3、向表table_name中追加记?br />
fields terminated by ',' --4、字D늻止于','Q是一个逗号
(field1,
field2,
field3,
...
fieldn)-----定义列对应顺?
注意括号中field排列序要与csv文g中相对应
然后可以执行如下命令:
sqlldr user/password control=insert.ctl
有关SQLLDR的问?
控制文gQinput.ctlQ内容如下:
load data --1、控制文件标?br />
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记?br />
fields terminated by X'09' --4、字D늻止于X'09'Q是一个制表符QTABQ?br />
(id,username,password,sj) -----定义列对应顺?br />
其中append为数据装载方式,q有其他选项Q?br />
a、insertQؓ~省方式Q在数据装蝲开始时要求表ؓI?br />
b、appendQ在表中q加新记?br />
c、replaceQ删除旧记录Q替换成新装载的记录
d、truncateQ同?br />
问题QSQLLDR能不能保留表中原有的数据Q如果发现KEY重复Ӟ再UPDATE对应的记录?
D、先?EXCEL文g??成TXT文g
再用SQLLOADER
E、将EXCEL文g保存?.csv格式. 然后用sqlload来导入表?
sqlload是Oracle自带的数据倒入工具Q应该是没有可视化工LQ至我一直用命o行)?br /> 直接在命令行下敲入sqlldr卛_得到帮助?/p>
F、如果你的单个文件不大的情况?于100000?, 可以全选COPY ,然后用PL/SQL.:
select * from table for update. 然后打开? 再按一下加? 鼠标点到W一个空格然后粘? COMMIT卛_.(窍? ORACLE不支持的, 但很好用, 不会有问?
G、Golden的imp/exp工具可以直接导入文本文gQ非常简?/p>
下面q个不知道是针对以上哪种Ҏ的:
攑ֿQexcel文g最多只?5536条记?br />
不放心:曄如此DQ但当有中文字段时可能出现异常(PL/SQL DEV5Q?/p>
我用的是AQOKQ时间仓促,其他的没有试q?/p>
http://www.itpub.net/101803.html q个帖子如是_
你用的方法可能是:
1. 存成txt文g, 再用sql*loader
2. 存成txt文g, 再用W三方工?如pb, delphi, toad, pl/sql dev{?导入.
sql*loader用v来费? Z小的需? 装一个第三方工具ȝ.
看看我的Ҏ.
比如文g中有id, name两列(分别为A列和B?, 要导入的表ؓperson(person_id, person_name)
在excel 文g的sheet的最叛_, d一? 对应W一行数据的单元格写入以下内?
= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"
然后把这一行复制到所有数据行对应的列?
q一列的内容拯出去保存, x为可以直接在sql*plus下运行的脚本.
Ҏ一?日期?位不适用
A?font face="Courier New">把Excel文g导到Acess里,然后打开要导数据的表?br />
打开 PLSQL DEVQ打开一个SQLH口Q执?br />
select * from [tab] for update
然后一列一列的从Acess里copy & paste ?/font>
B、excel->copy->pl/sql developer>paste
实际操作时发玎ͼ使用 copy / paste l常会发生莫其妙的问题。尤其是通过 access ( ODBC) copy ?oracle 时?/p>
EXECL -->SAVE AS *.CSV(COMMA DELIMITED). THEN LOAD IT DIRECTLY.
CTL FILE EXAMPLE
------------
Load Data
INFILE 'E:\AA.csv'
TRUNCATE
INTO TABLE AA
FIELDS TERMINATED BY ','
(A,
B)
C、在ACCESS中将ORACLE TABLE 映射Q然后直接插入即可。很方便Q也没发现有数据错误问题?br /> 曄有一个很ȝ的LONG RAW问题Q用q个办法也解决了
D?font face="verdana, arial, helvetica" size="2">用SQL*XL可以直接将EXCEL文g导入ORACLEQ很方便的,我一直用SQL*XL?/font>
E?strong>我常用的办法是从excel中copy到ultraEdit中,然后用列~辑功能加上insert into ....{等Q也挺好?/strong>
F?/strong>用plsql developer,很好用的,直接copy可以了
在pl/sql developer 中选择表的多个字段名,然后可以paste ?/p>
G、用odbc加pb的数据管道可以在不同的数据库Q文本)之间传输数据
H、odbc+pb
用不同的odbc驱动E序q接不通的数据?br /> 然后在pb环境中启动数据管道,利用数据道传输数据
I、先倒成。DBF的文Ӟ再用DELPHI DATABASE DESKTOP 导入ORACLE很方便的Q也且也可以支持I值导入?/font>
帖子很长Q有I再整理?/font>
主要是因为有事务正在执行Q或者事务已l被锁)Q所有导致执行不成功?/p>
1、用dba权限的用h看数据库都有哪些?/strong>
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
如:testuser 339 13545 2009-3-5 17:40:05
知道被锁的用户testuserQsid?39Qserial#?3545
2、根据sid查看具体?a onclick="javascript:tagshow(event, 'sql');" href="javascript:;" target="_self">sql语句Q如果sql不重要,可以kill
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
查出来的sqlQ如Q?begin :id := sys.dbms_transaction.local_transaction_id; end;
3、kill该事?/strong>
alter system kill session '339,13545';
4、这样就可以执行其他的事务sql语句?/strong>
如增加表的主键:
alter table test
add constraint PK_test primary key (test_NO)Q?/p>
SQL> COL name format a50; SQL> SELECT name, isspecified FROM v$obsolete_parameter; |
SELECT kspponm, DECODE(ksppoflg, 1,'Obsolete', 2, 'Underscored') FROM x$ksppo ORDER BY kspponm; |
SELECT ksppinm, ksppstvl, ksppdesc FROM x$ksppi x, x$ksppcv y WHERE x.indx = y.indx AND translate(ksppinm,'_','#') like '#%'; |
SET pagesize 9000 SET head OFF SET term OFF SELECT DECODE(isdefault, 'TRUE', '# ') || DECODE(isdefault, 'TRUE', RPAD(name,43), RPAD(name,45)) || ' = ' || value FROM v$parameter ORDER BY name; |
初始化相兛_数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大g能超q?000 ;job_queue_interval = 10 //调度作业h频率Uؓ单位
DBA_JOBS describes all jobs in the database.
USER_JOBS describes all jobs owned by the current user
1 select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
2 select job,what,last_date,next_date,interval from dba_jobs where job in (1,3);
查询job的情c?br />
show paramter background_dump_dest.
看alter.log 和trace
SVRMGR> select * from dba_jobs;
初始化相兛_数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大g能超q?000
job_queue_interval = 10 //调度作业h频率Uؓ单位
DBA_JOBS describes all jobs in the database.
USER_JOBS describes all jobs owned by the current user
1 select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
2 select job,what,last_date,next_date,interval from dba_jobs where job in (1,3);
查询job的情c?br />
show paramter background_dump_dest.
看alter.log 和trace
请问我如何停止一个JOB
SQL> exec dbms_job.broken(1,true)
PL/SQL q程已成功完成?br /> SQL>commit //必须提交否则无效
启动作业
SQL> exec dbms_job.broken(1,false)
PL/SQL q程已成功完成?/p>
停其他用Ljob
SQL>exec sys.dbms_ijob.broken(98,true);
SQL>commit;
============================
exec dbms_job.broken(:job) 停止
exec dbms_job.broken(186,true) //标记位broken
exec dbms_job.broken(186,false)//标记为非broken
exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行旉
exec dbms_job.remove(:job)Q删?br />
exec dbms_job.remove(186);
commitQ?/p>
把一个broken job重新q行
三、查看相关job信息
1、相兌?br />
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在q行job相关信息
创徏JOB
variable jobno number;
begin
dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
commit;
end;
print jobno
例如Q我们已l徏立了一个存储过E,其名UCؓmy_jobQ在sql/plus中以scott用户w䆾dQ执行如下命令:
sql> variable n number;
sql> begin
dbms_job.submit(:n‘my_job;’,sysdate,
‘sysdateQ?/360’);
commit;
end;
Sql> print :n;
pȝ提示执行成功?
Sql> print :n;
pȝ打印此Q务的~号Q例如结果ؓ300?
单例?br /> 一个简单例子:
创徏试?br /> SQL> create table TEST(a date);
表已创徏?/p>
创徏一个自定义q程
SQL> create or replace procedure MYPROC as
2 begin
3 insert into TEST values(sysdate);
4 end;
5 /
q程已创建?/p>
创徏JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440'); --每天1440分钟Q即一分钟q行testq程一?br />
3 end;
4 /
PL/SQL q程已成功完成?/p>
q行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL q程已成功完成?/p>
SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 旉 from TEST;
旉
-------------------
2001/01/07 23:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24
删除JOB
SQL> begin
2 dbms_job.remove(:job1);
3 end;
4 /
PL/SQL q程已成功完成?/p>
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?/p>
a、利用dbms_job.run()立即执行该job
sql>begin
sql>dbms_job.run(:jobno) 该jobno为submitq程提交时返回的job number
sql>end;
sql>/
b、利用dbms_job.broken()重新broken标记为false
sql>begin
sql>dbms_job.broken (:job,false,next_date)
sql>end;
sql>/
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=
SQL> create table a(a date);
Table created
创徏一个过E?br />
SQL> create or replace procedure test as
2 begin
3 insert into a values(sysdate);
4 end;
5 /
Procedure created
提交作业
SQL> declare
2 job1 number; //定义一个数字型变量
3 begin
4 dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'); //按分钟算一?440分钟
5 end;
6 /
PL/SQL procedure successfully completed
job1
---------
4
SQL> commit;
Commit complete
q行作业
SQL> begin
2 dbms_job.run(4);
3 end;
4 /
PL/SQL procedure successfully completed
删除作业
SQL> begin
2 dbms_job.remove(4);
3 end;
4 /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
job change//修改作业
execute dbms_job.change(186,null,null,'sysdate+3');
execute dbms_job.change(186,'scott.test(update)');
DBA_JOBS
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?br />
字段Q列Q?nbsp; cd 描述
JOB NUMBER d的唯一标示?
LOG_USER VARCHAR2(30) 提交d的用?
PRIV_USER VARCHAR2(30) 赋予d权限的用?
SCHEMA_USER VARCHAR2(30) 对Q务作语法分析的用h?
LAST_DATE DATE 最后一ơ成功运行Q务的旉
LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小Ӟ分钟和秒
THIS_DATE DATE 正在q行d的开始时_如果没有q行d则ؓnull
THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小Ӟ分钟和秒
NEXT_DATE DATE 下一ơ定时运行Q务的旉
NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小Ӟ分钟和秒
TOTAL_TIME NUMBER 该Q务运行所需要的L_单位为秒
BROKEN VARCHAR2(1) 标志参数QY标示d中断Q以后不会运?
INTERVAL VARCHAR2(200) 用于计算下一q行旉的表辑ּ
FAILURES NUMBER dq行q箋没有成功的次?
WHAT VARCHAR2(2000) 执行d的PL/SQL?
CURRENT_SESSION_LABEL RAW MLSLABEL 该Q务的信QOracle会话W?
CLEARANCE_HI RAW MLSLABEL 该Q务可信Q的Oracle最大间?
CLEARANCE_LO RAW MLSLABEL 该Q务可信Q的Oracle最间?
NLS_ENV VARCHAR2(2000) dq行的NLS会话讄
MISC_ENV RAW(32) dq行的其他一些会话参?
描述 INTERVAL参数?
每天午夜12?nbsp; 'TRUNC(SYSDATE + 1)'
每天早上8?0?nbsp; 'TRUNC(SYSDATE + 1) + Q?*60+30Q?(24*60)'
每星期二中午12?nbsp; 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12?nbsp; 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11?'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6?0?nbsp; 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + Q?×60+10Q?Q?4×60Q?
Oracle9i 中job_queue_interval已经废弃Qobsoleted)Qjob_queue_processes=10默认Q实际上Qjob_queue_interval的gؓ5Q假如实在要修改interval的|可以使用_job_queue_interval的隐藏参数?br />
但对于char 和varchar2cd的数据库字段中的null和空字符串是否有区别呢?
作一个测试:
create table test (a char(5),b char(5));
SQL> insert into test(a,b) values('1','1');
SQL> insert into test(a,b) values('2','2');
SQL> insert into test(a,b) values('3','');--按照上面的解释,b字段有值的
SQL> insert into test(a) values('4');
SQL> select * from test;
A B
---------- ----------
1 1
2 2
3
4
SQL> select * from test where b='';----按照上面的解释,应该有一条记录,但实际上没有记录
未选定?/p>
SQL> select * from test where b is null;----按照上面的解释,应该有一跌录,但实际上有两条记录?/p>
A B
---------- ----------
3
4
SQL>update table test set b='' where a='2';
SQL> select * from test where b='';
未选定?/p>
SQL> select * from test where b is null;
A B
---------- ----------
2
3
4
试l果说明Q对char和varchar2字段来说Q?'是nullQ但对于where 条g后的'' 不是null?/p>
对于~省|也是一LQ?br />
http://yseraphi.itpub.net/post/720/114646