您现在的位置: 网页吧 > 技术文档 > 数据库 > MS_SQL > 正文
  • 站内搜索:

常用sql语句

[作者:佚名 | 点击数: | 时间:2008-11-15]【

– search all users in oracle db
    select * from dba_users;
    select * from dba_users where account_status = ‘OPEN’;
   — search username and password in oracle DB
   select username, password from dba_users;
   — 查找某用户的所有表
   select count(table_name) from all_tables where owner = ‘CRM’;
   select table_name from user_tables;
   — 查找用户定义的sequence;
   select * from user_sequences;
   — 查看用户的对象
   select * from user_objects;
   select * from user_objects where object_type = ‘PROCEDURE’;
   — 查看用户的环境语言,更改HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG
   select userenv(’language’) from dual;
   — 授予其他用户某个表的权限
   grant select on sean.sr_area to public;
   grant select on sean.sr_contacts_t to public;
   grant select on sean.sr_contacts to public;
   — delete all tables of the current user;
       set feedback off;
       set pagesize 0;
       set heading off;
       set verify off;
       set linesize 200;
       set trimspool on;
       spool d:\del_all_tables.sql
       select ‘drop table ‘ || table_name || ‘ cascade constraints; ‘
         from user_tables;
       spool off;
       set feedback on;
       set pagesize 9999;
       set heading on;
       set verify on;

– search current user’s information
   select * from dba_ustats;

– search all views belong to current user
   select * from dba_varrays;
– search all views in oracl DB
   select * from dba_views;

– 看一下 SGA 各个组成部分的情况
   select * from v$sga;  
– UGA主要包含以下部分内存设置
   show parameters area_size
– export user’s all tables—————————————————-
   — run the following code uder sqlplus
    set feedback off;
    set pagesize 0;
    set heading off;
    set verify off;
    set linesize 200;
    set trimspool on;
    spool c:\sr2_bk.bat;
   
    select ‘exp crm/crm20060926@sr3 TABLES=’||table_name||’ FILE=’||table_name||’.dmp TRIGGERS=N’ from user_tables;
   
    spool off;
    set feedback on;
    set pagesize 9999;
    set heading on;
    set verify on;
   
    exit
   
    — now, you can find c:\sr2_bk.sql, delete the first line and the last
    — line of this file. Run this file
——————————————————————————-

– 创建数据库链接dblink
   DROP PUBLIC DATABASE LINK sr3;
  
   CREATE DATABASE LINK sr3110
   CONNECT TO durjaya IDENTIFIED BY durjaya
   USING ’sr3110′;
  
   SELECT * FROM sr_maintenance@sr3;
  
   drop public database link ei;
   create public database link ei
   connect to hand2 identified by s123456
   using ‘prod1′;
  
  
select * from all_db_links;
  
   select * from hotline_head@sr2;
  
   DROP PUBLIC DATABASE LINK sr;
  
   CREATE PUBLIC DATABASE LINK sr
   CONNECT TO sean IDENTIFIED BY sean
   USING ’sr’;
   select * from t_b@sr;

– create a dba user
    CREATE USER maggie
    IDENTIFIED BY maggie
    DEFAULT TABLESPACE users
    TEMPORARY TABLESPACE temp1
    QUOTA 1024k ON users;
   
    GRANT connect,resource,dba TO maggie WITH ADMIN OPTION;
– search parts results of one table.
   select * from tablea@sr2 where rownum <= 3;

