Esquema de envio automático do relatório de estatísticas de dados Oracle

Esquema de envio automático do relatório de estatísticas de dados Oracle


servidor de demonstração

envolve:

10.74.132.107

10.74.132.17

11.71.253.66

11.71.253.126


Direção do fluxo de dados: rm(10.74.132.107) -> 10.74.132.17 -> 11.71.253.66 -> 11.71.253.126 -> Web

Fluxo de dados:
rm(10.74.132.107) -> 10.74.132.17 -> 11.71.253.66 -> 11.71.253.126 -> Web


1. 10.74.132.107, consultar dados

Consulte o log de observação da tabela de violação integrada em 10.74.132.107

----集成-违法表观察日志
----10.74.132.107
select TO_CHAR(SYSDATE,'yyyymmdd-hh24miss') RQ,'1_vio_jdczp_his' bm,to_char(lrsj,'yyyymmdd') sj,count(1) sl from vio_jdczp_his@tzq_jicheng t
group by to_char(lrsj,'yyyymmdd')
union all
select TO_CHAR(SYSDATE,'yyyymmdd-hh24miss') RQ,'2_vio_jdczp' bm,to_char(lrsj,'yyyymmdd') sj,count(1) sl from vio_jdczp@tzq_jicheng t
group by to_char(lrsj,'yyyymmdd')
order by 2,3;

2. Crie um link de banco de dados em 10.74.132.17/jzjjinf

2.1. Criar link de dados rm e conectar-se a rm(10.74.132.85/racdb)

--在ti/[email protected]/jzjjinf上
create database link rm connect to rm identified by rm using '10.74.132.85/racdb';

2.2. Crie um link de dados para 66 e conecte-se a 66 (11.71.253.66/tzq)

create database link to66 connect to tzq identified by "1" using '11.71.253.66/tzq';

3. Crie e salve tabelas em 11.71.253.66/tzq

3.1. Criar tabela de histórico RM_VIO_JDCZP_AND_HIS

--在tzq/[email protected]/tzq上
-- Create table
create table RM_VIO_JDCZP_AND_HIS
(
  rq              VARCHAR2(100),
  bm              VARCHAR2(100),
  sj              VARCHAR2(100),
  sl              VARCHAR2(100)
)
tablespace TZQ
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

3.2. Crie droptable_ifexists() para excluir a tabela armazenada

--create procedure
create or replace procedure droptable_ifexists(
p_table in varchar2
) is
v_count number(10);
begin
  select count(*) into v_count from user_tables where table_name=upper(p_table);
  if v_count>0 then
    execute immediate 'drop table '||p_table||' purge';
  end if;
end droptable_ifexists;

4. Em 10.74.132.17, crie um salvamento e um trabalho e execute o salvamento em intervalos regulares.

4.1. Criar e salvar

4.1.1. Crie droptable_ifexists() para excluir a tabela armazenada

create or replace procedure droptable_ifexists(
p_table in varchar2
) is
v_count number(10);
begin
  select count(*) into v_count from user_tables where table_name=upper(p_table);
  if v_count>0 then
    execute immediate 'drop table '||p_table||' purge';
  end if;
end droptable_ifexists;
/

4.1.2. Crie e salve GET_AND_SEND_VIO_JDCZP(), exclua a tabela de histórico local, reconstrua a tabela de histórico de acordo com os dados mais recentes e, ao mesmo tempo, limpe a tabela de histórico no servidor 66 e insira os dados da tabela de histórico local no 66 mesa remotamente.

CREATE OR REPLACE PROCEDURE get_and_send_vio_jdczp AS
BEGIN
  droptable_ifexists('RM_VIO_JDCZP_AND_HIS');
  EXECUTE IMMEDIATE '
create table RM_VIO_JDCZP_AND_HIS as
select TO_CHAR(SYSDATE,''yyyymmdd-hh24miss'') RQ,''1_vio_jdczp_his'' bm,to_char(lrsj,''yyyymmdd'') sj,count(1) sl from vio_jdczp_his@rm t
group by to_char(lrsj,''yyyymmdd'')
union all
select TO_CHAR(SYSDATE,''yyyymmdd-hh24miss'') RQ,''2_vio_jdczp'' bm,to_char(lrsj,''yyyymmdd'') sj,count(1) sl from vio_jdczp@rm t
group by to_char(lrsj,''yyyymmdd'')
order by 2,3
';
  dbms_utility.exec_ddl_statement@to66('truncate table RM_VIO_JDCZP_AND_HIS');
  EXECUTE IMMEDIATE 'insert into RM_VIO_JDCZP_AND_HIS@to66 
