鿴 trigger
SQL> select object_name from user_objects where object_type='TRIGGER';
鿴 index
SQL> select object_name from user_objects where object_type='INDEX';
鿴  table
SQL> select object_name from user_objects where object_type='TABLE';

ݰ:
    1.oracle

    2.SQLServer

    3.ݿӷ

************************oracle*************
ʼ----cmdsqlplus س 
ʾȷû  
ע⣺ûĬϵ sys,system㰲װ룬ȷû뼴ɽ档 
ߣ
sqlplus /nolog
conn sys/sys as sysdba; 
2 DOS޸  
ʱDOS  
alter user system identified by ;  
޸ϵͳΪ
root  alter user system identified by root;  

./sqlplus ûuser@ORACLE_SID Ȼ

򿪷
net start OracleServiceORCL
򿪼
lsnrctl start
رշ
net stop OracleServiceORCL
رռ
lsnrctl stop


clear screen

ֵ ===========desc user_views(ؼ)

鿴ǰûĽɫ
SQL>select * from user_role_privs;

鿴ǰûϵͳȨ޺ͱȨ
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;

鿴ǰûȱʡռ
SQL>select username,default_tablespace from user_users;

û
conn as sysdba
sys
tsinghua 18:10 2009-7-11
sqlplus "sys/tsinghua as sysdba"
conn sys/zl as sysdba

޸ıṹ
alter table test modify(name not null);
alter table test add(name varchar2(20));
alter table test drop column sex;
alter table test set unused column sex;
alter table test drop unused columns;

û
sql>alter user Ա identified by 룻

ռļ
sql>create tablespace test datafile 'd:\oracle\binbo.dbf' size 10m;

û
sql>create user û identified by ;

bfileʵ
Ŀ¼
create directory tnpdir as 'c:\';
ɾĿ¼
drop directory tnpdir
Ȩ
grant read on directory tn pdir to scott;

create table bfiletest(id number(3), fname bfile);

insert into bfiletest values(1,bfilename('TMPDIR','tmptest.java'));

鿴û
sql>show user

Ƿд
show error

û
sql>alter user û account lock

û
sql>alter user û account unlock

ɾû
sql>drop user zl cascade;
cascade ɾûбͼ
ʺЩУ
SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='USERNAME';ע⣺˴USERNAMEҪд
ɾụ̂
ALTER  SYSTEM  KILL SESSION '137,41813';

create sessionȨ
SQL> grant create session to czjgbs;

ûȨ
sql>grant create table to û;
SQL> grant create view to û 
SQL> grant create procedure to û;
SQL> grant create sequence to û;

ڹԱȨ
sql>grant dba to û;

û¼Ȩ
sql>grant connect to û

ûޱռȨ
sql>grant unlimited tablespace to û;

grant resource to û
GRANT debug any procedure, debug connect session to username;
ջȨ
sql>revoke dba from û;

鿴ûеı
            SQL>select * from user_tables;

鿴ưlogַı
            SQL>select object_name,object_id from user_objects
                where instr(object_name,'LOG')>0;

鿴ĳĴʱ
            SQL>select object_name,created from user_objects where object_name=upper('&table_name');

鿴ĳĴС
            SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                where segment_name=upper('&table_name');

鿴ORACLEڴı
            SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;


һռļ
sql>alter tablespace test add datafile 'd:\oracle\test1.dbf' size 10m;

    SQL>create table studen(stuno int,stuname varchar(8) not null,stubirth date default to_date('1987-5-9','YYYY-MM-DD'));
ṹмһ  SQL>alter table studen add(stuphoto varchar(9));
ӱṹɾһ  SQL>alter table studen drop column stuphoto;
޸ıһеĳ    SQL>alter table studen modify(stuno number(4));
ؽҪɾһ  SQL>alter table studen set unused column stuphoto;
ɾص        SQL>alter table studen drop unused columns;
мԼ      SQL>alter table studen add constraint pk primary key(stuno);
ɾԼ            SQL>alter table studen drop constraint pk;


sql>create table (name varchar2(20),password varchar(20)) tablespace ռ;

ֶ
sql>alter table test add(column_x char(10) not null);

ֶ
sql>alter table emp modify(column_x char (20));

ɾֶ
	ɾĳɾ뽫ΪNULL
sql>alter table emp modify(column_x null);
sql>update emp set column_x=null;
sql>commit;
sql>alter table emp drop(column_x);

ѡռ
sql>alter user û default tablespace test;

Աɾûеı
sql>drop table û.;

˳
sql>exit;

ĬϽ
sql>sqlplus "/ as sysdba"

鿴ݿ
sql>show parameter block;

дü±½ʽ
"ed"س

"/";

ѯûжٱ
sql>select * from tab;

SQLServerȡʱ
sql>select getdate
oracle ȡʱ
sql>sysdate;

ñid
create sequence idh start with 1 increment by 1;
Ҫֶ룬ʾ(idh)
insert into department values(idh.nestval,'ҵ','frank','13589654587');
ҪԶ룬һ


Ҳ
create table department(id int primary key not null,dep_name varchar2(50),dep_manager varchar2(50),dep_telphone varchar2(13));

ṹݿⶨ
(¼־ļ)
create table
sql>create table test(name varchar2(20),age date,sex char(2));
sql>insert into test(name,age,sex) values('aa',sysdate,'');
sql>insert into test(name,age,sex) values('bb',to_date('1888-8-8',"yyyy-aa-dd hh24:mi:ss"),'');
sql>select * from test;

ѯкŮ
sql>select sex,count(sex) from test group by sex;
---------------------------------------------------------------
testtest1
SQLSserver---select * into test1 from test;
oracle---create table test1 as select * from test;
---------------------------------------------------------------
ĻỰʱ
sql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
---------------------------------------------------------------
sql>show parameter block ͼ
sql>show parameter date ݽṹ
---------------------------------------------------------------
SQLServer
--ɾͬ
sql>create table test1 as select distinct * from test;
--ɾ
sql>truncate table test;
--test뵽test1
sql>insert into test(select * from test1);
---------------------------------------------------------------
rowid(д洢ַ൱id)rownum()α(÷)
sql>select name,age,sex,rowid,rownum from test1;
ǰ
sql>select * from test where rownum<=3;

sql>select * from (select name n,age a,sex s,rownum r from test) where r>(select count(*) from test)-3;
ɾ
SQL> delete from test where name not in(select name from test where rownum<=(select count(*) from test)-3);
ɾͬ
sql>delete from test where rowid not in(select max(rowid) from test group by name,age,sex);
ɾб
sql>select  'drop table' ||tname|| ':' from tab;
sql>spool c:\test.sql;
sql>select  'drop table' ||tname|| ':' from tab;
sql>spool off
sql>@c:\test.sql;
---------------------------------------------------------------
alter table޸ı
truncate tableڶα(ֻɾ)
drop tableɾ

鿴ṹ
desc ;

ɼǰ
sql>select * from (select * from stu order by score desc) where rownum<=3;

ַ
SQL>startup mount
SQL>alter system enable restricted session;
SQL>alter system set job_queue_processes=0;
SQL>alter database open;
SQL>alter database character set ZHS16GBK;
SQL>shutdown
SQL>startup

һűűеϺ±
ٶԭȵűΪemp,workѡ񲿷ϲΪemp_work
emp_work
SQL>insert into emp_new select a.no, sysdate, a.name, b.service_duration from emp a, work b where a.no=b.no;
SQL>commit;
ķʽȻҪʹûعΣΪӿǨٶȣɽinsert滻insert /*+APPEND*/Сдָۣʾoracleֱͨʽֱдļƹعռ䡣
SQL>insert /*+APPEND*/ into emp_new select a.no, sysdate, a.name, b.service_duration from emp a, work b where a.no=b.no;
SQL>commit;

DDLݶ(create,alter,drop)
DMLݲ(insert,select,delete,update)
TCL(commit,savepoint,rollback)
DCLݿ(GRANT  REVOKE)


һеĳһ䵽һ
insert into stu1(name)(select name from stu);


rollback;
insert into stu1(name)(select name from stu);
commit;ύ

COMMIT - ύ
ROLLBACK -  ɵĹ
SAVEPOINT C пԻعĵ
SQL>  update order_master set del_date ='30-8-05' WHERE orderno <= 'o002';
	
SQL>  savepoint mark1;
SQL>  delete FROM order_master WHERE orderno = 'o002';
SQL>  savepoint mark2;
SQL>  rollback TO SAVEPOINT mark1;
SQL>  COMMIT;


set sqlprompt "scott>";

GRANT Ȩ
SQL> GRANT SELECT ON  TO û WITH GRANT OPTION;
REVOKE Ȩ
SQL> REVOKE SELECT, UPDATE ON order_master FROM MARTIN;

Ƚϲ 
SQL> SELECT vencode,venname,tel_no 
     FROM vendor_master 
     WHERE venname LIKE 'j___s';