– 将远端sr2中用户crm的全部表导入到本地,并取每个表的头10条记录
   set feedback off;
   set pagesize 0;
   set heading off;
   set verify off;
   set linesize 200;
   set trimspool on;
   spool d:\load_from_sr2.sql;   — changed for test
   SELECT ‘create table ‘ || table_name || ‘ as select * from crm.’ || table_name || ‘@sr2 where rownum <= 3000; ‘
   FROM all_tables@sr2
   WHERE owner = ‘CRM’;
   spool off;
   set feedback on;
   set pagesize 9999;
   set heading on;
   set verify on;
   /* 针对sr2, 不成功的导入包括:
    create table CRM.sys_user_info as select * from crm.CRM.sys_user_info@sr2 where rownum <= 3000
    create table MICROSOFTDTPROPERTIES as select * from crm.MICROSOFTDTPROPERTIES@sr2 where rownum <= 3000
    create table TOAD_PLAN_TABLE as select * from crm.TOAD_PLAN_TABLE@sr2 where rownum <= 3000
   */
   select * from sys_user_info@sr2;
   select * from MICROSOFTDTPROPERTIES@sr2;
   select * from TOAD_PLAN_TABLE@sr2;
   — 得出的结果应该类似:
      create table ELEM_TYPE as select * from sean.ELEM_TYPE@s_link where rownum < 3;
      create table ELEM_ITEM as select * from sean.ELEM_ITEM@s_link where rownum < 3;
      create table TABLEA as select * from sean.TABLEA@s_link where rownum < 3;      
      create table DWORKSHEET as select * from sean.DWORKSHEET@s_link where rownum < 3;                                                                             
      create table TABLEB as select * from sean.TABLEB@s_link where rownum < 3;      
      create table TEST12 as select * from sean.TEST12@s_link where rownum < 3;      
      create table TEST11 as select * from sean.TEST11@s_link where rownum < 3;      

     
      select table_name from user_tables;
      select * from tablea;

– trigger 示例
——————————————————————————-
– 对修改表的时间、人物进行日志记录。

– 1、 建立试验表

create table employees_copy as select *from hr.employees;
select * from employees_copy;

– 2、 建立日志表

create table employees_log(who varchar2(30),when date);

– 3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。

create or replace trigger biud_employee_copy
              Before insert or update or delete
                     On employees_copy
       Begin
              Insert into employees_log(
                     Who,when)
              Values( user, sysdate);
       End;
       /
       commit;
      
–4、 测试
update employees_copy set salary= salary*1.1;
select *from employees_log;

–5、 确定是哪个语句起作用?
–即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?
–可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断:

begin
        if inserting then
               —–
        elsif updating then
               —–
        elsif deleting then
               ——
        end if;
end;
if updating(’COL1′) or updating(’COL2′) then
        ——
end if;
– [试验]
– 1、 修改日志表
alter table employees_log add (action varchar2(20));

– 2、 修改触发器,以便记录语句类型。
Create or replace trigger biud_employee_copy
              Before insert or update or delete
                     On employees_copy
       Declare
              L_action employees_log.action%type;
       Begin
        if inserting then
               l_action:=’Insert’;
        elsif updating then
               l_action:=’Update’;
        elsif deleting then
               l_action:=’Delete’;
        else
               raise_application_error(-20001,’You should never ever get this error.’);
              Insert into employees_log(
                     Who,action,when)
              Values( user, l_action,sysdate);
       End;
       /