select * from RM_VIO_JDCZP_AND_HIS
';
  COMMIT;
END;
/

4.2. Crie um trabalho e execute GET_AND_SEND_VIO_JDCZP() regularmente às 17:36 todos os dias.

criar emprego

DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'GET_AND_SEND_VIO_JDCZP;'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.6/24'); --每天17:36执行
  COMMIT;
END;

5. Conecte mstsc a 11.71.253.126 de 11.71.253.66 na área de trabalho remota

Use o comando mstsc remote connection desktop para se conectar a 11.71.253.126 em 11.71.253.66.


Seis, crie uma tabela em 11.71.253.126

Criar tabela de histórico (RM_VIO_JDCZP_AND_HIS)

Criar tabela em 11.71.253.126

create table RM_VIO_JDCZP_AND_HIS
(
  rq              VARCHAR2(100),
  bm              VARCHAR2(100),
  sj              VARCHAR2(100),
  sl              VARCHAR2(100)
)
tablespace TZQ
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

7. Crie um salvamento e um trabalho em 11.71.253.66, e o trabalho executará o salvamento todos os dias.

7.1 Crie e salve send_vio_jdczp_to126() em 11.71.253.66, limpe os dados da tabela de histórico 126 (RM_VIO_JDCZP_AND_HIS) e insira remotamente os dados locais na tabela de histórico 126 (RM_VIO_JDCZP_AND_HIS).

CREATE OR REPLACE PROCEDURE send_vio_jdczp_to126 AS
BEGIN
  dbms_utility.exec_ddl_statement@to_11_71_253_126('truncate table RM_VIO_JDCZP_AND_HIS');
  EXECUTE IMMEDIATE 'insert into RM_VIO_JDCZP_AND_HIS@to_11_71_253_126 select * from RM_VIO_JDCZP_AND_HIS';
  COMMIT;
END;

7.2 Crie um job em 11.71.253.66, e o job executará send_vio_jdczp_to126() às 17:42 todos os dias.

criar emprego

DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'SEND_VIO_JDCZP_TO126;'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.7/24'); --每天17:42执行
  COMMIT;
END;

8. Crie um salvamento e um trabalho em 11.71.253.126, e o trabalho executará o salvamento todos os dias.

8.1 Crie e salve SQL_TO_CSV() em 11.71.253.126 e envie o resultado da consulta SQL como um arquivo .csv local.

CREATE OR REPLACE PROCEDURE sql_to_csv(p_query    IN VARCHAR2, -- 查询SQL
                                       p_dir      IN VARCHAR2, -- 导出的文件放置目录
                                       p_filename IN VARCHAR2 -- CSV名
                                       ) IS
  l_output       utl_file.file_type;
  l_thecursor    INTEGER DEFAULT dbms_sql.open_cursor;
  l_columnvalue  VARCHAR2(4000);
  l_status       INTEGER;
  l_colcnt       NUMBER := 0;
  l_separator    VARCHAR2(1);
  l_desctbl      dbms_sql.desc_tab;
  p_max_linesize NUMBER := 32000;
BEGIN
  --OPEN FILE
  l_output := utl_file.fopen(p_dir
                            ,p_filename
                            ,'W'
                            ,p_max_linesize);
  --DEFINE DATE FORMAT
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';
  --OPEN CURSOR
  dbms_sql.parse(l_thecursor
                ,p_query
                ,dbms_sql.native);
  dbms_sql.describe_columns(l_thecursor
                           ,l_colcnt
                           ,l_desctbl);
  --DUMP TABLE COLUMN NAME
  FOR i IN 1 .. l_colcnt LOOP
    utl_file.put(l_output
                ,l_separator || '"' || l_desctbl(i).col_name || '"'); --输出表字段
    dbms_sql.define_column(l_thecursor
                          ,i
                          ,l_columnvalue
                          ,4000);
    l_separator := ',';
  END LOOP;
  utl_file.new_line(l_output); --输出表字段
  --EXECUTE THE QUERY STATEMENT
  l_status := dbms_sql.execute(l_thecursor);

  --DUMP TABLE COLUMN VALUE
  WHILE (dbms_sql.fetch_rows(l_thecursor) > 0) LOOP
    l_separator := '';
    FOR i IN 1 .. l_colcnt LOOP
      dbms_sql.column_value(l_thecursor
                           ,i
                           ,l_columnvalue);
      utl_file.put(l_output
                  ,l_separator || '"' ||
                   TRIM(both ' ' FROM REPLACE(l_columnvalue
                               ,'"'
                               ,'""')) || '"');
      l_separator := ',';
    END LOOP;
    utl_file.new_line(l_output);
  END LOOP;
  --CLOSE CURSOR
  dbms_sql.close_cursor(l_thecursor);
  --CLOSE FILE
  utl_file.fclose(l_output);