SQL> SELECT orderno FROM order_master 
     WHERE del_date IN (06-1-05,05-2-05');
SQL> SELECT itemdesc, re_level
     FROM  itemfile
     WHERE qty_hand < max_level/2;

߼
SQL> SELECT * FROM order_master 
     WHERE odate > 10-5-05' 
     AND del_date < 26-5-05;

ϲѯĽϳһ
SQL> SELECT orderno FROM order_master 
     MINUS
     SELECT orderno FROM order_detail;
-----------------------------------------------------------------
select * from scott.stu
union (all)ظȥ[intersectͬȡ][minusʾͬ]
select * from stu
-----------------------------------------------------------------
ʾͬ
select name from stu intersect select name from stu1;

Ӳ
Ӳڽֵַϲһַ
SQL> SELECT (venname|| ' ĵַ '
     ||venadd1||' '||venadd2 ||' '||venadd3) address
     FROM vendor_master WHERE vencode='V001';

ȼ
SQL ȼӸߵ͵˳ǣ
           --------ȼ
Ӳ
Ƚϲ
NOT ߼
AND ߼
OR   ߼   --------ȼ 


תֵĺ
NVL
NVL2
NULLIF
SELECT itemdesc, NVL(re_level,0) FROM itemfile;
SELECT itemdesc, NVL2(re_level,re_level,max_level) FROM itemfile;
SELECT itemdesc, NULLIF(re_level,max_level) FROM itemfile;

GROUP BYHAVINGӾ

GROUP BYӾ
ڽϢΪС
ÿһзԸĵ

HAVINGӾ
ָ GROUP BY Ӿе

SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category;
SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category HAVING p_category NOT IN ('accessories');

ROW_NUMBER (row_number)λֵǷ
RANK(rank) ֵλͬԾ
DENSE_RANK(dense_rank) ֵλͬ
SELECT d.dname, e.ename, e.sal, DENSE_RANK()
  OVER (PARTITION BY e.deptno ORDER BY e.sal DESC)
  AS DENRANK
FROM emp e, dept d WHERE e.deptno = d.deptno;

ں
ADD_MONTHS(ǰֻ)
alter session set nls_date_format='yyyymmdd hh24miss';
select add_months(sysdate,2) from dual;
----------------------------------------------------------------
MONTHS_BETWEEN(ǰʱʱ=֮²)
select months_between(sysdate,to_date('2007-6-10','yyyy-mm-dd')) from dual;
----------------------------------------------------------------
LAST_DAY(õǰµһ)
select last_day(sysdate) from dual;
----------------------------------------------------------------
ROUND(round---->)
select round(2.3) from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'year') from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'month') from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'day') from dual;
----------------------------------------------------------------
NEXT_DAY(һڵڶ
select next_day(to_date('2007-6-10','yyyy-mm-dd'),'ڶ') from dual;
----------------------------------------------------------------
TRUNC(trunc)
----------------------------------------------------------------
EXTRACT(extract)
select extract(year from date '1998-03-07') from dual;
select extract(month from to_date ('1998-03-07','yyyy-mm-dd')) from dual;

----------------------------------------------------------------
20082ж
inbo---->select extract(day from last_day(to_date ('2008-02-07','yyyy-mm-dd'))) from dual;
----------------------------------------------------------------
2003-4-31956-3-1֮ж
inbo---->select round(months_between(to_date('2003-4-3','yyyy-mm-dd'),to_date('1956-3-1','yyyy-mm-dd'))/12) from dual;

ߵ9ȥ
select trim('9' from '9999ddddddd99999') from dual;
ȥո
select trim(' ' from '     9999ddddddd99999') from dual;

                                                
Initcap(char) 	          Select initcap(hello) from dual;	                Hello 
Lower(char) 	          Select lower(FUN) from dual;	                fun 
Upper(char)               Select upper(sun) from dual;	                SUN 
Ltrim(char,set) 	  Select ltrim( xyzadams,xyz) from dual;        adams
Rtrim(char,set) 	  Select rtrim(xyzadams,ams) from dual; 	xyzad 
Translate(char, from, to) Select translate(jack,j ,b) from dual;	back 
Replace(char,searchstring,[rep string])   Select replace(jack and jue ,j,bl) from dual;	black and blue 
Instr (char, m, n) 	  Select instr (worldwide,d) from dual; 	 5 
Substr (char, m, n) 	  Select substr(abcdefg,3,2) from dual; 	        cd 
Concat (expr1, expr2)	  Select concat (Hello, world) from dual; 	Hello world


ֺ벢ֵ

   	   	  
Abs(n) 	        Select abs(-15) from dual; 	15

Ceil(n) 	Select ceil(44.778) from dual; 	45

Cos(n) 	        Select cos(180) from dual; 	-.5984601 

Cosh(n) 	Select cosh(0) from dual; 	1

Floor(n) 	Select floor(100.2) from dual; 	100

Power(m,n) 	Select power(4,2) from dual; 	16 

Mod(m,n) 	Select mod(10,3) from dual; 	1

Round(m,n) 	Select round(100.256,2) from dual; 	100.26 

Trunc(m,n) 	Select trunc(100.256,2) from dual; 	100.25 

Sqrt(n) 	Select sqrt(4) from dual; 	2 

Sign(n)	        Select sign(-30) from dual;	          -1


ַ 
鿴жٸַ
SQL> SELECT LENGTH('frances') FROM dual;
-----------------------------------------------------------------
SQL> SELECT vencode, 
     DECODE(venname,'frances','Francis') name 
     FROM vendor_master WHERE vencode='v001';
-----------------------------------------------------------------
Ƿ ֶdecodeǷ
select name,decode(name,'rbb','') from stu;

====

select dense_rank() over(partition by sex order by score) from test;
select row_number() over(order by score),name,sex,score from test;
select rank() over(order by score) from test;
select dense_rank() over(order by score) from test;
===========

ͬ
SQL> create public synonym test for rbb.test;
SQL> create synonym test for mytest;
ͬһĲſ滻,ͬ滻ͬ
滻
SQL> create or replace synonym emp_sysn for scott.emp;



SQL>create sequence xule increment by 1 start with 1 maxvalue 999;
increment by  ֵ
start with    ʼֵ
maxvalue ֵ
minvalue Сֵ
nocycle ѭ
chare 10
xule.nextval  ===========һеֵ
xule.currval  ===========Բѯеǰֵ
 start with ܸ
alter sequence xule maxvalue 100 [sycle nocycle]

÷
SQL>create table xl(name varchar2(4));
SQL>insert into test values(xule.nextval);
SQL>select xl.currval from dual;

ɾ
drop sequence x;
desc user_sequences

ͼ   ͼпʹúͱʽ
create or replace view 

ͼ
SQL> create or replace view ͼ as select * from rbb union all select * from rbbb union all select * from test;
SQL> create or replace view ͼ as
  2  select empno as ,ename as  from scott.emp
  3  where deptno=10;
===========
ڵǰûûͼʹͼ
дͼ͸Ǵͼ
create or replace view view_name as select empno,ename from emp where deptno=10;

ڴͼǰҪΪǰûȨ
grant resource to scott;
create or replace view v_sal as select ename,sal from emp order by sal desc;

ʹͼ 
select * from v_sal;

ɾһͼ
drop view view_name;

±еͼ
alter view view_name compile;

ֵ ===========desc user_views


õת
TO_CHAR
SELECT TO_CHAR(sysdate,'YYYY""fmMM""fmDD"" HH24:MI:SS') FROM dual;

TO_DATE
SELECT TO_DATE('2005-12-06', 'yyyy-mm-dd') FROM dual;

TO_NUMBER
SELECT TO_NUMBER('100') FROM dual;

ϲ
union all  ߶Ϊһͼ
MINUS شӵһѯųڶѯгֵС
INTERSECT ֻѯĹС


ŵ

1.һ - һֻһû޸

2. - Ϊûṩȷݡһû޸Ĳ棬޸Ľӳû

3. ûͬһ

мͱ

м:һ,ֹ޸Ĵ.

ύ(commit),(rollback)
---------------------------------------------------------------
±:update test set score=80 where name='xiaoli';
--------------------------------------------------------------
Զύ
set autocommit on
set sutocommit off
------------------------------------------------------------
ĳи
select * from scott.test where name='xiaoli' for update;
SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE OF odate,del_date;
select * from scott.test where name='xiaoli' for update of score;

select * from scott.test atest,test b where a.name=b.name and b.name='bbb' for update of b.score; 
--------------------------------------------------------------------
ȴupdate
select * from scott.test where name='xiaoli' for update wait 2;
select * from scott.test where name='xiaoli' for update nowait;

-------------------------------------------------------------------

﷨:lock table  in mode mode;
-------------------------------------------------------------------------
йrow share--row exclusive--share-share row exclusive-----exclusive
---------------------------------------------------------------------------------
й(row share):lock table scott.test in (row share) mode;
[û.й---û.---û.----û.----û.()]

--------------------------------------------------------------------------------
(row exclusive):lock table scott.test in (row exclusive) mode;

[û.й----û.----û.()---û.()--û.()]

---------------------------------------------------------------------------------
(share):lock table scott.test in (share) mode;

[û.й---û.()---û.----û.()---û.()]

-----------------------------------------------------------------------------------
(share row exclusive):lock table scott.test in (share row exclusive) mode;

[û.й,û.(),û.(),û.(),û.()]

--------------------------------------------------------------------------------------
(exclusive):lock table scott.test in (exclusive) mode;

[û.(й),û.(),û.(),û.(,)û.()]

----------------------------------------------------------------------------------


໥ȴԷͷԴʱͻγ

OracleԶͨеһ
----------------------------------------------------------------------------------



---Χ
create table test(name varchar2(20),sex char(2),score number(3))
partition by range(score)
(
partition p1 values less than (50) tablespace users,
partition p2 values less than (80),
partitiom p3 values less than (maxvalue)
)
select * from test partition(p1) union select * from test partitiom(p3);
---
ɾ
alter table test drop partition p3;
ӷ
alter table test add partition p3 values less than (maxvalue);
ַ
alter table test split partition p2 at(60) 
into (partition p21,partition p22);
ϲ
alter table test merge partitions p21,p22 into partition p2;
ضϷ(ɾ)
alter table test truncate partition p3;

б
create table str as select * from student;
drop table student;
create table student(
	studentid integer not null,
	studentname varchar2(20),
	score integer
)
partition by range(score)(
	partition p1 values less than(60),
	partition p2 values less than(75),
	partition p3 values less than(85),
	partition p4 values less than(maxvalue)
)
insert into student(select * from stu);


select * from test scott.emp@tsinghua

 


OracleûԱһĹ滯Աһֳ֣ɸ߼֣ÿֳΪ
ŵ㣺ǿԣֹϣӰ
I/Oͬķӳ䵽ͬĴ   

ٷΧ
create table st(
	studentid integer not null,
	studentname varchar2(20),
	score integer
)
partition by range(score)(
	partition p1 values less than(60),
	partition p2 values less than(75),
	partition p3 values less than(85),
	partition p4 values less than(maxvalue)
)
========================select * from stu partition(p1)============
ɢз
create table st(deptno int,deptname varchar(14))
partition by hash(deptno)(
partition p1,partition p2
)
Ϸ
alter table test coalesce partition;

۸Ϸ
Χб
create table salgrade(
grade number(2),losal number(2),hisal number(2)
)
partition by range(grade)
subpartition by list(losal)
(
partition p1 values less than(10)

  (
   subpartition p1a values(''),
   subpartition p1b values(default)
  ),
partition p2 values less than(20)
  (
   subpartition p1a values(''),
   subpartition p1b values(default)
  ),
partition p3 values less than(30)
  (
   subpartition p1a values('Ϻ'),
   subpartition p1b values(default)
  )
)

Χɢз
create table salgrade(
grade number(2),losal number(2),hisal number(2)
)
partition by range(grade)
subpartition by hash(losal)
[subpartitions 5]
(
partition p1 values less than(10)(subpartition p1a,subpartition p1b),
partition p2 values less than(20)(subpartition p2a,subpartition p2b),
partition p3 values less than(30)(subpartition p3a,subpartition p3b)
)
--------------------------------------------
 create table salg(
 grade number(2),losal number(2),hisal number(2)
 )
 partition by range(grade)
 subpartition by hash(losal)
 subpartitions 3
 (
 partition p1 values less than(10),
 partition p2 values less than(20),
 partition p3 values less than(30)
 )

б
create table test stu(id int,name varchar(20),add varchar(8))
partition by list(add)
(
partition p1 values('й'),
partition p2 values('Ӣ'),
partition p3 values(default)
)

ƶ

alter table test move partition p5 tablespace users;


޸Ĵ浵

SQL> shutdown immediate
ݿѾرա
Ѿжݿ⡣
ORACLE Ѿرա

SQL> startup mount
ORACLE Ѿ

Total System Global Area  135338868 bytes                                       
Fixed Size                   453492 bytes                                       
Variable Size             109051904 bytes                                       
Database Buffers           25165824 bytes                                       
Redo Buffers                 667648 bytes                                       
ݿװϡ

SQL> alter database archivelog;

ݿѸġ
alter database open;

SQL> archive log list;
ݿ־ģʽ            浵ģʽ
Զ浵             
浵յ            d:\oracle\ora92\RDBMS
ĸҪ־     1
һ浵־   2
ǰ־           2

SQL> alter system set log_archive_dest=true scope=spfile;

ϵͳѸġ

SQL> alter database open;

ݿѸġ

SQL> spool off

PL/SSQL(̻)  ִ䲿 쳣

identifier constant datatype not null
[:=|default expr];



declare 
my number(5);
begin
 select quantity into my
from products where product='wawa'
for update of quantity;
if my>0 then
update products set quantity=quantity+1
where product='wawa';
insert into purchase_record
values('wawawa',sysdate);
end if;
commit;
Exception
where others then
dbms_output.put_line('chucuo'||SQLERRM);
END;

declare icode varchar2(6)
p_catg varchar2(20);
c_catg constant datatype:=0.10


number
  decrmdl
  int/integer
  real(ʵ)
  binary_integer(ŵ)
  pls_integer(ͬ)
ַ
character 
  char 3276
  Raw(2000)
  long/long Raw(32760)
  Rowid/rowid()
  varchar2 (string(nchar/nvarchar)/varchar)
ʱ
date
  timeStamp(̶dd-mm-yy 6λ)
   timestamp with time zone
  ti timestamp(9)

boolean
  true
  false
  null
ӡʱ
declare
test_tz timestamp with time zone;
begin test_tz:=to_timestamp_tz('2006-6-22 09:07:11','yyyy-mm-dd hh24:mi:ss');
dbms_output.put_line(test_tz);
end;


lob
  BFILE
  BLOB
  CLOB
  NCLOB

  %type  %rowtype

bfileʵ
Ŀ¼
create directory tnpdir as 'c:\';
ɾĿ¼
drop directory tnpdir
Ȩ
crant read on directory tnpdir to scott;

create table bfiletest(id number(3), fname bfile);

insert into bfiletest values(1,bfilename('TMPDIR','tmptest.java'));


ݿͼƬ
create directory images as 'c:\images';
crant read on directory images to scott;
create table my_diagrams(
chapter_descr varchar2(40);
diagram_no integer,
diagram blob
);

declare
  l_bfile bfile;
  l_blob blob;
begin
 insert into my_diagrams(diagram)
 values(emptv_blob())
 return diagram into l_blob;
 l_bfile:=bfilename('images','\nvimage.jpg');
 dbms_lob.open(l_bfile,dbms_lob.file_readonly);
 dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob,getlength(l_bfile));
 dbms_lob.close(l_bfile);
 commit;
