Notas de estudio de gestión de energía hidroeléctrica oracel

instalación

Inserte la descripción de la imagen aquí
Mumu0407
Inserte la descripción de la imagen aquí

Mumu0407
Inserte la descripción de la imagen aquí

Oracel

problema:

1.
Razón del punto muerto : se produjo un punto muerto.
Inserte la descripción de la imagen aquí
Solución: https://blog.csdn.net/qq_34664202/article/details/80462254

2. Relación de la tabla
Inserte la descripción de la imagen aquí
Razón: no encontrado.
Solución: use la instrucción sql

alter table 要添加外键的表
add constraint 外键别名(给这个外键取个名字 FK_表名)
foreign key (外键字段)
references 要连接的表名(父表)(父表的字段);

Declaración de Oracle

1. Consulta

select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]
select  POWER_MAKE from ST_WATPOW_REP_DAILY where DAILY_ID=1;

1.1 Consulta anidada en inserción

insertar en el nombre de la tabla a insertar (campo 1, campo 2)
seleccionar el campo 1, campo 2 del nombre de la tabla;

2. Función de agrupación

1. AVG-promedio
2, COUNT-count
3, MAX-máximo
4, MIN-mínimo
5, SUM-sum

SELECT AVG(POWER_MAKE)*/SUM(POWER_MAKE)/MAX(POWER_MAKE)/MIN(POWER_MAKE)/COUNT(POWER_MAKE)*
FROM   ST_WATPOW_REP_DAILY;

2.1 Total mensual

select SUM(POWER_MAKE) 
from ST_WATPOW_REP_DAILY 
where DAILY_DATE between to_date('2020-10-01','yy-mm-dd') and to_date('2020-10-31','yy-mm-dd');

3. Agregar claves externas

alterar tabla para agregar una tabla de clave externa
agregar restricción alias de clave externa (tomar un nombre para la clave externa FK_ nombre de tabla)
clave externa (campo de clave externa) hace
referencia al nombre de la tabla que se conectará (tabla principal) (el campo de la tabla principal);

4. Ver

4.1. Rol

Según una consulta predefinida de varias tablas, estas tablas comprobadas se denominan tablas base
. Las operaciones de DML (lenguaje de gestión de datos) se pueden realizar en la tabla base a través de
la vista. El método para recuperar información en la vista es exactamente el mismo que para recuperar información de la tabla base

Nota: la vista no tiene datos, se considera una tabla virtual, la vista solo accederá a las filas de la tabla base

Se aplica a: comprobar los datos recuperados

Ventajas:
Restrinja a los usuarios para que solo recuperen datos a través de vistas, de modo que los usuarios no puedan ver la tabla base subyacente.
Compile consultas complejas como vistas, reduzca la complejidad de SQL.
Restrinja a los usuarios para que solo accedan a parte de los datos en la tabla base para lograr seguridad

4.2, el uso de vistas

crear:

create view shitu
as select  DAILY_ID,DAILY_DATE,SUM(POWER_MAKE) from ST_WATPOW_REP_DAILY;

Se produjo un error: la suma de la función de agrupación se usó Inserte la descripción de la imagen aquí
correctamente: cree la vista shitu2 como seleccione DAILY_ID, DAILY_DATE, POWER_MAKE de ST_WATPOW_REP_DAILY donde DAILY_ID <10;

Eliminar: nombre de vista de vista desplegable;

5. Funciones desconocidas

5.1 función NVL

nvl (e1, e2)
Si el resultado del cálculo de e1 es un valor nulo, NVL () devuelve e2. Si el resultado del cálculo de e1 no es un valor nulo, devuelve e1. e1 y e2 pueden ser de cualquier tipo de datos. Si los resultados de e1 y e2 son valores nulos, NVL () devuelve .NULL ..

5.2 agrupar por resumen

La función de la cláusula acumulada tras grupo por puede entenderse como: primero generar múltiples grupos según ciertas reglas, y luego datos estadísticos según varios grupos, además, el conjunto de resultados devuelto por la cláusula acumulada tras grupo por puede entenderse como cada grupo La unión de los conjuntos de resultados producidos sin eliminar datos duplicados.

5.3 Función de fecha

Conversión de fecha: to_date ('fecha para convertir', 'aa-mm-dd hh-mm-ss')

select DAILY_ID,sum(POWER_MAKE),MACHINE_INFO 
from ST_WATPOW_REP_DAILY where DAILY_DATE 
between to_date('2020-10-01','yy-mm-dd') and to_date('2020-10-31','yy-mm-dd') group by POWER_MAKE; 

6, bolsa, cuerpo de bolsa

6.1 Relación