EXCEPTION
  WHEN OTHERS THEN
    RAISE;
END;

8.2 Crie e salve sql_to_csv_vio_jdczp() em 11.71.253.126, consulte os dados da tabela de histórico local (RM_VIO_JDCZP_AND_HIS) e gere o resultado como um arquivo .csv local.

CREATE OR REPLACE PROCEDURE sql_to_csv_vio_jdczp AS
  v_today VARCHAR2(50); --今天的日期文本
BEGIN
  SELECT to_char(SYSDATE
                ,'yyyymmdd')
    INTO v_today
    FROM dual;
  sql_to_csv('select * from RM_VIO_JDCZP_AND_HIS' -- 查询SQL
            ,'OUT_PATH' -- 自己的本地目录
            ,v_today || '-RM_VIO_JDCZP_AND_HIS.csv');
END;

8.3. Crie um trabalho em 11.71.253.126 e execute sql_to_csv_vio_jdczp() salvo às 17:48 todos os dias

--创建job
DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'SQL_TO_CSV_VIO_JDCZP;'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.8/24'); --每天17:48执行
  COMMIT;
END;

8.4 Crie e salve P_SEND_MAIL() em 11.71.253.126 para enviar e-mail.

Salvo P_SEND_MAIL (), blog de exibição de código SQL:
https://blog.csdn.net/tttzzzqqq2018/article/details/132242517#_3

8.5 Crie e salve SENT_VIO_JDCZP_MAIL() em 11.71.253.126, e envie o arquivo .csv gerado diariamente para a caixa postal correspondente.

SENT_VIO_JDCZP_MAIL() salvo, o código SQL é o seguinte:

CREATE OR REPLACE PROCEDURE sent_vio_jdczp_mail(v_mail IN VARCHAR2) AUTHID CURRENT_USER IS
  v_today     VARCHAR2(50); --今天的文本
  v_today2    VARCHAR2(50); --今天的文本2
  v_file_name VARCHAR2(500); --文件全名称
BEGIN
  SELECT to_char(SYSDATE ,'yyyymmdd') INTO v_today FROM dual;
  SELECT to_char(SYSDATE ,'yyyy-mm-dd') INTO v_today2 FROM dual;
  v_file_name:='E:\tzq\wf\report\'||v_today||'-RM_VIO_JDCZP_AND_HIS.csv';
  P_SEND_MAIL('【荆州市交管局】-集成平台-违法图片数据量统计('||v_today2||')',--邮件正文
              '【荆州市交管局】-集成平台-违法图片数据量统计('||v_today2||')',--邮件标题
              'tttzzzqqq2019@163.com',--发送邮箱
              v_mail,--接收邮箱
              'smtp.163.com',
              25,
              1,
              'tttzzzqqq2019@163.com',--发送邮箱的账号
              'xxxxxxx',--发送邮箱的密码
              v_file_name, --文件
              'base64');
END;

8.6 Crie um job em 11.71.253.126 e execute SENT_VIO_JDCZP_MAIL() todos os dias às 17h54.

criar emprego

DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'SENT_VIO_JDCZP_MAIL(''[email protected]'');'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.9/24'); --每天17:54执行
  COMMIT;
END;

Dicas de trabalho da Oracle:

Modifique o intervalo da tarefa do trabalho: dbms_job.interval(job_id, formato de hora)

BEGIN
  dbms_job.interval(24
                   ,'TRUNC(sysdate+1)+17.9/24'); --每天17:54执行
  COMMIT;
END;

Execute uma tarefa de trabalho imediatamente: dbms_job.run(job_id)

BEGIN
  dbms_job.run(24);
  COMMIT;
END;