end;


%typeʵ ѯ
declare 
dtr dept.dname%type;
begin
select dname into str from dept where deptno=30;
dbms_output.put_line(str);
end;
set serverout on


%rowtypeʵ

declare
row dept%rowtype;
begin
select * into row from dept where deptno=30;
dbms_output.put.line(row.dname||' '||row.deptno||' '||row.loc);
//쳣
exception
when no_data_found then
 dbms_output.put_lin('û');
when too_many_rows(others) then
 dbms_output.put_lin('̫');
end;


ʽ

if  then

elsif  then

else

end if

ʽ

begin
 case'&grade'
  when 'a' then dbms_output.put_line('');
  when 'b' then dbms_output.put_line('');
  else dbms_output.put_line('')
 end case;
end;


var vnm varchar2(20);
begin
:v:='aaaaa';
end;
ӡ
print v

loopʵ

begin
loop
exit when 3>4;

end loop;
end;

whileʵ
begin
while ()condition loop
;
end loop;
end;

ѭʵ

begin
for c in 1..10
loop
dbms_output.put_line(c);
end loop
end;

begin
for c in reverse() 1..10
loop
dbms_output.put_line(c);
end loop
end;


declare
 num number(3):=1;
begin
 while num<10 loop
  dbms_output.put_line(num);
  num:=num+1;
  end loop;
end;

declare
 num number(3):=1;
begin
 loop
  dbms_output.put_line(num);
  exit when num>10;//˳
  num:=num+1;
  end loop;
end;

gotoʵ
DECLARE
  qtyhand itemfile.qty_hand%type;
  relevel itemfile.re_level%type;
BEGIN
  SELECT qty_hand,re_level INTO qtyhand,relevel
  FROM itemfile WHERE itemcode = 'i201';
  IF qtyhand < relevel THEN
    GOTO updation;
  ELSE
    GOTO quit;
  END IF;
  <<updation>>
  UPDATE itemfile SET qty_hand = qty_hand + re_level
  WHERE itemcode = 'i201';
  <<quit>>
  NULL;
END;

̬SQL ѯ
declare
cl varchar2(20);
va varchar2(20);
tb varchar2(20);
nm number(13);

begin
tb:='&table';
cl:='&aadd';
nm:=&num;
EXECUTE IMMEDIATE 
'select '||cl||' from '||tb||' where '||cl||'=:1' into va using nm;
dbms_output.put_line(va);
end;



̬SQL 

declare

sql_stmt varchar2(200);
emp_id number(4):=7566;
emp_rec emp% rowtype;

begin
Execute immedlate
'create table bonus1(id number,amt number)';

sql_stmt:='select * from emp where empno=:id';
Execute immedlate sql_stmt into emp_rec using emp_id;

end;

declare
aaa varchar2(20);
num number(10);
bbb varchar2(20);
begin
aaa='&aaa';
num=&kkk;
execute immedlate 'select '||aaa||' from test where age=:a'into bbb using num;(׼SQL)
dbms_output.put_line(bbb);
end;
into (ֵ)
:a() using bb()


Լ쳣
declare 
invar exception;
cate varchar2(10);
begin
cate:='&cate';
if cate not in('aa','ff','dd') then
raise invar;
else
dbms_output.put_line(':'||cate);
end if;
exception
when invar then
dbms_output.put_line('޷ʶ!');
raise_application_error(-20200,'Լд');
end;
ݿ
raise_application_error(-20200,'Լд');

2
declare 
rate itemfile.itemrate%type;
ratee exception;
begin
select nvl(itemrate,0) into rate from itemfile
where itemcode='i207';
if rate=0 then
raise ratee;
else
dbms_output.put_line(':'||rate);
end if;
exception
when ratee then
RAISE_APPLICATION_ERROR(-20001, 'δָ');
end;

create procedure洢

׼
SQL> CREATE INDEX item_index ON itemfile (itemcode)
     TABLESPACE index_tbs;
ؽ
SQL> ALTER INDEX item_index REBUILD; 
ɾ
SQL> DROP INDEX item_index; 
Ψһȷڶûظֵ
Oracle ԶڱϴΨһ
ʹCREATE UNIQUE INDEX䴴Ψһ
SQL> CREATE UNIQUE INDEX item_index
     ON itemfile (itemcode);
ڱĶϴ
е˳
 SQL  WHERE ӾлУ߼ٶ

SQL> CREATE INDEX comp_index
     ON itemfile(p_category, itemrate);
תмֵÿֽ
ֵͨϣʹݾȵطֲ
ʱʹREVERSEؼ
SQL> CREATE INDEX rev_index 
     ON itemfile (itemcode) REVERSE;
SQL> ALTER INDEX rev_index REBUID NOREVERSE;
λͼʺϴڵͻ
λͼֱӴ洢ROWIDǴ洢ֽλROWIDӳ
Ӧʱ
ʡռռ
SQL> CREATE BITMAP INDEX bit_index
     ON order_master (orderno);
һϵĺʽ
ʽвܳ־ۺϺ
LOB͵ϴ
ʱ QUERY REWRITE Ȩ
SQL> CREATE INDEX lowercase_idx 
     ON toys (LOWER(toyname));
SQL> SELECT toyid FROM toys
     WHERE LOWER(toyname)='doll';
йصֵͼУ
USER_INDEXES  ûϢ
USER_IND_PARTITIONS  ûķϢ
USER_IND_COLUMNS  صıеϢ
SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
     FROM USER_IND_COLUMNS
     ORDER BY INDEX_NAME, COLUMN_POSITION;
Խ洢ڲͬķ
йصͣ
ֲ  ڷ.
ϴÿϴķΧһ
ȫַ  ڷǷϴָķΧķΧǷ޹
ȫַǷ  ڷϴȫͨûб

SQL> CREATE TABLE ind_org_tab (
     vencode NUMBER(4) PRIMARY KEY,
       venname VARCHAR2(20)
    ) 
    ORGANIZATION INDEX;
йصֵͼУ
USER_INDEXES  ûϢ
USER_IND_PARTITIONS  ûķϢ
USER_IND_COLUMNS  صıеϢ

SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
     FROM USER_IND_COLUMNS
     ORDER BY INDEX_NAME, COLUMN_POSITION;



----α

дѯ,̵ķʽ

---α:
ʽα: PL/SQL ִDML SQL ʱԶʽαꡣ
ʽα:ʽαڴضеĲѯ
REF α:REF αڴʱȷĶ̬ SQL ѯĽ

------ʽαУ
%FOUND C SQL ӰһлʱΪ TRUE
%NOTFOUND C SQL ûӰκʱΪTRUE
%ROWCOUNT C SQL Ӱ
%ISOPEN  - αǷ򿪣ʼΪFALSE


ɾα 

delete from table_name where cursor of cursor_name;

------ʽαʾ
------too_many_rows÷!

  1  declare
  2  empid varchar2(20);
  3  begin
  4  select name into empid from test;
  5  exception
  6  when too_many_rows then
  7  dbms_output.put_line('òѯ!');
  8* end;
SQL> /
òѯ!

PL/SQL ѳɹɡ



------no_data_found÷!
SQL> set serverout on
SQL> ed
дļ afiedt.buf

  1  declare
  2  empid varchar2(20);
  3  desig varchar2(20);
  4  begin
  5  empid:='&emp';
  6  select name into desig from test where name=empid;
  7  dbms_output.put_line('ѯ:'||desig);
  8  exception
  9  when no_data_found then
 10  dbms_output.put_line('ûʱ䣡');
 11* end;
SQL> /
 emp ֵ:  xiaoli
ԭֵ    5: empid:='&emp';
ֵ    5: empid:='xiaoli';
ѯ:xiaoli

PL/SQL ѳɹɡ

SQL> /
 emp ֵ:  ss
ԭֵ    5: empid:='&emp';
ֵ    5: empid:='ss';
ûʱ䣡

PL/SQL ѳɹɡ


SQL> set serveroutput on
SQL> begin
  2  update test set name='renbinbo' where name='binbo';
  3  if sql%found then
  4  dbms_output.put_line('Ѿ!');
  5  end if;
  6  end;
  7  /
test_tnameҲѾ!
Ѿ!