1. Paquete (Paquete): El paquete en Oracle se usa para clasificar funciones y procedimientos en la base de datos (similar a la interfaz en JAVA). Las funciones y procedimientos en el paquete solo necesitan ser declarados, sin especificar Declaración de operación (similar al método abstracto en JAVA).

2. Cuerpo del paquete (cuerpo del paquete): solo el paquete, no podemos operar las funciones y procedimientos en el paquete, debería ser porque no dieron declaraciones de implementación específicas, por lo que si desea usar las funciones y procedimientos en el paquete, necesita Crea una instancia en el cuerpo de un paquete y reifica las funciones y los procedimientos en su interior (equivalente a crear una clase en JAVA para implementar una interfaz y reescribir los métodos).

6.2 Creación

create or replace package bao is

  -- Author  : MUMU
  -- Created : 2020/10/29 16:42:24
  -- Purpose : 
  
  -- Public type declarations 公共类型申明
  type <TypeName> is <Datatype>;
  
  -- Public constant declarations
  <ConstantName> constant <Datatype> := <Value>;

  -- Public variable declarations 公共变量申明
  <VariableName> <Datatype>;

  -- Public function and procedure declarations
  function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;

end bao;
create or replace package body baoti is

  -- Private type declarations
  type <TypeName> is <Datatype>;
  
  -- Private constant declarations
  <ConstantName> constant <Datatype> := <Value>;

  -- Private variable declarations
  <VariableName> <Datatype>;

  -- Function and procedure implementations
  function <FunctionName>(<Parameter> <Datatype>) return <Datatype> is
    <LocalVariable> <Datatype>;
  begin
    <Statement>;
    return(<Result>);
  end;

begin
  -- Initialization
  <Statement>;
end baoti;

7 gatillo

7.1 Rol

El disparador se ejecuta a través de este "evento disparador" (y el usuario o la aplicación realiza la llamada o ejecución del procedimiento almacenado). La operación que puede hacer que se ejecute el disparador se denomina "evento disparador", como ejecutar sentencias DML (utilizando sentencias INSERT, UPDATE, DELETE para realizar operaciones de procesamiento de datos en tablas o vistas); ejecutar sentencias DDL (sentencias CREATE, ALTER, DROP en la base de datos Crear, modificar y eliminar objetos de esquema); desencadenar eventos del sistema de la base de datos (como inicio o salida del sistema, errores anormales, etc.); desencadenar eventos de usuario (como iniciar o salir de la base de datos).

7.2 Sintaxis

create or replace trigger INSERT_Test
  after insert
  on onetest 
  for each row
declare
  -- local variables here定义参数
  
begin
  --触发语句
  ;
end INSERT_Test;

7.3 Tipo

Nivel de declaración, nivel de línea, reemplazo, evento de usuario, evento del sistema

8. Proceso

8.1 Cursor

1. Declarar el cursor
En la sección DECLEAR, declare el cursor en el siguiente formato:
CURSOR nombre del cursor [(tipo de datos del parámetro 1 [, tipo de datos del parámetro 2 ...])]
instrucción IS SELECT; los
parámetros son partes opcionales, y los parámetros definidos pueden aparecer en la instrucción SELECT En la cláusula WHERE. Si se definen parámetros, se deben pasar los parámetros reales correspondientes al abrir el cursor.
La instrucción SELECT es una instrucción de consulta en una tabla o vista, o incluso una consulta conjunta. Se pueden incluir cláusulas como las condiciones WHERE, ORDER BY o GROUP BY, pero no se pueden utilizar cláusulas INTO. Las variables definidas antes de definir el cursor se pueden utilizar en la instrucción SELECT.
2. Abrir el cursor
En la sección ejecutable, abra el cursor en el siguiente formato:
OPEN nombre del cursor [(parámetro actual 1 [, parámetro actual 2 ...])]; Cuando
se abre el cursor, el resultado de la consulta de la instrucción SELECT se transfiere al área de trabajo del cursor.
3. Recuperando datos
En la parte ejecutable, recupere los datos en el área de trabajo del cursor en variables en el siguiente formato. La operación de búsqueda debe realizarse después de abrir el cursor.
BUSCAR nombre del cursor EN el nombre de la variable 1 [, nombre de la variable 2…];
o
BUSCAR el nombre del cursor en la variable de registro;
después de que se abre el cursor, hay un puntero al área de datos, la instrucción FETCH devuelve una fila de datos señalados por el puntero a la vez, y es necesario repetir varias filas La ejecución se puede lograr utilizando declaraciones de bucle. El bucle de control puede realizarse juzgando las propiedades del cursor.
Los dos formatos se describen a continuación:
El nombre de la variable en el primer formato es la variable utilizada para recibir datos del cursor y debe definirse de antemano. El número y tipo de variables deben ser coherentes con el número y tipo de variables de campo en la instrucción SELECT.
El segundo formato obtiene una fila de datos en la variable de registro a la vez. Es necesario usar% ROWTYPE para definir la variable de registro por adelantado. Este formulario es más conveniente de usar y no es necesario definir y usar varias variables por separado.
El método para definir variables de registro es el siguiente:
nombre de variable nombre de tabla | nombre de cursor% ROWTYPE;
la tabla debe existir y el nombre del cursor debe definirse primero.
4. Cerrar el cursor
CERRAR el nombre del cursor;
después de abrir un cursor explícito, debe cerrarse explícitamente. Una vez que el cursor está cerrado, los recursos ocupados por el cursor se liberan, el cursor se vuelve inválido y debe ser reabierto antes de que pueda usarse.