8.7 Como o arquivo csv é muito pequeno, o procedimento armazenado envia um erro. Portanto, o trabalho de exclusão usa bat para executar e gerar arquivos html automaticamente.

Bat é executado automaticamente para gerar arquivos html, consulte esta postagem no blog: Oracle gera resultados de consulta SQL em arquivos HTML da Web (etapas detalhadas para registros gráficos)

8.7.1. Exclua as tarefas de trabalho Oracle de duas etapas em 8.3 e 8.6

Consulte o id do trabalho de acordo com a visualização user_jobs, o campo de trabalho de user_jobs é o id do trabalho.
Exclua as tarefas de trabalho do Oracle nas etapas 8.3 e 8.6 e exclua-as de acordo com o ID do trabalho.

BEGIN
  dbms_job.remove(23);
  COMMIT;
END;
BEGIN
  dbms_job.remove(24);
  COMMIT;
END;

8.7.2, exclua o procedimento armazenado em duas etapas de 8.2 e 8.5

excluir procedimento armazenado

drop procedure SQL_TO_CSV_VIO_JDCZP;
drop procedure SENT_VIO_JDCZP_MAIL;

8.8 Crie e salve sent_vio_jdczp_and_his_mail() em 11.71.253.126, e envie o arquivo .html gerado diariamente para a caixa postal correspondente.

CREATE OR REPLACE PROCEDURE sent_vio_jdczp_and_his_mail(v_mail IN VARCHAR2)
  AUTHID CURRENT_USER IS
  v_today     VARCHAR2(50); --今天的文本
  v_today2    VARCHAR2(50); --今天的文本2
  v_file_name VARCHAR2(500); --文件全名称
BEGIN
  select to_char(sysdate,'yyyymmdd') into v_today from dual;
  select to_char(sysdate,'yyyy-mm-dd') into v_today2 from dual;
  v_file_name:='E:\tzq\wf\report\'||v_today||'-集成违法图片表数据量统计.html';
  dbms_output.put_line('v_file_name:'||v_file_name);
  P_SEND_MAIL('【荆州市交管局】-集成平台-集成违法图片表数据量统计('||v_today2||')',--邮件正文
              '【荆州市交管局】-集成平台-集成违法图片表数据量统计('||v_today2||')',--邮件标题
              'tttzzzqqq2019@163.com',--发送邮箱
              v_mail,--接收邮箱
              'smtp.163.com',
              25,
              1,
              'tttzzzqqq2019@163.com',--发送邮箱的账号
              'xxxxxxx',--发送邮箱的密码
              v_file_name, --文件
              'base64');
END;

8.9 Crie um job em 11.71.253.126 e execute sent_vio_jdczp_and_his_mail() todos os dias às 17h48.

Execute a tarefa agendada às 17:48 todos os dias em 11.71.253.126:

DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'sent_vio_jdczp_and_his_mail(''[email protected]'');'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.9/24'); --每天17:54执行
  COMMIT;
END;

9. Execute as estatísticas de uso do espaço de tabela em 10.74.132.17

Estatísticas integradas de uso do espaço de tabela

----RM_TABLESPACE_RATE
--10.74.132.17
--sql:
select a.tablespace_name,a.bytes/1024/1024 sum_mb,(a.bytes-b.bytes)/1024/1024 used_mb,b.bytes/1024/1024 free_mb,
round(((a.bytes-b.bytes)/a.bytes)*100,2) percent_used
from
(select tablespace_name,sum(bytes) bytes from dba_data_files@rm group by tablespace_name) a,
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space@rm group by tablespace_name) b
where a.tablespace_name=b.tablespace_name
order by a.bytes desc,((a.bytes-b.bytes)/a.bytes) desc;

10. Execute as estatísticas de uso do espaço de tabela em 10.74.132.17 e 11.71.253.126

10.1 Em tzq/[email protected]/tzq, 11.71.253.126, crie uma tabela.


– Criar tabela em tzq/[email protected]/tzq,11.71.253.126 :

-- Create table
create table RM_TABLESPACE_RATE
(
  tablespace_name              VARCHAR2(100),
  sum_mb               VARCHAR2(100),
  used_mb              VARCHAR2(100),
  free_mb              VARCHAR2(100),
  percent_used              VARCHAR2(100)
)
tablespace TZQ
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

select * from RM_TABLESPACE_RATE t
order by to_number(sum_mb) desc;