SQL>
  declare
   aa varchar2(20);
  bb varchar2(20);
   begin
  bb:='&bb';
   select score into aa from test where name=bb;
   if sql%found then
   dbms_output.put_line(bb||'ķΪ:'||aa);
   end if;
  end;
SQL> /
 bb ֵ:  renbinbo
ԭֵ    5: bb:='&bb';
ֵ    5: bb:='renbinbo';
renbinboķΪ:100

PL/SQL ѳɹɡ

SQL> ed
дļ afiedt.buf

  1  declare
  2  my_toy rbb.test.name%type;
  3  cursor toy_cur is
  4  select name from test where name='xiaoli';
  5  begin
  6  open toy_cur;
  7  loop
  8  fetch toy_cur into my_toy;
  9  exit when toy_cur%notfound;
 10  dbms_output.put_line('ѯ˵:'||my_toy);
 11  end loop;
 12  close toy_cur;
 13* end;
SQL> /
ѯ˵:xiaoli

PL/SQL ѳɹɡ

SQL> ed
дļ afiedt.buf

  1  declare
  2  name_n rbb.test.name%type;
  3  sex_s rbb.test.name%type;
  4  sex_t rbb.test.name%type;
  5  cursor test_t is
  6  select name,sex,score from test;
  7  begin
  8  open test_t;
  9  dbms_output.put_line('б:');
 10  loop
 11  fetch test_t into name_n,sex_s,sex_t;
 12  exit when test_t%notfound;
 13  dbms_output.put_line(name_n||'  '||sex_s||'  '||sex_t);
 14  end loop;
 15  close test_t;
 16* end;
 17  /
б:
xiaoli  Ů   90
renbinbo     100
xiaoming     89
xiaowang     91
xiaohua  Ů   98
yunfeng     88
wangming     78
wuming     98
xiaobin     68
binbin     44
tianhua  Ů   55
liyun  Ů   65

PL/SQL ѳɹɡ



bibno-->ed
дļ afiedt.buf

  1  declare
  2  cursor test_cur is
  3  select name,sex,score from test;
  4  begin
  5  dbms_output.put_line('ûб:');
  6  for namet in test_cur
  7  loop
  8  dbms_output.put_line(namet.name||' '||namet.sex||' '||namet.score);
  9  end loop;
 10* end;
 11  /
ûб:
xiaoli Ů  90
renbinbo   100
xiaoming   89
xiaowang   91
xiaohua Ů  98
yunfeng   88
wangming   78
wuming   98
xiaobin   68
binbin   44
tianhua Ů  55
liyun Ů  65

PL/SQL ѳɹɡ



ʽα
SET SERVEROUTPUT ON
SQL> DECLARE
		desig    VARCHAR2(20);
		emp_code VARCHAR2(5);
		empnm    VARCHAR2(20);
		CURSOR emp_cur(desigparam VARCHAR2) IS
		 SELECT empno, ename FROM employee
		 WHERE designation=desig;
     BEGIN
		desig:= '&desig';
		OPEN emp_cur(desig);
		LOOP
			FETCH emp_cur INTO emp_code,empnm;
			EXIT WHEN emp_cur%NOTFOUND;
			DBMS_OUTPUT.PUT_LINE(emp_code||' '||empnm);
  		END LOOP;
		CLOSE emp_cur;
     END;

SET SERVEROUTPUT ON
SQL> DECLARE
  new_price NUMBER;
  CURSOR cur_toy IS
    SELECT toyprice FROM toys WHERE toyprice<100
    FOR UPDATE OF toyprice;
BEGIN
  OPEN cur_toy;
  LOOP
    FETCH cur_toy INTO new_price;
    EXIT WHEN cur_toy%NOTFOUND;
    UPDATE toys
    SET toyprice = 1.1*new_price
    WHERE CURRENT OF cur_toy;
  END LOOP;
  CLOSE cur_toy;
  COMMIT;
END;


αĹǿ󣬿Լݴ

αŵ:
1.ɴӲͬ SELECT ȡ
2.Ϊ̵Ĳд
3.α
4.Խиֵ

ʹαƣ
1.ڳα
2.FOR UPDATEӾ䲻αһʹ
3.ʹñȽ




create procedure test_b(test varchar2,test1 number)
as
begin

dbms_output.put_line(test);
dbms_output.put_line(test1);
end;



create procedure test_c(test varchar2,test1 char)
as
aa varchar2(20);
bb char(10);
begin
select name into aa from test where name=test;
dbms_output.put_line(aa);
 select age into bb from test where age=test1;
dbms_output.put_line(bb);
end;


create or replace function test_binbo return varchar2
as
begin
return 'Ұ!';
end
ִ:
select test_binbo from dual;

 create or replace function test_binbo return varchar2
 as
 aa varchar2(20);
 bb char(3);
 begin
 bb:='&bb';
 select name into aa from test where sex=bb;
 return 'name';
 end;
ִ:
select test_binbo from dual;

create or replace function item_price_range(price number)
return varchar2 as
min_price number;
max_price number;
begin
select max(itemrate),min(temrate) into max_price,min_price
from test;
if price>=min_price and price<=max_price then
return 'ƾͼƻ';
else
return '';
end if;
end;
ִ:
select test_binbo from dual;


CREATE OR REPLACE PROCEDURE p1 AS 
  b VARCHAR2(50);
BEGIN
  UPDATE vendor_master SET venadd1='10 Walls Street' 
  WHERE vencode='V002';
  P2();
  SELECT venadd1 INTO b 
  FROM vendor_master WHERE vencode='V002';
  DBMS_OUTPUT.PUT_LINE(b);
END;
/
ִ
EXECUTE p1;

CREATE OR REPLACE PROCEDURE p2 AS
  a VARCHAR2(50);
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  SELECT venadd1 INTO a 
  FROM vendor_master WHERE vencode='V002';
  DBMS_OUTPUT.PUT_LINE(a);
  ROLLBACK;
END;
/





SQL> ed
дļ afiedt.buf

  1  create or replace package package_me as
  2  procedure proc_test(test varchar2);
  3  function fun_test(funt varchar2) return varchar2;
  4* end;
  5  /

Ѵ

дļ afiedt.buf

  1  create or replace package body package_me as
  2  procedure proc_test(test varchar2) as
  3  nam varchar2(20);
  4  begin
  5  select name into nam from test where name=test;
  6  dbms_output.put_line('˵:'||nam);
  7  end;
  8  function fun_test(funt varchar2) return varchar2 as
  9  funn varchar2(20);
 10  begin
 11  select next_day(funt,'')-7 into funn from dual;
 12  return funn;
 13  end;
 14* end package_me;
SQL> /

Ѵ
SQL> select package_me.fun_test('2008-10-16') from dual;

PACKAGE_ME.FUN_TEST('2008-10-16')
---------------------------------------------------------

2008-10-11

SQL> exec package_me.proc_test('xiaoli');
˵:xiaoli
PL/SQL ѳɹɡ

create or replace package pack_me as
procedure order_pr(orn varchar2);
function order_fu(onr varchar2) return varchar2;
end pack_me;
/

CREATE OR REPLACE PACKAGE BODY pack_me AS
  PROCEDURE order_proc (orno VARCHAR2) IS
    stat CHAR(1);
  BEGIN
    SELECT ostatus INTO stat FROM order_master
    WHERE orderno = orno;
    IF stat = 'p' THEN
      DBMS_OUTPUT.PUT_LINE('ݹҵĶ');
    ELSE
      DBMS_OUTPUT.PUT_LINE('ɵĶ');
    END IF;
  END order_proc;
  
  FUNCTION order_fun(ornos VARCHAR2)
  RETURN VARCHAR2
  IS
    icode   VARCHAR2(5);
    ocode   VARCHAR2(5);
    qtyord  NUMBER;
    qtydeld NUMBER;
  BEGIN
    SELECT qty_ord, qty_deld, itemcode, orderno
    INTO   qtyord, qtydeld, icode, ocode
    FROM order_detail
    WHERE orderno = ornos;
    IF qtyord < qtydeld THEN
      RETURN ocode;
    ELSE
      RETURN icode;
    END IF;
  END order_fun;
END pack_me;
/



ִ
EXECUTE pack_me.order_proc('o002');

DECLARE
  msg VARCHAR2(10);
BEGIN
  msg := pack_me.order_fun('o002');
  DBMS_OUTPUT.PUT_LINE('ֵ ' || msg);
END;

/

CREATE OR REPLACE PACKAGE BODY cur_pack AS
 CURSOR ord_cur(vcode VARCHAR2)
 RETURN order_master%ROWTYPE IS 
 SELECT * FROM order_master
 WHERE VENCODE=vcode;
 PROCEDURE ord_pro(vcode VARCHAR2) IS
   or_rec order_master%ROWTYPE;
 BEGIN
  OPEN ord_cur(vcode); 
  LOOP
    FETCH ord_cur INTO or_rec;
    EXIT WHEN ord_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LIne('صֵΪ' || or_rec.orderno);
  END LOOP;
 END ord_pro;
END cur_pack;

EXEC cur_pack.ord_pro('V001');



COLUMN OBJECT_NAME FORMAT A18

SELECT object_name, object_type
FROM USER_OBJECTS
WHERE object_type IN ('PROCEDURE', 'FUNCTION',
 'PACKAGE', 'PACKAGE BODY');

DESC USER_SOURCE

COLUMN LINE FORMAT 9999
COLUMN TEXT FORMAT A50

SELECT line, text FROM USER_SOURCE
WHERE NAME='TEST';

DESC pack_me;



ݿ⼶
CREATE TABLE system.session_info (
  username   VARCHAR2(30),
  logontime  DATE,
  session_id VARCHAR2(30),
  ip_addr    VARCHAR2(30),
  hostname   VARCHAR2(30),
  auth_type  VARCHAR2(30)
);
ʾ
set serverout on

create or replace trigger trg_session_info defore logoff on database
declare
session_id varchar2(30);
ip_addr    varchar2(30);
hostname   varchar2(30);
auth_type  varchar2(30);
logontime  date;

begin
 select sys_context('userenv','sessionid') -- Ự
  --  û¼ĿͻIPַ 
 select sys_context('userenv','ip_address') into ip_addr from dual;
  --  û¼Ŀͻ  
 select sys_context('usernv','host') into hostname from dual;
  --  ¼֤ʽݿ֤ⲿ֤
 select sys_context('usernv','authentication_type') into auth_type from dual;
 insert into system.session_info values (user,sysdate,session_id,ip_addr,hostname,auth_type);
end;
SELECT * FROM system.session_info;

Աemployees
create or replace trigger tr_employee after update on employees 
for each row
begin
 if(:new.salary>40000) then
	raise_application_error(-20002,'ְԱʲܳ 40000');
 end if;
end;


create or replace procedure demo(salary in number) as
  cursor_name integer;
  rows_processed interger;