8.2 Proceso de creación

create or replace procedure P_getDates(S_RQ date,RE out sys_refcursor)
as --输入输出存储过程
begin
  open RE for
    select f.站点名称,g.当日,f.月累
from 
 (select nvl(s.DEPARTMENT,'油田发电量合计') as 站点名称, /* e.attr_set_id,*/sum(e.input_value)  as 月累
from ST_WATPOW_REP_ELEC_ATTR_SET s,ST_WATPOW_REP_DAILY d,ST_WATPOW_REP_ART_INP_ACT_ELEC e 
where d.daily_id=e.daily_id and d.daily_date=S_RQ and s.attr_set_id=e.attr_set_id  and s.SET_ATTR='发电'  --or  */replace(s.SET_ATTR,chr(9),'')='外购'
group by  rollup(s.DEPARTMENT)--, e.attr_set_id
)  f  left join
(select  c.department as department,a.attr_set_id  as attr_set_id,a.input_value  as 当日
from ST_WATPOW_REP_ART_INP_ACT_ELEC a,ST_WATPOW_REP_DAILY b ,ST_WATPOW_REP_ELEC_ATTR_SET c
where a.daily_id=b.daily_id and b.daily_date=S_RQ and c.set_attr='发电' and c.attr_set_id=a.attr_set_id
order by a.attr_set_id)  g  on  f.站点名称 =  g.department;
close RE;
end P_getDates;

9, sinónimos

Similar a un alias, es una relación de mapeo. Varios usuarios pueden usar una tabla.
Inserte la descripción de la imagen aquí

10. Copia de seguridad y recuperación de la base de datos

Apoyo

在命令行中输入命令:

EXP username/userpassword@orcl file=D:\201806041148.dmp tables=(tableName1,tableName2)

命令详细如下:

username:数据库用户名(必须)

userpassword:数据库用户密码(必须)

orcl:需备份的数据库的服务标识名(必须)

file:备份文件的全路径名称,可根据需要修改(必须)

tables:可填写需备份的表名,多个以‘,’分隔(可选)

restaurar

在命令行中输入命令

imp username/userpassword@orcl  file=D:\201806041148.dmp tables=(tableName1,tableName2) FULL=Y

命令详细如下:

username:数据库用户名(必须)

userpassword:数据库用户密码(必须)

orcl:需恢复的数据库的服务标识名(必须)

file:备份文件的全路径名称,可根据需要修改(必须)

tables:可填写需备份的表名,多个以‘,’分隔(可选)

FULL:FULL=Y,表示恢复备份中的所有数据,(可选)

11. Código de práctica:

11.1 Tabla 1:

发电量统计:
select f.站点名称,g.当日,f.月累
from 
 (select nvl(s.DEPARTMENT,'油田发电量合计') as 站点名称, /* e.attr_set_id,*/sum(e.input_value)  as 月累
from ST_WATPOW_REP_ELEC_ATTR_SET s,ST_WATPOW_REP_DAILY d,ST_WATPOW_REP_ART_INP_ACT_ELEC e 
where d.daily_id=e.daily_id and d.daily_date between to_date('2020-10-01','YYYY-MM-DD') and to_date('2020-10-29','YYYY-MM-DD')
and s.attr_set_id=e.attr_set_id  and s.SET_ATTR='发电'  --or  */replace(s.SET_ATTR,chr(9),'')='外购'
group by  rollup(s.DEPARTMENT)--, e.attr_set_id
)  f  left join
(select  c.department as department,a.attr_set_id  as attr_set_id,a.input_value  as 当日
from ST_WATPOW_REP_ART_INP_ACT_ELEC a,ST_WATPOW_REP_DAILY b ,ST_WATPOW_REP_ELEC_ATTR_SET c
where a.daily_id=b.daily_id and b.daily_date=to_date('2020-10-27','YYYY-MM-DD') and c.set_attr='发电' and c.attr_set_id=a.attr_set_id
order by a.attr_set_id)  g  on  f.站点名称 =  g.department 