10.2. Crie um trabalho e salve GET_AND_SEND_VIO_JDCZP(), execute às 17:36 todos os dias

– Armazene GET_AND_SEND_VIO_JDCZP com este

DECLARE
  job_num NUMBER;
BEGIN
  dbms_job.submit(job_num
                 ,'GET_AND_SEND_VIO_JDCZP;'
                 ,SYSDATE
                 ,'TRUNC(sysdate+1)+17.6/24'); --每天17:36执行
  COMMIT;
END;

10.3 Em tzq/[email protected]/tzq, 11.71.253.126, crie uma tabela.

11.71.253.66 e 11.71.253.126

-- Create table
create table DEV_EQUIPMENT_ALARM
(
  cjsj   VARCHAR2(100),
  sbbh   VARCHAR2(100) not null,
  glbm   VARCHAR2(100) not null,
  sbmc   VARCHAR2(1000) not null,
  sblx   VARCHAR2(100) not null,
  splx   VARCHAR2(100),
  jd     VARCHAR2(100),
  wd     VARCHAR2(100),
  yjlx   VARCHAR2(1000) not null,
  yjsj   DATE not null,
  jqms   VARCHAR2(2000) not null,
  csbj   VARCHAR2(1) not null,
  bjcsbj VARCHAR2(1) not null
)
tablespace TZQ
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
drop table DEV_EQUIPMENT_ALARM purge;
create table DEV_EQUIPMENT_ALARM
(
  zd   VARCHAR2(200),
  sl   VARCHAR2(100) not null
)
tablespace TZQ
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
/

10.4 Crie e salve em 11.71.253.126.

----126

CREATE OR REPLACE PROCEDURE sent_rm_tablespace_rate_mail
(v_mail in varchar2)
AUTHID CURRENT_USER is
  v_today VARCHAR2(50);      --今天的文本
  v_today2 VARCHAR2(50);      --今天的文本2
  v_file_name VARCHAR2(500); --文件全名称
begin
  select to_char(sysdate,'yyyymmdd') into v_today from dual;
  select to_char(sysdate,'yyyy-mm-dd') into v_today2 from dual;
  v_file_name:='E:\tzq\wf\report\'||v_today||'-集成表空间使用率统计.html';
  dbms_output.put_line('v_file_name:'||v_file_name);
  P_SEND_MAIL('【荆州市交管局】-集成平台-集成违法图片表数据量统计('||v_today2||')',--邮件正文
              '【荆州市交管局】-集成平台-集成违法图片表数据量统计('||v_today2||')',--邮件标题
              'tttzzzqqq2019@163.com',--发送邮箱
              v_mail,--接收邮箱
              'smtp.163.com',
              25,
              1,
              'tttzzzqqq2019@163.com',--发送邮箱的账号
              'xxxxxxx',--发送邮箱的密码
              v_file_name, --文件
              'base64');
end;

10.4. Crie um trabalho e salve GET_AND_SEND_VIO_JDCZP(), execute às 17:54 todos os dias

DECLARE job_num number;
begin
  dbms_job.submit(job_num,'sent_rm_tablespace_rate_mail(''[email protected]'');',sysdate,'TRUNC(sysdate+1)+17.85/24');--每天17:54执行
  commit;
end;
/
call sent_rm_tablespace_rate_mail('[email protected]');

---立即执行一次
begin
dbms_job.run(26);
commit;
end;
/

10.5. Crie e salve sent_dev_equipment_alarm_mail()

CREATE OR REPLACE PROCEDURE sent_dev_equipment_alarm_mail
(v_mail in varchar2)
AUTHID CURRENT_USER is
  v_today VARCHAR2(50);      --今天的文本
  v_today2 VARCHAR2(50);      --今天的文本2
  v_file_name VARCHAR2(500); --文件全名称
begin
  select to_char(sysdate,'yyyymmdd') into v_today from dual;
  select to_char(sysdate,'yyyy-mm-dd') into v_today2 from dual;
  v_file_name:='E:\tzq\wf\report\'||v_today||'-集成设备运行情况表.html';
  dbms_output.put_line('v_file_name:'||v_file_name);
  P_SEND_MAIL('【荆州市交管局】-集成平台-集成设备运行情况表('||v_today2||')',--邮件正文
              '【荆州市交管局】-集成平台-集成设备运行情况表('||v_today2||')',--邮件标题
              'tttzzzqqq2019@163.com',--发送邮箱
              v_mail,--接收邮箱
              'smtp.163.com',
              25,
              1,
              'tttzzzqqq2019@163.com',--发送邮箱的账号
              'xxxxxxx',--发送邮箱的密码
              v_file_name, --文件
              'base64');