begin
  cursor_name:=dbms_sql.open_cursor;
  dbms_sql.parse(cursor_name,'delete from salary_records where empsal>:temp_sal',dbms_sql.native);
  dbms_sql.bind_variable(cursor_name,':temp_sal',salay);
  rows_processed:=dbms_sql.execute(cursor_name);
  dbms_sql.close_cursor(crusor_name);
exception
  when others then
    dbms_sql.close_cursor(cursor_name);
end;

1.дһĺֻҪļ͵ַͿ԰ļݴ浽BLOB͵ֶС
binbo>create directory tnpdir as 'c:\bfile';
binbo>grant read on directory tnpdir to scott;
binbo>CREATE TABLE my_dia
(
  chapter_descr VARCHAR2(40),
  diagram_no INTEGER,
  diagram BLOB 
);

DECLARE
  l_bf  BFILE;
  l_bl BLOB;
BEGIN
  INSERT INTO my_dia (diagram)
  VALUES (EMPTY_BLOB())
  RETURN diagram INTO l_bl;
  l_bf := BFILENAME('jsp', '\test.jsp');
  DBMS_LOB.OPEN(l_bf, DBMS_LOB.FILE_READONLY);
  DBMS_LOB.LOADFROMFILE(l_bl, l_bf, DBMS_LOB.GETLENGTH(l_bf));
  DBMS_LOB.CLOSE(l_bf);
  COMMIT;
END;

2.һűֶεֵģname varchar2(20),sex char(2),score number(3)еSCOREֶΪֶΡһSQLѾʮϵʾΪAʮʮֵΪBʮµΪC

binbo>create table test(name varchar2(20),sex char(2),score number(3));
binbo>select name,sex,case when score<=70 then 'C'
when score<=90 and score>70 then 'B'
when score>90 then 'A'
end case from test;

3.һһֶΪԶ͡ORACLEʵ֡
binbo>create table test(id number,name varchar2(20));
create sequence seq_test increment by 1 start with 1 maxvalue 999;
create or replace trigger tr_test before insert or update of id on test
for each row
begin
if insert into then
select seq_test.nextval into :new.id from dual;
else
raise_application_error(-20002,'ID!');
end if;
end;

4.ɾһûµб

binbo>spool c:\test.sql
binbo>select 'drop table '||tname||';'from tab;
binbo>spool off
binbo>@c:\test;

5ΰݿ־ģʽӹ鵵ģʽΪǹ鵵ģʽ

binbo>shutdown immediate
binbo>startup mount
binbo>alter database archivelog;
binbo>archive log list;
binbo>alter system set log_archive_dest=false scope=spfile;
binbo>alter database open;


6һûͱռ䣬ûͱռ½һűSCOTTûѯȨ
binbo>create user binbo identified by binbo;
binbo>create tablespace test datafile 'e:\test.dbf' size 10m;
binbo>GRANT SELECT ON scott.test to scott;

7дһ̣ĳж졣
 create or replace procedure dept(test in varchar2)
 as
 aa varchar2(20);
  begin
 select extract(day from last_day(to_date (test,'yyyy-mm'))) into aa from dual;
  dbms_output.put_line(aa);
  end;

8һ±ֶΪname,sex,scorescoreֶΪֶΣѯĵ˵
binbo>create table test(name varchar2(20),sex char(3),score number(3));
binbo>select * from (select name n,score sc,rownum r from (select name,score,rownum from test order by score desc)) where r between 5 and 7;

9ѯǰڵǼš

binbo>select next_day(sysdate,'') from dual;

10һȻô¡
create table test(name varchar2(20),sex char(3),score number(3));
 create table test_t(name varchar2(20));

 create or replace trigger test_test before insert or update of name on test
 for each row
 begin
 if inserting then
  insert into test_t(name) values (:new.name);
  dbms_output.put_line('test_tnameҲѾ!');
 elseif updating then
  update test_t set name=:new.name where name=old.name;
  dbms_output.put_line('test_tnameҲѾ!');
 elseif deleting then
  delete from test_t where name=:old.name;
  dbms_output.put_line('test_tnameҲѾɾ!');
 else
  raise_application_error(-20002,'testеnameֶ');
 end if;
 end;


---ݿв
SQL> create table test_file(name varchar(30),shell varchar2(30));
Ѵ

G:data.ctl:(tabʱx'09')
load data into table test_file fields terminated by '=='(name,shell);

G:data.txt:
aaaaaaaa==11111111
bbbbbbbb==22222222
cccccccc==33333333
binbo==hehehehe


C:\Documents and Settings\Administrator>sqlldr rbb/rbb control=G:\data.ctl data=G:\data.txt

SQL*Loader: Release 9.2.0.1.0 - Production on ڶ 7 10 20:37:47 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

ﵽύ㣬߼¼3
ﵽύ㣬߼¼4

SQL> select * from test_file;

NAME                           SHELL
------------------------------ ------------------------------
aaaaaaaa                       11111111
bbbbbbbb                       22222222
cccccccc                       33333333
binbo                          hehehehe



 declare
   result clob;
   xmlstr varchar2(32767);
   line varchar2(2000);
   line_no integer:=1;
   begin
   result:=dbms_xmlquery.getxml('select * from test');
   xmlstr:=dbms_lob.substr(result,32767);
   loop
  exit when xmlstr is null;
 line:=substr(xmlstr,1,instr(xmlstr,chr(10))-1);
  dbms_output.put_line(line_no||':'||line);
  xmlstr:=substr(xmlstr,instr(xmlstr,chr(10))+1);
  line_no:=line_no+1;
 end loop;
 end;
SQL> /

PL/SQL ѳɹɡ



SQL> select instr('abcdefsfssdfabcabcsdfs','bc',2,2) "instring" from dual;

  instring
----------
        14


---Զ(ô)
//
create table test_bin(id number(3),name varchar2(20));
//
create sequence test_sq increment by 1 start with 1 maxvalue 1000;
//
м
create or replace trigger test_test before insert or update of id on test_bin
for each row
begin
if inserting then
select test_sq.nextval into :new.id from dual;
else
raise_application_error(-20002,'id');
end if;
end;

伶

create or replace trigger trgdemo after insert or update or delete on order_master
begin
 if updating then
  dbms_output.put_line('Ѹorder_masterе');
 elseif deleting then
  dbms_output.put_line('ɾorder_masterе');
 elseif inserting then
  dbms_output.put_line('order_masterв');
 end if;
end;

instead of (Ҫͼ[ͼֻfor each row])

create or replace trigger upda_ord instead of update on ord_view 
for each row
begin
  update order_master set vencode=:new.vencode where orderno=:new.orderno;
  dbms_output.put_line('Ѽ');
end;

ɣ
䣨¼
弤 DML ¼ DDL ¼

ִдΪܼ
壩
һЩ SQL ʹ룬ڷ˴ҴƵֵΪʱ




DDL 
ݿ⼶
DML 
伶
м
INSTEAD OF 

ģʽ
create table dropped_obj(obj_name varchar2(30),obj_type varchar2(20),drop_date date);

create or replace trigger log_drop_obj after drop on schema 
begin
 insert into dropped_obj values(ora_dict_obj_name,ora_dict_obj_type,sysdate);
end;

úͽô
alter trigger aiu_name disable;
alter trigger aiu_name enable;

ɾ
drop trigger aiu_name;

user_triggersֵͼйشϢ
select trigger_name from user_triggers where table_name='emp';

select trigger_type,triggering_event,when_clause from user_triggers
 where trigger_name='biu_emp_deptno';

dbms_outputʾpl/sqlӳĵϢ
set serveroutput on
BEGIN
  DBMS_OUTPUT.PUT_LINE('ӡ');
  FOR i IN 1..9 LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP for_j;
    DBMS_OUTPUT.NEW_LINE;
  END LOOP for_i;
END;
ӡ
*
**
***
****
*****
******
*******
********
*********

PL/SQL ѳɹɡ

1.DBMS_LOB ṩڴͶĹ̺ͺ
2.DBMS_XMLQUERY ڽѯתΪ XML ʽ
DECLARE  result CLOB;
  xmlstr VARCHAR2(32767);
  line   VARCHAR2(2000);
  line_no INTEGER := 1;
BEGIN
  result := DBMS_XMLQuery.getXml('SELECT * FROM test');
  xmlstr := DBMS_LOB.SUBSTR(result,32767);
 LOOP
  EXIT WHEN xmlstr IS NULL;
  line := SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10))-1);
  DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
  xmlstr := SUBSTR(xmlstr,INSTR(xmlstr,CHR(10))+1);
  line_no := line_no + 1;
 END LOOP;
END;



һЩõó
DBMS_OUTPUT  PL/SQL ĵϢ
DBMS_LOB ṩ LOB ݵӳ
DBMS_XMLQUERY ѯתΪ XML ʽ
DBMS_RANDOM ṩ
UTL_FILE ڶдϵͳıļ



CREATE OR REPLACE TRIGGER biu_emp_deptno
BEFORE INSERT OR UPDATE OF deptno
ON emp
FOR EACH ROW
WHEN (New.deptno <> 40)
BEGIN
  :New.comm := 0;
END;

/
Ѵ

----ûбܲ 

CREATE VIEW ord_view AS
SELECT order_master.orderno, order_master.ostatus, 
       order_detail.qty_deld, order_detail.qty_ord    
FROM order_master, order_detail 
WHERE order_master.orderno = order_detail.orderno;

CREATE OR REPLACE TRIGGER order_mast_insert
INSTEAD OF INSERT ON ord_view
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
  CURSOR ecur IS SELECT *  FROM order_master
    WHERE order_master.orderno = :n.orderno;
  CURSOR dcur IS SELECT * FROM order_detail
    WHERE order_detail.orderno = :n.orderno;
  a ecur%rowtype;
  b dcur%rowtype;
BEGIN
  OPEN ecur;
  OPEN dcur;
  FETCH ecur into a;
  FETCH dcur into b;
  IF dcur%notfound THEN
    INSERT INTO order_master(orderno,ostatus)
    VALUES(:n.orderno, :n.ostatus);
  ELSE
    UPDATE order_master SET order_master.ostatus = :n.ostatus
    WHERE order_master.orderno = :n.orderno;
  END IF;
  IF ecur%notfound THEN
    INSERT INTO order_detail(qty_ord,qty_deld,orderno)
    VALUES(:n.qty_ord, :n.qty_deld, :n.orderno);
  ELSE
    UPDATE order_detail
    SET order_detail.qty_ord  = :n.qty_ord, 
        order_detail.qty_deld = :n.qty_deld
    WHERE order_detail.orderno = :n.orderno;
  END IF;
  CLOSE ecur;
  CLOSE dcur;
END;
/

CREATE TABLE dropped_obj
(
  obj_name VARCHAR2(30),
  obj_type VARCHAR2(20),
  drop_date DATE
);

CREATE OR REPLACE TRIGGER log_drop_obj
AFTER DROP ON SCHEMA
BEGIN
  INSERT INTO dropped_obj
  VALUES (ORA_DICT_OBJ_NAME, ORA_DICT_OBJ_TYPE, SYSDATE);
