plsql

-- 日期格式条件
select *
  from abc
 where to_date('20111111', 'yyyymmdd') <= to_date(d, 'yyyymmdd')
   and to_date('20111115', 'yyyymmdd') >= to_date(d, 'yyyymmdd')
  
--只能通过主键关联,才能更新
 UPDATE (SELECT fund.Paymenttime       paytime,
                        fund.paystatus         sta,
                        detail.Operatortime    opertime,
                        detail.pay_result_flag resflag
                   FROM T_PRPJFUNDSPAYMENTDETAIL fund,
                        T_RS_PAY_DETAIL          detail
                  WHERE fund.PAYDETAILSEQID = detail.SEQ_ID
                    and pay_result_flag = '0'
                    and fund.paystatus in ('4', '5'))
            SET resflag  = decode(sta, '4', '1', '5', '2', '0'),
                opertime = paytime
-- 加入参数后 可以避开主键关联的限制         
  "UPDATE (SELECT /*+BYPASS_UJVC*/  " +
     "fund.Paymenttime paytime,fund.paystatus sta, fund.PAYACCOUNT acc, " +
     "fund.PAYACCOUNTNAME nm,fund.PAYBANKLOCATION bkloca," +
     "detail.OPERATOR_TIME opertime,detail.pay_result_flag resflag," +
     "detail.RS_ACCCOUNT,detail.RS_USER_NM,detail.RS_BANK_NM " +
     "FROM T_PRPJFUNDSPAYMENTDETAIL fund, T_RS_PAY_DETAIL detail " +
     "WHERE fund.CERTINO = detail.GROUP_ID and pay_result_flag = '0' " +
     "and fund.paystatus in ('4', '5'))" +
     "SET resflag     = decode(sta, '4', '1', '5', '2', '0'),opertime    = paytime," +
     "RS_ACCCOUNT = acc,RS_USER_NM  = nm,RS_BANK_NM  = bkloca"
               
 --
 select PAYDETAILSEQID, PAYSTATUS,PAYMENTTIME
  from T_PRPJFUNDSPAYMENTDETAIL fund
 where exists (select 1
          from T_RS_PAY_DETAIL pay
         where pay.seq_id = fund.PAYDETAILSEQID
         and pay.pay_result_flag='0'
         and fund.paystatus in('4','5')
         );
        
 --- 内外连接
 select * from bcd vv inner join abc uu on vv.a=uu.a --内连接,或者叫等值连接
select * from bcd vv left join abc uu on vv.a = uu.a --左连接,显示左边所有的记录


--
select * from abc; --8  9  1  2  888
select * from bcd; --7  9  8
--查询出 bcd 表中 7 的记录
select * from bcd bb where not exists (select 1 from abc aa where aa.a = bb.a );


select substr(a,0,3) from abc where a='888'--包括begin,不包括end

insert into t_accounthis select * from t_account

--删除表多余的列
alter table T_ACCOUNTING_PERIOD drop (acc_sta);
alter table t_note_info add (ACCOUNTING_DATE varchar2(8));
create sequence S_INEX_INFO_SEQ_ID increment by 1 nocache;

select note.note_seq_id,note.costcenter from T_NOTE_INFO note where note.comcode='34010100';--票据基本信息表(NOTE_SEQ_ID主键)
select * from T_VERIF_TRACE;--票据使用明细表(VERIF_NO主键,核销流水号 ,采用的是新建序列发生器的方式)

select * from T_NOTE_INFO note where note.note_seq_id='159'for update ;--主键采用的是sequence,是数据库的方式

select * from T_NOTE_INFO note where (amount-nvl(useamt,'0'))>0;--通过票据单号可进行关联


-- 创建导出数据需要的用户和权限设置
create user zengst identified by zengst;

grant connect,resource,dba to zengst;


--创建序列
create sequence Seq_FundsPayment
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

create sequence batchIds
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

select batchId.Nextval from dual;
select batchId.Currval from dual

-- 更新视图信息
 update (select * from abc where c=7 ) set c=2
 
 --rownum不用用于表示大于等于的形式
   alter table T_PRPJFUNDSPAYMENTDETAIL add (requestBatch varchar2(30));
  
   -- 日期格式 到秒
   delete from t_accounthis where to_date(process_date_2,'yyyyMMddHH24miss')>=to_date('20111128003003','yyyyMMddHH24miss')

and to_date(process_date_2,'yyyyMMddHH24miss')<=to_date('20111128173003','yyyyMMddHH24miss')

-- 先根据where条件帅选数据,然后对满足条件的数据按照创建时间筛选
select * from t_middle_task where actionFlag = 'A' and MODULE_ID = 'MOD001' order by tcrttm

-- rownum也是和其他条件一样,进行数据帅选的
-- group by 和forupdate不能一起使用
-- rownum=1,但是不能使用rownum=3或者大于1的数,也不能这样用:rownum>8,只能这样用:rownum<=3
   --查询一个表的索引
  select * from all_indexes where table_name = 'T_REFUNDBACK_TASK';
   -- 给表建索引
   create index indexbatchid on T_REFUNDBACK_TASK (batchid);
  
   -- 都可以使用
SELECT * FROM T_ARAP_INFO WHERE LENGTH(SEQ_ID) != 30;
SELECT * FROM T_ARAP_INFO WHERE LENGTH(SEQ_ID) <> 30;

--普遍对于增删改查的英文缩写为crud 即create read updata delete(不按顺序翻译)
--进入到:windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项即可。
--或者,还可以打开 windows ->preferences->Team -> SVN 中做相关设置。

select count(*)
  from T_ACCOUNTING_PERIOD
 where (to_date(start_date, 'yyyy-MM-dd') <= to_date('20120201', 'yyyy-MM-dd') and to_date(end_date, 'yyyy-MM-dd') >= to_date('20120201',' yyyy - MM - dd '))
 or
  (to_date(start_date,' yyyy - MM - dd ')<=to_date(' 20120222 ',' yyyy - MM - dd ') and to_date(end_date,' yyyy - MM - dd ')>=to_date(' 20120222 ',' yyyy - MM - dd '))
  or(to_date(start_date,' yyyy - MM - dd ')>to_date(' 20120201 ',' yyyy - MM - dd ') and to_date(end_date,' yyyy - MM - dd ')<to_date(' 20120222 ',' yyyy - MM - dd '))
 
 
-- 查询数据库的job工作
select * from dba_jobs;
          
---手工执行定时任务
begin
 dbms_job.run(8);
end;

---删除定时任务
begin
 dbms_job.remove(8);
end;

--对同一个表,select 两个字段没问题,但是外围还有一层select的时候就需要通过别名加以区分

    ---建立索引可以增加select的效率,但是会降低update delete的效率
    --通过where条件就可以使用建立的索引
   
    select count(user),user.age from User user group by user.age having count(user)>10

你可能感兴趣的:(plsql)