end;

10.6. Crie um trabalho e salve sent_dev_equipment_alarm_mail() e execute-o às 17:54 todos os dias

DECLARE job_num number;
begin
  dbms_job.submit(job_num,'sent_dev_equipment_alarm_mail(''[email protected]'');',sysdate,'TRUNC(sysdate+1)+17.95/24');--每天17:54执行
  commit;
end;
/
call sent_rm_tablespace_rate_mail('[email protected]');

call sent_dev_equipment_alarm_mail('[email protected]');

11. Crie e salve GET_AND_SEND_VIO_JDCZP() em ti/[email protected]/jzjjinf

ti/[email protected]/jzjjinf

create or replace procedure GET_AND_SEND_VIO_JDCZP
as
begin
droptable_ifexists('RM_VIO_JDCZP_AND_HIS');
execute immediate '
create table RM_VIO_JDCZP_AND_HIS as
select TO_CHAR(SYSDATE,''yyyymmdd-hh24miss'') RQ,''1_vio_jdczp_his'' bm,to_char(lrsj,''yyyymmdd'') sj,count(1) sl from vio_jdczp_his@rm t
group by to_char(lrsj,''yyyymmdd'')
union all
select TO_CHAR(SYSDATE,''yyyymmdd-hh24miss'') RQ,''2_vio_jdczp'' bm,to_char(lrsj,''yyyymmdd'') sj,count(1) sl from vio_jdczp@rm t
group by to_char(lrsj,''yyyymmdd'')
order by 2,3
';
dbms_utility.exec_ddl_statement@to66('truncate table RM_VIO_JDCZP_AND_HIS');
execute immediate 'insert into RM_VIO_JDCZP_AND_HIS@to66
select * from RM_VIO_JDCZP_AND_HIS
';
commit;

droptable_ifexists('RM_TABLESPACE_RATE');
execute immediate '
create table RM_TABLESPACE_RATE as
select a.tablespace_name,a.bytes/1024/1024 sum_mb,(a.bytes-b.bytes)/1024/1024 used_mb,b.bytes/1024/1024 free_mb,
round(((a.bytes-b.bytes)/a.bytes)*100,2) percent_used
from
(select tablespace_name,sum(bytes) bytes from dba_data_files@rm group by tablespace_name) a,
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space@rm group by tablespace_name) b
where a.tablespace_name=b.tablespace_name
order by a.bytes desc,((a.bytes-b.bytes)/a.bytes) desc
';
dbms_utility.exec_ddl_statement@to66('truncate table RM_TABLESPACE_RATE');
execute immediate 'insert into RM_TABLESPACE_RATE@to66
select * from RM_TABLESPACE_RATE order by to_number(sum_mb) desc
';
commit;