END;
/


ALTER TRIGGER biu_emp_deptno DISABLE;

ALTER TRIGGER biu_emp_deptno ENABLE;

DROP TRIGGER biu_emp_deptno;

DESC USER_TRIGGERS;


DECLARE
  l_num   NUMBER;
  counter NUMBER;
BEGIN
  counter:=1;
  WHILE counter <= 10
  LOOP
    l_num := ABS((DBMS_RANDOM.RANDOM MOD 100)) + 1;
    DBMS_OUTPUT.PUT_LINE(l_num);
    counter := counter + 1;
  END LOOP;
END;
/
40
4
35
52
68
5
94
38
49
51

PL/SQL ѳɹɡ


---ѯתΪxmlʽ
--  SYSTEM û¼ִ
CREATE DIRECTORY TEST_DIR AS 'C:\DEVELOP';
GRANT READ, WRITE ON DIRECTORY TEST_DIR TO SCOTT;

--  SCOTT û¼
DECLARE
  src CLOB;
  xmlfile UTL_FILE.FILE_TYPE;
  length INTEGER;
  buffer VARCHAR2(16384);
BEGIN
  src := DBMS_XMLQuery.getXml('select * from emp');
  length := DBMS_LOB.GETLENGTH(src);
  DBMS_LOB.READ(src, length, 1, buffer);
  xmlfile := UTL_FILE.FOPEN('TEST_DIR', 'employees.xml', 'w');
  UTL_FILE.PUT(xmlfile, buffer);
  UTL_FILE.FCLOSE(xmlfile);
END;
/

-------ȡxmlʽļ
UTL_FILE ڶдϵͳıļ
ļһǴ򿪡дر
UTL_FILE ָļ· DIRECTORY 
1.CREATE DIRECTORY TEST_DIR AS 'C:\DEVELOP';
2.GRANT READ, WRITE ON DIRECTORY TEST_DIR TO SCOTT

SET SERVEROUT ON FORMAT WRAPPED
DECLARE
  input_file   UTL_FILE.FILE_TYPE;
  input_buffer VARCHAR2(4000);
BEGIN
  input_file := UTL_FILE.FOPEN('TEST_DIR', 'employees.xml', 'r');
  FOR I IN 1..11 LOOP
    UTL_FILE.GET_LINE(input_file, input_buffer);
    DBMS_OUTPUT.PUT_LINE(input_buffer);
  END LOOP;
  UTL_FILE.FCLOSE(input_file);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('------------------');
END;


oracle ݿ$rman
oracle ݿⱸ:ݺ߼

oracle 4
 1. 
ִ SQL з߼Ͽɵϡûд SQL Чͻᷢ߼
2.û̹ 
û޷ݿʱû̹ϡû̹ϵԭ쳣Ͽӻ쳣ֹ 
3. ʵ 
 Oracle ݿʵӲ޷
ʱͻᷢʵ

4.ʹ
ݿ޷ȷȡдĳݿļʱ
ᷢʹ  

oracle ģʽ

1.ȫݿ
͵ݿеж
2.
͵һָı
3.û
͵һûģʽеж
4.ռ
͵һָıռеж


ʵó³

USERID	ȷִеʵóûͿ
BUFFER	ȷʱʹõĻССֽڱʾ
FILE	ָĶļƣĬϵչ.dmp
FULL	ָǷȫݿⷽʽֻȨûſʹô˲
OWNER	Ҫݿûб
HELP	ָǷʾϢͲ˵
ROWS	ȷǷҪе
TABLES	ʽʱָ赼ıͷ
PARFILE	ָݸʵóĲļ
TABLESPACES	ռ䷽ʽʱָҪıռ


ûʽ
exp scott/tiger@tsinghua file=scott_back owner=scott

ʽ
exp scott/tiger@tsinghua tables=(emp, dept) file=scott_back_tab

ռ䷽ʽ
exp system/zl@tsinghua tablespaces=(users) file=tbs_users

ʹòļ
exp system/zl parfile='C:\parameters.txt'


ʵó³

USERID	ִָеû
BUFFER	ָȡݵĻСֽΪλ
COMMIT	ָǷÿ飨СBUFFERãύ
FILE	ָҪĶļ
FROMUSER	ָҪӵתļеûģʽ
TOUSER	ָҪûFROMUSERTOUSERԲͬ
FULL	ָǷҪתļ
TABLES	ָҪıб
ROWS	ָǷҪе
PARFILE	ָݸʵóĲļļ԰гв
IGNORE	ʱǷĴĬΪN
TABLESPACES	ռ䷽ʽ룬гҪıռ


ļݿ
imp tsinghua/tsinghua@tsinghua file=item_back.dmp ignore=y full=y

scottûı뵽martinû
imp system/zl@tsinghua file=scott_back fromuser=scott touser=martin tables=(emp,dept)

ʹòļ
imp system/oracle parfile='C:\parameters.txt'

鵵־ʽµݿ:Զ鵵ֶ鵵 

ֶ鵵ûֶ鵵ǻ־ļļ
Զ鵵Էǻ־ļļԶ鵵

ݿַʽУǹ鵵־ʽ͹鵵־ʽ
ǹ鵵־ʽԱʵϣ޷ʹϡڴ˷ʽ£ݿֻʵʩ䱸.
鵵־ʽ鵵־ûʹù鵵־ȫָݿ.


͵ʵóصУ
԰ʱ䱣ṹ
1.ָıµ뵽µݿ
2.԰ݿǨƵһ̨칹
3.ͬ汾Oracleݿ֮䴫
4.״̬½бݺͻָ
5.֯Ĵ洢ṹӼƬ


oracleʽΪxmlȫ.txt

SQL> conn sys/sys as sysdba
ӡ
SQL> drop directory test_dir
  2  /

Ŀ¼Ѷ

SQL> CREATE DIRECTORY TEST_DIR AS 'C:\';

Ŀ¼Ѵ

SQL> GRANT READ, WRITE ON DIRECTORY TEST_DIR TO rbb;

Ȩɹ

SQL> conn rbb/rbb
ӡ
SQL> ed
дļ afiedt.buf

  1  DECLARE
  2    src CLOB;
  3    xmlfile UTL_FILE.FILE_TYPE;
  4    length INTEGER;
  5    buffer VARCHAR2(16384);
  6  BEGIN
  7    src := DBMS_XMLQuery.getXml('select * from liuxing');
  8    length := DBMS_LOB.GETLENGTH(src);
  9    DBMS_LOB.READ(src, length, 1, buffer);
 10    xmlfile := UTL_FILE.FOPEN('TEST_DIR', 'emp.xml', 'w');
 11    UTL_FILE.PUT(xmlfile, buffer);
 12    UTL_FILE.FCLOSE(xmlfile);
 13* END;
SQL> /

PL/SQL ѳɹɡ


SQL> ed
дļ afiedt.buf

  1  declare
  2  lname number;
  3  counter number;
  4  begin
  5  counter:=1;
  6  while counter<=10
  7  loop
  8  lname:=dbms_random.random;
  9  dbms_output.put_line(lname);
 10  counter:=counter+1;
 11  end loop;
 12* end;
SQL> /
277652640
-479979827
-1049652647
-1006595853
1252280346
196435204
466478280
-85782435
-1489036577
-927786638

PL/SQL ѳɹɡ

ʱ:  00: 00: 00.00


޸ı

alter table old_table_name rename to new_table_name;

SQLִеI/O 

SQL>SET AUTOTRACE ON ; 

SQL>SELECT * FROM TABLE; 

OR 

SQL>SELECT * FROM v$filestat ; 


 βжٸݿʵ 

SQL>SELECT * FROM V$INSTANCE;


ѯݿжٱ

SQL>select * from all_tables; 



ʾSQLִõʱ

SQL>set timing on ; 


ĵȴ 
select event,sum(decode(wait_Time,0,0,1)) "Prev", 
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" 
from v$session_Wait 
group by event order by 4; 

عε
select name, waits, gets, waits/gets "Ratio" 
from v$rollstat C, v$rollname D 
where C.usn = D.usn; 

رռ I/O 
select B.tablespace_name name,B.file_name "file",A.phyrds pyr, 
A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw 
from v$filestat A, dba_data_files B 
where A.file# = B.file_id 
order by B.tablespace_name; 

ļϵͳ I/O 
select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name", 
C.status, C.bytes, D.phyrds, D.phywrts 
from v$datafile C, v$filestat D 
where C.file# = D.file#; 

ĳûе 
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name 
from user_ind_columns, user_indexes 
where user_ind_columns.index_name = user_indexes.index_name 
and user_ind_columns.table_name = user_indexes.table_name 
order by user_indexes.table_type, user_indexes.table_name, 
user_indexes.index_name, column_position; 

 SGA 
select a.value + b.value "logical_reads", c.value "phys_reads", 
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" 
from v$sysstat a, v$sysstat b, v$sysstat c 
where a.statistic# = 38 and b.statistic# = 39 
and c.statistic# = 40; 

 SGA ֵ仺
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", 
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" 
from v$rowcache 
where gets+getmisses <>0 
group by parameter, gets, getmisses; 

 SGA йʣӦС1%  
select sum(pins) "Total Pins", sum(reloads) "Total Reloads", 
sum(reloads)/sum(pins) *100 libcache 
from v$librarycache; 

select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent" 
from v$librarycache; 

ʾݿʹС 
select count(name) num_instances ,type ,sum(source_size) source_size , 
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size, 
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required 
from dba_object_size 
group by type order by 2; 

 SGA ־ʣӦС1% 
SELECT name, gets, misses, immediate_gets, immediate_misses, 
Decode(gets,0,0,misses/gets*100) ratio1, 
Decode(immediate_gets+immediate_misses,0,0, 
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2 
FROM v$latch WHERE name IN ('redo allocation', 'redo copy'); 

ڴӲ̵ʣʹС .10 sort_area_size 
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)'); 


صǰݿ˭ʲôSQL 
SELECT osuser, username, sql_text from v$session a, v$sqltext b 
where a.sql_address =b.address order by address, piece; 

ֵ仺
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE; 
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE; 
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE; 

߳ǰ,˱С1%,ӽ0%Ϊá 

SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES" 
FROM V$ROWCACHE 


 MTS 
select busy/(busy+idle) "shared servers busy" from v$dispatcher; 
ֵ0.5ʱӴ 
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher'; 
select count(*) from v$dispatcher; 
select servers_highwater from v$mts; 
servers_highwaterӽmts_max_serversʱӴ 

֪ǰûID
SQL>SHOW USER; 
OR 
SQL>select user from dual; 

鿴Ƭ̶ȸߵı
SELECT segment_name table_name , COUNT(*) extents 
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name 
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name); 

֪ڱռеĴ洢 
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where 
tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name; 

֪ڱռеĴ洢 
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner' 
group by segment_name; 

֪ʹCPUûsession 11cpu used by this session 