– 3、 测试
insert into employees_copy( employee_id, last_name, email, hire_date, job_id)
       values(12345,’Chen’,'Donny@hotmail’,sysdate,12);

select * from employees_log

– ORA-04098: 触发器 ‘DDL_DENY’ 无效且未通过重新验证 解决方法
– 1、首先查看用户的权限是否正确:
select owner, object_name, object_type, status from dba_objects where object_name = ‘TR_ELEMENT_TYPE’;
ALTER TRIGGER tr_element_type DISABLE;

——————————————————————————-
– 利用触发器修改本表
– 表结构
   create table zm_id (zm_id number(2), zm varchar2(8));
–触发器:     如果ZM字段插入或修改的值为“中国”  则ZM-ID的值为1  
create or replace trigger tr_cha 
before   insert or update  
on   zm_id 
for   each   row 
  begin 
  case
  when inserting then
    if   :new.zm=’CHINA’   then 
         :new.zm_id := 1; 
    end   if; 
  when updating then
    if   :new.zm=’American’   then 
         :new.zm_id := 11;
    end   if;
  end case;
  end   tr_cha;  
  /
  insert into zm_id values(2,’CINA’);
  insert into zm_id(zm) values(’CHINA’);
 
  select * from zm_id;
 
  delete from zm_id;
——————————————————————————-

 

——————————————————————————-

– trigger用例
——————————————————————————-
– 表element_type的触发器
CREATE TABLE ELEMENT_TYPE  (
   ELEMENT_TYPE_ID      NUMBER                          not null,
   ELEMENT_TYPE_CODE    VARCHAR2(6),
   ELEMENT_TYPE_NAME    VARCHAR2(20),
   ELEMENT_TYPE_DESC    VARCHAR2(100),
   PARENT_TYPE_CODE     NUMBER,
   ELEMENT_GROUP_ID     NUMBER,
   CREATED_BY           VARCHAR2(20),
   CREATION_DATE        DATE,
   LAST_UPDATE_BY       VARCHAR2(20),
   LAST_UPDATE_DATE     DATE,
   START_ACTIVE_DATE    DATE,
   END_ACTIVE_DATE      DATE,
   ACTIVE_STATUS        VARCHAR2(1),
   CONSTRAINT PK_ELEMENT_TYPE PRIMARY KEY (ELEMENT_TYPE_ID)
);
——————————————————————————-
   — 1.向表element_type插入一条记录之后,自动将当前系统时间插入到此记录的创建
   –   时间(creation_date), 最后更新时间(last_update_date)
   — 2.更新时,在更新之后,将当前系统时间插入到更新记录的最后更新时间
   –   (last_update_date)
   — 3.插入或更新时,如果有效状态变为有效(0),将当前系统时间插入到对应记录的
   –   生效时间(start_active_date);如果变为无效(1),则将当前系统时间插入到
   –   对应记录的失效时间(end_active_date)
  CREATE OR REPLACE TRIGGER tr_element_type
  BEFORE INSERT OR UPDATE
  ON element_type
  FOR EACH ROW
  BEGIN
       CASE
       WHEN INSERTING THEN
            :new.creation_date := sysdate;
            :new.last_update_date := sysdate;
           
            IF :NEW.active_status = ‘1′ THEN         — 1 means active
               :new.start_active_date := SYSDATE;
            ELSIF :NEW.active_status = ‘0′ THEN      — 0 means in-active
               :new.END_active_date := SYSDATE;
            END IF;
       WHEN UPDATING THEN
            :new.last_update_date := sysdate;
           
            IF :NEW.active_status = ‘1′ THEN         — 1 means active
               :new.start_active_date := SYSDATE;
            ELSIF :NEW.active_status = ‘0′ THEN      — 0 means in-active
               :new.END_active_date := SYSDATE;
            END IF;
       END CASE;
  END; –end tr_element_type
  /
   ————————————————————-
  CREATE OR REPLACE TRIGGER tr_element_type
  AFTER INSERT OR DELETE
  ON element_type
  FOR EACH ROW
  BEGIN
       raise_application_error(-20001, ‘asdfsdfsadfsa’);
  END; –end tr_element_type
   — 测试
   select * from user_triggers;
   drop trigger tr_element_type;

   SELECT * FROM element_type;
   delete from element_type;
  
                   INSERT INTO element_type(element_type_id,start_active_date)
                     VALUES (element_type_sequence.NEXTVAL,SYSDATE);
    INSERT INTO ELEMENT_TYPE
     VALUES(element_type_sequence.NEXTVAL, ‘ct0001′,’客户类型’,'列出客户类型,如:普通客户…’,
        0, 0,’Administrator’,NULL,’Administrator’,NULL,NULL,NULL,’0′);
    INSERT INTO ELEMENT_TYPE
     VALUES(element_type_sequence.NEXTVAL, ‘ct0001′,’客户类型’,'列出客户类型,如:普通客户…’,
        0, 0,’Administrator’,NULL,’Administrator’,NULL,NULL,NULL,’1′);
    update element_type set active_status = ‘0′ where element_type_code = ‘ct0001′;
——————————————————————————-
select table_name from user_tables;
– 更改用户密码
alter user hr identified by hr;

——————————————————————————-
–将用户的表转移到其它的表空间
–(1)按用户或其它方式exp导出所有的数据
EXP OWNER=user1 FILE=user1db.DMP
EXP OWNER=crm FILE=sr2_crm.DMP

–(2)如果在原实例更换表空间,先删除该用户的所有表。
select ‘drop table ‘||user_tables||’;’ from user_tables; 生成删除表的语句 也可用enterprise manager删除所有表
–(3)利用imp创建表结构脚本
IMP FULL=Y FILE=user1db.DMP INDEXFILE=user1.SQL
–此步骤不导入数据,但将user1db.DMP中user1用户的表结构、索引等信息生成为user1.SQL。
–去掉user1.SQL脚本程序中所有的注释和引号,然后将脚本中所有的表空间修改为指定转移的表空间。
–(4)调用执行user1.SQL脚本程序。在新指定的表空间创建所有的表和索引等。
–(5)导入数据。
IMP FULL=Y FILE=user1db.DMP IGNORE=Y
IMP FULL=Y INDEXES=N FILE=user1db.DMP IGNORE=Y 若出现索引导入问题,可用INDEXES=N不导入索引。
imp market/market@orawww160_55 FROMUSER=MARKETSYS INDEXES=N FILE=EXPDAT.DMP IGNORE=Y LOG=Imp1.LOG tables=(doctrack,newsinfo)

select ‘drop table ‘|| TABLE_NAME ||’;’ from user_tables;


——————————————————————————-
– 组内排序
select * from (select row_number() over(order by cust_no ) rn,t.* from  t_customerinfo t)
  where rn>3 and rn<=5

 select * from (   select c导出
 ust_name,rn from (select row_number() over(order by cust_no ) rn,t.*  from  t_customerinfo_1 t)
  where rn>(select count(*)  from t_customerinfo_1)/2-2 and rn<=(select count(*)  from t_customerinfo_1))
  where rownum<=5;
 
  create table t_customerinfo_1 as select * from t_customerinfo
  — 针对oracle8.1.7.0.0, 用户scott, 表emp, 进行测试
  select * from emp;
  select rownum from emp;
  select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno;
  select deptno,rank() over (partition by deptno order by sal) from emp order by deptno;
  select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno;
  select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp order by deptno;
  select deptno,ename,sal,lag(ename,2,’example’) over(partition by deptno order by ename) from emp order by deptno;
 
———————————————————————————
– 插入日期
    –你可以先在你的sql  plus中看看你的日期格式是什么样子的 
    select  sysdate  from  dual; 
    –然后你插入的时候可以按照你的系统日期格式插入,不需要转换,要不然你就自己指定格式转换插入 
    select  sysdate  from  dual; 
    
    SYSDATE 
    ——— 
    26-AUG-04 
    
    create  table  tmp(rq  date); 
   
    insert  into  tmp(rq)  values(’26-AUG-04′); 
   
    insert  into  tmp(rq)  values(to_date(’2004-08-26′,’yyyy-mm-dd’)); 
———————————————————————————

select table_name from user_tables;
drop table t_a;
drop table t_b;
drop table t_c;
drop table t_d;
drop table t_e;
DROP SEQUENCE t_a_sequence;
             
              CREATE SEQUENCE sr_call_back_sequence
              INCREMENT BY 1 — 每次加几个
              START WITH 100001 — 从1开始计数
              NOMAXVALUE — 不设置最大值
              NOCYCLE — 一直累加,不循环
              NOCACHE;

create table t_a(id    number,
                 code  varchar2(20),
                 name  varchar2(20),
                 c_id  number,
                 d_num number
                );
create table t_b(code  varchar2(20),
                 name  varchar2(20),
                 name2 varchar2(20),
                 name3 varchar2(20)
                );
create table t_c(c_id  number,
                 name2 varchar2(20)
                );   
create table t_d(d_num  number,
                 name3 varchar2(20)
                );
create table t_e(e_num  number,
                 name varchar2(20)
                );

insert into t_b values(’tb_code1′, ‘name1′, ‘aaa’, ‘xxx’);
insert into t_b values(’tb_code2′, ‘name2′, ‘bbb’, ‘yyy’);
insert into t_b values(’tb_code3′, ‘name3′, ‘ccc’, ‘zzz’);
insert into t_b values(’tb_code4′, ‘name4′, ‘ddd’, ‘www’);

insert into t_c values(11, ‘bbb’);
insert into t_c values(22, ‘ccc’);

insert into t_d values(888, ‘zzz’);
insert into t_d values(999, ‘www’);

insert into t_e values(101, ‘name1′);
insert into t_e values(102, ‘name3′);

insert into t_a(id,
                code,
                name,
                c_id,
                d_num
               )
     select  t_a_sequence.nextval,b.code,b.name,c.c_id,d.d_num
    from t_b b,t_c c,(select b1.code code,d1.d_num d_num from t_b b1,t_d d1 where b1.name3=d1.name3) d
where b.code=d.code(+) and b.name2=c.name2(+);

commit;

select t_a_sequence.nextval, b.code, c.c_id
from t_b b, t_c c
where b.name2 = c.name2(+);

select * from t_a;
delete from t_a;

commit;

select table_name from user_tables;
select * from t_a;
– 两表(多表)关联update — 被修改值由另一个表运算而来
select * from t_a;
select * from t_b;
select * from t_c;
select * from t_d;
select * from t_e;

update t_a a
   set d_num = (select e.e_num from t_e e where e.name = a.name)
 where exists (select 1 from t_e e where e.name = a.name);
SELECT * FROM t_a;
SELECT * FROM t_e;

/*
update ( select a.d_num d_num, e.e_num e_num
           from t_a a, t_e e
          where a.name = e.name
       )
   set d_num = e_num;
*/

UPDATE t_a a
     SET a.d_num =(select  e.e_num
                            from t_e e where e.name=a.name)  
   where a.rowid=(select a.rowid FROM t_e e
                   where e.name=a.name
                  )
 
 
select * from t_a;
select t_e.e_num from t_e, t_a where t_e.name = t_a.name;
rollback;
———————————————————————————————–
– oracle 查看索引 
select * from user_ind_columns@sr2 ;
select * from user_ind_columns@sr2 where table_name = ‘HOTLINE_HEAD’;
select * from user_ind_columns;
———————————————————————————————–
– oracle 查看主键
select * from user_part_tables;
———————————————————————————————–
– 查看语句执行所用的时间 sql语句
set timing on
select count(*) from t;

SELECT sql_text “SQL”, executions “运行次数”, buffer_gets / decode(executions, 0, 1, executions) / 4000 “响应时间”
FROM v$sql
WHERE buffer_gets / decode(executions, 0,1, executions) / 4000 > 10
AND executions > 0;

select object_name, owner object_owner, status, object_type, created, last_ddl_time
from sys.all_objects o
where object_type = ‘PROCEDURE’
and object_name not like ‘BIN$%’ 
order by decode(owner, user, 0, 1), owner, object_name;

select s.synonym_name object_name, o.object_type
from sys.all_synonyms s,      sys.all_objects o
where s.owner in (’PUBLIC’, user)
and o.owner = s.table_owner
and o.object_name = s.table_name
and o.object_type
in (’TABLE’, ‘VIEW’, ‘PACKAGE’,'TYPE’, ‘PROCEDURE’, ‘FUNCTION’, ‘SEQUENCE’)

SELECT object_name, object_type
  FROM sys.all_objects
 WHERE object_name NOT LIKE ‘BIN$%’
   AND owner = ”;

SELECT text FROM all_source WHERE owner = ”;
———————————————————————————————–
– 绑定变量测试
select table_name from user_tables;
select * from t;

drop table t cascade constraint;
create table t(x int);

select * from t for update nowait;

create or replace procedure proc1
as
begin
     for i in 1 .. 10000 loop
       execute immediate
       ‘insert into t values(:x)’ using i;
     end loop;
end;
/

create or replace procedure proc2
as
begin
     for i in 1 .. 10000 loop
         execute immediate
         ‘insert into t values (’||i||’)';
     end loop;
end;
/
———————————————————————————————–
– 使用merge (oracle9i 以上才支持)
create table inventory (part_no integer,part_count integer);
insert into inventory values(1,5);
insert into inventory values(3,6);

create table shipment (part_no integer,part_count integer);
insert into shipment values(1,2);
insert into shipment values(2,2);

MERGE INTO inventory
    USING shipment
    ON (inventory.part_no = shipment.part_no)
WHEN MATCHED THEN
   UPDATE SET part_count = part_count + shipment.part_count
WHEN NOT MATCHED THEN
   INSERT VALUES (shipment.part_no,shipment.part_count);

commit;
select * from inventory;

———————————————————————————————–
– 解决ORA-00054 系统忙, 进程
–用select sid,serial#,status,username from v$session查找状态为
–  INACTIVE的session,用
–alter system kill session ‘14,3534′ 查杀。

[1] [2] 下一页

常用sql语句网友评论
发表评论
  • 姓 名 :* (必填项)
  • E-mail: QQ:
  • 评 分 : 1分 2分 3分 4分 5分
  • 评论内容:
·请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任。
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据。
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为。
网页吧·中国站长第一门户