11.2 Proceso

crear:

create or replace procedure P_ST_WATPOW_REP_DAILY(Name in out type, Name in out type, ...) is
begin
  
end P_ST_WATPOW_REP_DAILY;
create or replace procedure getDates(S_RQ date,RE out sys_refcursor) 
as
begin

  
end getDates;

Al probar el procedimiento almacenado, se produjo un error ORA-24338. Después de eliminar la instrucción que cierra el cursor, puede ejecutarse normalmente.
Inserte la descripción de la imagen aquí

create or replace procedure P_getDates(S_RQ date,RE out sys_refcursor)
as
begin
  open RE for
    select f.站点名称,g.当日,f.月累
from 
 (select nvl(s.DEPARTMENT,'油田发电量合计') as 站点名称, /* e.attr_set_id,*/sum(e.input_value)  as 月累
from ST_WATPOW_REP_ELEC_ATTR_SET s,ST_WATPOW_REP_DAILY d,ST_WATPOW_REP_ART_INP_ACT_ELEC e 
where d.daily_id=e.daily_id and d.daily_date=S_RQ and s.attr_set_id=e.attr_set_id  and s.SET_ATTR='发电'  --or  */replace(s.SET_ATTR,chr(9),'')='外购'
group by  rollup(s.DEPARTMENT)--, e.attr_set_id
)  f  left join
(select  c.department as department,a.attr_set_id  as attr_set_id,a.input_value  as 当日
from ST_WATPOW_REP_ART_INP_ACT_ELEC a,ST_WATPOW_REP_DAILY b ,ST_WATPOW_REP_ELEC_ATTR_SET c
where a.daily_id=b.daily_id and b.daily_date=S_RQ and c.set_attr='发电' and c.attr_set_id=a.attr_set_id
order by a.attr_set_id)  g  on  f.站点名称 =  g.department;
end P_getDates;

11.3 Paquetes y proceso de inclusión

paquete:

create or replace package SDGLTest is

  -- Author  : MUMU
  -- Created : 2020/10/30 10:06:16
  -- Purpose : 
  
  -- Public type declarations
  --type <TypeName> is <Datatype>;
  type cur is ref cursor;
  
  -- Public constant declarations
  --<ConstantName> constant <Datatype> := <Value>;

  -- Public variable declarations
  --<VariableName> <Datatype>;
  S_RQ date;

  -- Public function and procedure declarations
  --function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;
  procedure P_getDates(S_RQ date,RE out sys_refcursor);

end SDGLTest;

Cuerpo del paquete:

create or replace package body SDGLTest is

procedure P_getDates(S_RQ date,RE out sys_refcursor) as
begin
  open RE for
    select f.站点名称,g.当日,f.月累
from  (select nvl(s.DEPARTMENT,'油田发电量合计') as 站点名称, /* e.attr_set_id,*/sum(e.input_value)  as 月累
from ST_WATPOW_REP_ELEC_ATTR_SET s,ST_WATPOW_REP_DAILY d,ST_WATPOW_REP_ART_INP_ACT_ELEC e 
where d.daily_id=e.daily_id and d.daily_date=S_RQ and s.attr_set_id=e.attr_set_id  and s.SET_ATTR='发电'  --or  */replace(s.SET_ATTR,chr(9),'')='外购'
group by  rollup(s.DEPARTMENT)--, e.attr_set_id
)  f  left join
(select  c.department as department,a.attr_set_id  as attr_set_id,a.input_value  as 当日
from ST_WATPOW_REP_ART_INP_ACT_ELEC a,ST_WATPOW_REP_DAILY b ,ST_WATPOW_REP_ELEC_ATTR_SET c
where a.daily_id=b.daily_id and b.daily_date=S_RQ and c.set_attr='发电' and c.attr_set_id=a.attr_set_id
order by a.attr_set_id)  g  on  f.站点名称 =  g.department;
end P_getDates;


end SDGLTest;

11.4 Procedimiento almacenado del cuerpo del paquete para construir una tabla

deshecho

insert into ONETEST(DEPARTMENT,INPUT_VALUE)
select s.department as DEPARTMENT,e.input_value as INPUT_VALUE
from ST_WATPOW_REP_ELEC_ATTR_SET s,ST_WATPOW_REP_ART_INP_ACT_ELEC e,ST_WATPOW_REP_DAILY d
where e.daily_id=d.daily_id and s.set_attr='外购' and s.attr_set_id=e.attr_set_id
order by e.attr_set_id;
insert into ONETEST(DEPARTMENT,INPUT_VALUE)
values ('测试',23333);

Supongo que te gusta

Origin blog.csdn.net/Wendy_i/article/details/109337526
Recomendado
Clasificación