select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value 
from v$session a,v$process b,v$sesstat c 
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 



********SQLServerԻ***********

SQLࣺ 

DDLݶ(CREATEALTERDROPDECLARE) 
DMLݲ(SELECTDELETEUPDATEINSERT) 
DCLݿ(GRANTREVOKECOMMITROLLBACK)

,Ҫܻ䣺

1˵ݿ

CREATE DATABASE database-name 
create database database

2˵ɾݿ
drop database database
drop database dbname

3˵sql server

---  ݵ device
user pubs
exec database 'disk'
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- ʼ 
backup database pubs to testback
BACKUP DATABASE pubs TO testBack 

4˵±
create table tabname(name nvchar(20) primary key,password nvchar(16))
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

еı± 

Acreate table tab_new like tab_old (ʹþɱ±)
Bcreate table tab_new as select col1,col2 from tab_old definition only

5˵

ɾ±drop table tabname 

6˵

һУAlter table tabname add column col type
alter table tabanme add column col 

עӺ󽫲ɾDB2мϺҲܸı䣬Ψһܸıvarchar͵ĳȡ

7˵

Alter table tabname add primary key(col) 

˵

ɾAlter table tabname drop primary key(col)

8˵

create [unique] index idxname on tabname(col.) 

ɾdrop index idxname

עǲɸĵģıɾ½

9˵

ͼcreate view viewname as select statement

ɾͼdrop view viewname 

10˵򵥵Ļsql

ѡselect * from table1 where Χ

룺insert into table1(field1,field2) values(value1,value2)

ɾdelete from table1 where Χ

£update table1 set field1=value1 where Χ

ңselect * from table1 where field1 like %value1% ---like﷨ܾ!

select * from table1 order by field1,field2 [desc]

select count * as totalcount from table1

ͣselect sum(field1) as sumvalue from table1

ƽselect avg(field1) as avgvalue from table1

select max(field1) as maxvalue from table1

Сselect min(field1) as minvalue from table1

11˵߼ѯ
䴴 STAFF   20 ŵķǾԱͼнˮӶͨʾ

CREATE VIEW STAFF_ONLY

AS SELECT ID, NAME, DEPT, JOB, YEARS

FROM STAFF

WHERE JOB <> 'Mgr' AND DEPT=20

ڴͼ֮ʾͼ:

SELECT *FROM STAFF_ONLY

A UNION union  

UNION ͨ TABLE1  TABLE2ȥκظжһ ALL  UNION һʹʱ UNION ALLظС£ÿһв TABLE1  TABLE2

B EXCEPT except 

EXCEPT ͨ TABLE1 е TABLE2 евظжһ ALL  EXCEPT һʹʱ (EXCEPT ALL)ظС 

C INTERSECT intersect

INTERSECT ֻͨ TABLE1  TABLE2 жевظжһ ALL  INTERSECT һʹʱ (INTERSECT ALL)ظС

עʹʵļѯбһµġ

12˵ʹ 

Aleft outer join 

ӣӣӱƥУҲӱС 

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

Bright outer join: 

()ȰӱƥУҲӱС

Cfull outer join 

ȫӣӱƥУӱем¼

ΣһЩsql

1˵Ʊ(ֻƽṹ,Դa ±b) (Access)

һselect * into b from a where 1<>1

select top 0 * into b from a

2˵(,Դa Ŀb) (Access)

insert into b(a, b, c) select d,e,f from b;

3˵ݿ֮Ŀ(ʹþ·) (Access)

insert into b(a, b, c) select d,e,f from b in ݿ⡯ where 

ӣ..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4˵Ӳѯ(1a 2b)

select a,b,c from a where a IN (select d from b ) : select a,b,c from a where a IN (1,2,3)