droptable_ifexists('DEV_EQUIPMENT_ALARM');
execute immediate '
create table DEV_EQUIPMENT_ALARM as
select ''卡口-一大队-无数据上传'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''421003%'') 
and jqms like ''%无数据上传%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''卡口-一大队-数据上传延迟'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''421003%'') 
and jqms like ''%数据上传延迟%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''卡口-二大队-无数据上传'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''42100201%'') 
and jqms like ''%无数据上传%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''卡口-二大队-数据上传延迟'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''42100201%'') 
and jqms like ''%数据上传延迟%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''卡口-三大队-无数据上传'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''42100201%'') 
and jqms like ''%无数据上传%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''卡口-三大队-数据上传延迟'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select t.kkbh from DEV_TOLLGATE@RM t where t.kkzt=''1'' and  t.glbm like ''42100201%'') 
and jqms like ''%数据上传延迟%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
UNION ALL
select ''执法-一大队-经纬度字符不合法'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''421003%'') 
and jqms like ''%经纬度字符不合法%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法-一大队-经纬度精度少于4位'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''421003%'') 
and jqms like ''%经纬度精度少于4位%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法-一大队-从未上传过数据'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''421003%'') 
and jqms like ''%从未上传过数据%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法-一大队-上传数据中断'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''421003%'') 
and jqms like ''%上传数据中断%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_二大队-经纬度字符不合法'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100201%'') 
and jqms like ''%经纬度字符不合法%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_二大队-经纬度精度少于4位'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100201%'') 
and jqms like ''%经纬度精度少于4位%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_二大队-从未上传过数据'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100201%'') 
and jqms like ''%从未上传过数据%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_二大队_上传数据中断'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100201%'') 
and jqms like ''%上传数据中断%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_三大队-经纬度字符不合法'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100202%'') 
and jqms like ''%经纬度字符不合法%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_三大队-经纬度精度少于4位'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100202%'') 
and jqms like ''%经纬度精度少于4位%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_三大队-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100202%'') 
and jqms like ''%同一经纬度设备超过2个%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_三大队-从未上传过数据'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100202%'') 
and jqms like ''%从未上传过数据%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''执法_三大队_上传数据中断'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in (select sbbh from DEV_VIO_EQUIPMENT@RM where zt=''1'' and glbm like ''42100202%'') 
and jqms like ''%上传数据中断%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
UNION ALL
select ''一大队-视频设备-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%''
union all
select ''一大队-摄像机-总量'' zd,count(1) from DEV_VGAT_POSITION_CAMERA@RM b
where b.dwzt=''1'' and b.dwxh in (
select a.dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%'')
union all
select ''一大队-视频设备-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%'') and jqms like ''%同一经纬度设备超过2个%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''一大队-视频设备-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%'') and jqms like ''%视频离线%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''一大队-视频设备-互信互通-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%'')
union all
select ''一大队-视频设备-互信互通-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%同一经纬度设备超过2个%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))
union all
select ''一大队-视频设备-互信互通-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%视频离线%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''421003%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))
union all
select ''二大队-视频设备-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%''
union all
select ''二大队-摄像机-总量'' zd,count(1) sl from DEV_VGAT_POSITION_CAMERA@RM b
where b.dwzt=''1'' and b.dwxh in (
select a.dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%'')
union all
select ''二大队-视频设备-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%'') and jqms like ''%同一经纬度设备超过2个%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''二大队-视频设备-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%'') and jqms like ''%视频离线%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''二大队-视频设备-互信互通-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%'')
union all
select ''二大队-视频设备-互信互通-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%同一经纬度设备超过2个%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))
union all
select ''二大队-视频设备-互信互通-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%视频离线%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100201%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))
union all
select ''三大队-视频设备-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%''
union all
select ''三大队-摄像机-总量'' zd,count(1) sl from DEV_VGAT_POSITION_CAMERA@RM b
where b.dwzt=''1'' and b.dwxh in (
select a.dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%'')
union all
select ''三大队-视频设备-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%'') and jqms like ''%同一经纬度设备超过2个%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''三大队-视频设备-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%'') and jqms like ''%视频离线%''
and t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
union all
select ''三大队-视频设备-互信互通-总量'' zd,count(1) sl from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%'')
union all
select ''三大队-视频设备-互信互通-设备预警-同一经纬度设备超过2个'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%同一经纬度设备超过2个%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))
union all
select ''三大队-视频设备-互信互通-设备预警-视频离线'' zd,count(1) sl from DEV_EQUIPMENT_ALARM@RM t
where t.yjsj>=to_date(to_char(sysdate,''yyyymmdd'')||'' 00:00:00'',''yyyymmdd hh24:mi:ss'')
and   t.yjsj<=to_date(to_char(sysdate,''yyyymmdd'')||'' 23:59:59'',''yyyymmdd hh24:mi:ss'')
and   t.sblx=''03'' and t.jqms like ''%视频离线%''
and sbbh in ( select dwxh from DEV_VGAT_POSITION@RM a
where a.dwzt=''1'' and a.glbm like ''42100202%''
and (szdd like ''荆州市沙市区__-%'' or szdd like ''荆州市荆州区__-%'' or szdd like ''荆州市市辖区__-%''))

';
dbms_utility.exec_ddl_statement@to66('truncate table DEV_EQUIPMENT_ALARM');
execute immediate 'insert into DEV_EQUIPMENT_ALARM@to66
select * from DEV_EQUIPMENT_ALARM
';
commit;

end;

Até agora, as estatísticas de dados do Oracle informam o esquema de envio automático, a demonstração está completa! Por favor, deixe uma mensagem se você tiver alguma dúvida, obrigado!

Acho que você gosta

Origin blog.csdn.net/tttzzzqqq2018/article/details/132247881
Recomendado
Clasificación