5˵ʾ¡ύ˺ظʱ

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6˵Ӳѯ(1a 2b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7˵ͼѯ(1a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8˵between÷,betweenƲѯݷΧʱ˱ֵ߽,not between

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between ֵ1 and ֵ2

9˵in ʹ÷

select * from table1 where a [not] in (ֵ1,ֵ2,ֵ4,ֵ6)

10˵ŹɾѾڸûеϢ 

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11˵ı⣺

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12˵ճ̰ǰ

SQL: select * from ճ̰ where datediff('minute',fʼʱ,getdate())>5

13˵һsql 㶨ݿҳ

select top 10 b.* from (select top 20 ֶ,ֶ from  order by ֶ desc) a, b where b.ֶ = a.ֶ order by a.ֶ

14˵ǰ10¼

select top 10 * form table1 where Χ

15˵ѡÿһbֵͬжӦaļ¼Ϣ(÷̳ÿа,ÿƷ,Ŀɼ,ȵ.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16˵ TableA е TableBTableC евظжһ

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17˵ȡ10

select top 10 * from tablename order by newid()

18˵ѡ¼

select newid()

19˵ɾظ¼

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20˵гݿеı

select name from sysobjects where type='U'

21˵ге

select name from syscolumns where id=object_id('TableName')

22˵ʾtypevenderpcsֶΣtypeֶУcaseԷʵֶѡselect еcase

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

ʾ

type    vender pcs
 A 1
 A 1
 B 2
 A 2
ֻ B 3
ֻ C 3

23˵ʼtable1

TRUNCATE TABLE table1

24˵ѡ1015ļ¼

select top 5 * from (select top 15 * from table order by id asc) table_ order by id desc

ѡݿ¼ķʹRandomizeͨSQLʵ֣

Դ洢ݿе˵ܸЧǿ̫Щ㲻ҪASPҸȻӡʵϳĽǽʾѭ

Randomize 
RNumber = Int(Rnd*499) +1 

While Not objRec.EOF 
If objRec("ID") = RNumber THEN 
... ִнű ... 
end if 
objRec.MoveNext 
Wend 

⡣ȣȡ1500Χ֮ڵһ500ݿڼ¼Ȼÿһ¼ID ֵǷƥRNumberĻִTHEN ؼֿʼһ롣RNumber 495ôҪѭһݿ⻨ʱɾͳˡȻ500ֿЩȸΪȹ̵ҵ⻹ǸСݿˣͨһݿھͰ˳ǧ¼ʱ򲻾ˣ 

SQLͿԺܿҳ׼ȷļ¼Ҵһֻü¼recordsetʾ

Randomize 
RNumber = Int(Rnd*499) + 1 

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber 

set objRec = ObjConn.Execute(SQL) 
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")

дRNumber IDֻҪƥɡֻҪϴĹ⣬Կɰ¼RecordsetûаݣܿҵҪļ¼ʹ󽵵˴ʱ䡣

̸

¶ҪեRandom һͣôܻһȡ¼һΧڵļ¼ı׼Random ʾչһ¾ͿSQLӦˡ

Ϊȡѡļ¼ͬһrecordsetڣԴ洢ȻѯݿƥЩֵļ¼ 

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3 

ѡ10¼Ҳÿҳװʱ10ӵбBETWEEN ѧʽѡһ¼ʵĵ¼һͨüַʽɣ SELECT ֻʾһֿܣID Զɵĺ룩 
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9" 

ע⣺ϴִĿĲǼݿǷ9¼

ȡ¼Թ

Access﷨SELECT top 10 * From  ORDER BY Rnd(id)
Sql server:select top n * from  order by newid()
mysql select * From  Order By rand() Limit n

Access﷨(Ҫ,Accessʲôû,ûAccessSQL˵,ֻԼ, ڼԱ)

﷨ select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

ʹSQL ...ַʾ

﷨

SQLݿ⣺select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Accessݿ⣺SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename; 

Conn.Execute˵

Execute

÷ִSQL䡣SQLִкǷ񷵻ؼ¼÷ʹøʽΪ֣

1ִSQLѯʱزѯõļ¼÷Ϊ

Set =Ӷ.Execute("SQL ѯ")

Executeú󣬻Զ¼󣬲ѯ洢ڸü¼УͨSet¼ָĶ󱣴棬Ժʹ˸ü¼

2ִSQLĲʱûм¼ķءʱ÷Ϊ

Ӷ.Execute "SQL " [, RecordAffected][, Option]

RecordAffected Ϊѡ˳ɷһSQLִкЧļ¼Զ浽ñСͨʸñͿ֪SQLӶ¼˲

Option ѡòȡֵͨΪadCMDTextڸADOӦýExecute֮ĵһַΪıָͨòʹִиЧ

BeginTransRollbackTransCommitTrans

ӶṩķBeginTransڿʼһRollbackTransڻعCommitTransύеȷĴ

ԽһΪһ壬ֻȫ䶼ɹִкɹһִʧܣʧܣָǰ״̬

BeginTransCommitTransڱĿʼͽ֮䣬Ϊ䡣жǷɹͨӶErrorʵ֣ErrorϵĳԱΪ0˵дʧܡErrorеÿһError󣬴һϢ



************ݿӷ********************

==================TestSQLServer.javaSQLServer============================

import java.sql.*;
import java.util.*;
public class TestSQLServer{  
   public static void main (String args[]){          
      try{  
		Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
		String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testdb";
		String user ="sa";
		String password = "sa";		
		Connection conn = DriverManager.getConnection(url,user,password);       
         Statement stat = conn.createStatement();
         ResultSet result = stat.executeQuery("SELECT * FROM users");         
         result.next();         
         System.out.println(result.getString(1));
         System.out.println(result.getString(2));
         System.out.println(result.getString(3));         
         result.close();      
         stat.close();
         conn.close();
         
      }catch(ClassNotFoundException en){
      	 System.out.println("ݿҲ");
      	 en.printStackTrace();      
      }catch(SQLException ex) {        
         while (ex != null) {  
            ex.printStackTrace();
            ex = ex.getNextException();
         }         
      }catch(Exception e){
          System.out.println("δ֪쳣");
          e.printStackTrace();
      }
   }
}


=================TestMysql.javamysqlݿ==========================

package org.binbo.dom;
import java.sql.*;
public class TestMysql{  
   public static void main (String args[]){          
      try{  
		Class.forName("com.mysql.jdbc.Driver").newInstance();		
		String url = "jdbc:mysql://localhost:3306/binbo";
		String user ="root";
		String password = "binbo";		
		Connection conn = DriverManager.getConnection(url,user,password);
		
        Statement stat = conn.createStatement();
         ResultSet result = stat.executeQuery("SELECT * FROM testxml");         
         result.next();         
         System.out.println(result.getString(1));
         System.out.println(result.getString(2));
         System.out.println(result.getString(3));         
         result.close();      
         stat.close();
         conn.close();         
      }catch(ClassNotFoundException en){
      	 System.out.println("ݿҲ");
      	 en.printStackTrace();      
      }catch(SQLException ex) {        
         while (ex != null) {  
            ex.printStackTrace();
            ex = ex.getNextException();
         }         
      }catch(Exception e){
          System.out.println("δ֪쳣");
          e.printStackTrace();
      }
   }

}
=================TestOracle.javaoracleݿ==================================

package org.binbo.dom;
import java.sql.*;
public class TestOracle{  
   public static void main (String args[]){          
      try{  
    		Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();		
    		String url = "jdbc:oracle:thin:@localhost:1521:binbo";
    		String user ="scott";
    		String password = "tiger";			
		Connection conn = DriverManager.getConnection(url,user,password);
		
        Statement stat = conn.createStatement();
         ResultSet result = stat.executeQuery("SELECT * FROM test");         
         result.next();         
         System.out.println(result.getString(1));
         System.out.println(result.getString(2));
         System.out.println(result.getString(3));         
         result.close();      
         stat.close();
         conn.close();         
      }catch(ClassNotFoundException en){
      	 System.out.println("ݿҲ");
      	 en.printStackTrace();      
      }catch(SQLException ex) {        
         while (ex != null) {  
            ex.printStackTrace();
            ex = ex.getNextException();
         }         
      }catch(Exception e){
          System.out.println("δ֪쳣");
          e.printStackTrace();
      }
   }
}
===============XMLݿ=====================================================
da.xml
<?xml version="1.0" encoding="UTF-8"?>
<PEOPLE><!--
  <PERSON PERSONID="E01">
    <className>com.microsoft.jdbc.sqlserver.SQLServerDriver</className>
    <url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=binbo</url>
    <user>sa</user>
    <password>sa</password>
  </PERSON>
  --><PERSON PERSONID="E02">
     <className>com.mysql.jdbc.Driver</className>
    <url>jdbc:mysql://localhost:3306/binbo</url>
    <user>root</user>
    <password>binbo</password>
  </PERSON><!--
 <PERSON PERSONID="E03">
     <className>oracle.jdbc.driver.OracleDriver</className>
    <url>jdbc:oracle:thin:@localhost:1521:binbo</url>
    <user>scott</user>
    <password>tiger</password>
  </PERSON>
--></PEOPLE>
--------------------------------------------
content.java
package org.binbo.dom;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class Content {
	public static Connection getConnection(){
		Connection conn =null;
		try {
			DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
			DocumentBuilder builder=factory.newDocumentBuilder();
			Document doc=builder.parse("da.xml");
			NodeList nl=doc.getElementsByTagName("PERSON");
			Element node=(Element) nl.item(0);
			
	String className =node.getElementsByTagName("className").item(0).getFirstChild().getNodeValue();
			      
	String url =node.getElementsByTagName("url").item(0).getFirstChild().getNodeValue();
			      
	String user =node.getElementsByTagName("user").item(0).getFirstChild().getNodeValue();
			     
	String pwd =node.getElementsByTagName("password").item(0).getFirstChild().getNodeValue();			     
			     Class.forName(className);
			     conn =DriverManager.getConnection(url,user,pwd);		    
		
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	} 
}
--------------------------------------------
Domtest.java
package org.binbo.dom;
import java.io.FileOutputStream;
import java.sql.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Domtest {
	public static void main(String[] args){
		try{
			Connection conn =Content.getConnection();
			PreparedStatement ps=conn.prepareStatement("select * from testxml");
			ResultSet rs =ps.executeQuery();
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			Element Stu = doc.createElement("binboxml");
			Element uname = doc.createElement("username");
			Element nameid = doc.createElement("userid");
			Element pass = doc.createElement("password");
			while(rs.next()){				
				String id=rs.getString(1);
				String name=rs.getString(2);
				String pwd=rs.getString(3);
				System.out.print(rs.getString(1));
				System.out.print(rs.getString(2));
				System.out.print(rs.getString(3));
			    System.out.print("дɹ");
				nameid.appendChild(doc.createTextNode(id));
				uname.appendChild(doc.createTextNode(name));
				pass.appendChild(doc.createTextNode(pwd));
			}
			
			Stu.appendChild(nameid);			
			Stu.appendChild(uname);
			Stu.appendChild(pass);
			doc.appendChild(Stu);
			TransformerFactory tf = TransformerFactory.newInstance();
			Transformer tr = tf.newTransformer();
			tr.transform(new DOMSource(doc), new StreamResult(
					new FileOutputStream("Binbo.xml")));
			rs.close();
		} catch(Exception e){
			e.printStackTrace();
		}

	}

}

=====================ݿӳ=====================================

ӵtomcatеserver.xml

<Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>


<Context path="/myjsp" docBase="myjsp"
        debug="5" reloadable="true" crossContext="true">
       <Resource name="jdbc/myjsp"
               auth="Container"
               type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/myjsp">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
 
    <parameter>
     <name>username</name>
     <value>sa</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>sa</value>
    </parameter>
    <parameter>
       <name>driverClassName</name>
       <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp</value>
    </parameter>
  </ResourceParams>
</Context>
-----------------------------------------------------------------------
DBPool.javaݿӳ
package com.binbo.dbo;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DBPool {
	public static synchronized Connection getConnection()throws Exception{
		DataSource ds = null;
		try{
		Context ininCtx  = new javax.naming.InitialContext();
		
		Context envCtx = (Context)ininCtx.lookup("java:comp/env");
		  ds = (DataSource)envCtx.lookup("jdbc/myjsp");
		}catch(NamingException e){
			e.printStackTrace();			
		}		 
		Connection conn = ds.getConnection();
		return conn;		
	}
}
-----------------------------------------------------------
ݿ
package com.binbo.dbo;
import java.sql.*;
import com.binbo.javabean.BreakBean;
import com.binbo.javabean.OpenBean;
public class DataBaseClass {
	private Statement sta = null;
	private ResultSet rs = null;
	Connection conn = null;
	private int count;
	public DataBaseClass() throws Exception {
		// ȡݿ
		conn = DBPool.getConnection();
		sta = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
				ResultSet.CONCUR_UPDATABLE);
	}
	public void getExecute(String sql) {
		try {
			System.out.println(sql);
			sta.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/*
	 * sql 伯Ĳѯ
	 */
	public ResultSet getQuery(String sql) {
		try {
			System.out.println(sql);
			rs = sta.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	
	 * ȡý
	
	public int getCount(ResultSet rs2) {
		try {
			rs2.next();
			count = rs2.getRow();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}
	 //ӣ	 
	public void getRegister(OpenBean open) {
		String sql = "insert into f_info(nam,email,titl,content,tem,mid)values(?,?,?,?,?,?)";
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1, open.getNam());
			ps.setString(2, open.getEmail());
			ps.setString(3, open.getTitl());
			ps.setString(4, open.getContent());
			ps.setString(5, open.getTem());
			ps.setString(6, open.getDepa());
			ps.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
        // ɾ
	public void getRealys(OpenBean real) {
		try {
			String sql = "delete from departments where id=?";
			PreparedStatement ppt = conn.prepareStatement(sql);
			ppt.setString(1, real.getUnam());
			ppt.execute();

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	// ѯ
	public void getRealy(OpenBean hg) {

		try {
			String sql = "select * from departments where id=?";
			PreparedStatement ppg = conn.prepareStatement(sql);
			ppg.setString(1, hg.getUnam());
			ppg.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
============================hibernateݿ====================================
package com.binbo.hibernate.xml;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; 
public class PersonOperate {
	private Session session = null ;
	public PersonOperate()
	{
		Configuration config = new Configuration().configure() ;
		SessionFactory factory = config.buildSessionFactory() ;
		this.session = factory.openSession() ;
	}	
	// 
	public void insert(Person p)
	{
		Transaction tran = this.session.beginTransaction() ;
		this.session.save(p) ;
		tran.commit() ;
		this.session.close() ;
	}
------------------------------------------
ݵ
                LinOperate po = new LinOperate();
                Lin p = new Lin();
		p.setLname(lname);
		p.setLmonery(lmonery);
		p.setLmain(lmain);
		p.setLtime(ltime);
		LinOperate po = new LinOperate();
		po.insert(p);
		errors.add("success", new ActionMessage("xiangxi"));
		request.setAttribute("org.apache.struts.action.ERROR", errors);
		return mapping.findForward("jinru");
------------------------------------------
	
	// ޸
	public void update(Person p)
	{
		Transaction tran = this.session.beginTransaction() ;
		this.session.update(p) ;
		tran.commit() ;
		this.session.close() ;
	}	
	// û¼
	public boolean queryById(Person person)
	{
		boolean flag = false;
		String hql = "from Person as p where p.id=? and p.password=?" ;
		Query q = this.session.createQuery(hql) ;
		q.setString(0,person.getId()) ;
		q.setString(1,person.getPassword());
		Iterator iter = q.list().iterator();
		if (iter.hasNext()) {
			flag = true;
			person.setName(((Person) iter.next()).getName());
			
		}
		this.session.close() ;
		return flag;
	}
	//֤û治
	public boolean queryC(Person person)
	{
		boolean flag = false;
		String hql = "from Person as p where p.name=?" ;
		Query q = this.session.createQuery(hql) ;
		q.setString(0,person.getName()) ;
		Iterator iter = q.list().iterator();
		if (iter.hasNext()) {
			flag = true;			
		}
		this.session.close() ;
		return flag;
	}
	//鿴
	public Person queryZliao(String id)
	{
		Person p = null ;
		String hql = "from Person as p where p.id=?" ;
		Query q = this.session.createQuery(hql) ;
		q.setString(0,id) ;
		List l = q.list() ;
		Iterator iter = l.iterator() ;
		if(iter.hasNext())
		{
			p = (Person)iter.next() ;
		}
		return p ;
	}	
	// ɾ
	public void delete(Person p)
	{
		Transaction tran = this.session.beginTransaction() ;
		this.session.delete(p) ;
		tran.commit() ;
	}	
	// ޸
	public void delete(String name)
	{
		String hql = "delete Person where name=?" ;
		Query q = this.session.createQuery(hql) ;
		q.setString(0,name) ;
		q.executeUpdate() ;
		this.session.beginTransaction().commit() ;
	}
	
	// ѯȫ
	public List queryAll()
	{
		List l = null ;
		String hql = "from Person as p" ;
		Query q = this.session.createQuery(hql) ;
		l = q.list() ;
		return l ;
	}
-------------------------------
(
ѯȫݵ
                LinOperate po = new LinOperate();
		List l = po.queryAll();
		Iterator iter = l.iterator();
		ArrayList lus = new ArrayList();
		while (iter.hasNext()) {
			Lin p = (Lin) iter.next();
			Luser lu = new Luser();
			lu.setName(p.getLname());
			lu.setChange(p.getLmonery());
			lu.setMainn(p.getLmain());
			lu.setLtime(p.getLtime());
			lus.add(lu);
			System.out.print(p.getLname() + " ");
			request.setAttribute("lus", lus);


)
------------------------	
	// ģѯ
	public List queryByLike(String cond)
	{
		List l = null ;
		String hql = "from Person as p where p.name like ?" ;
		Query q = this.session.createQuery(hql) ;
		q.setString(0,"%"+cond+"%") ;
		l = q.list() ;
		return l ;
	}
}
http://www.51xai.com
