水力発電管理オラセル研究ノート

インストール

ここに写真の説明を挿入
Mumu0407
ここに写真の説明を挿入

Mumu0407
ここに写真の説明を挿入

オラセル

問題:

1.デッドロック
理由:デッドロックが発生しました。
ここに写真の説明を挿入
解決策:https://blog.csdn.net/qq_34664202/article/details/80462254

2.テーブルの関係
ここに写真の説明を挿入
理由:見つかりません
解決策:sqlステートメントを使用します

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

Oracleステートメント

1.クエリ

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

1.1挿入にネストされたクエリ

挿入するテーブル名に挿入(フィールド1、フィールド2)
テーブル名からフィールド1、フィールド2を選択します。

2.グループ化機能

1. AVG-平均
2、COUNT-カウント
3、MAX-最大
4、MIN-最小
5、SUM-合計

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

2.1毎月の合計

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.外部キーを追加します

テーブルを変更して外部キーテーブルを
追加します制約を追加します外部キーエイリアス(外部キーFK_テーブル名の名前を取ります)
外部キー(外部キーフィールド)
は、接続するテーブル(親テーブル)(親テーブルのフィールド)の名前を参照します。

4.表示

4.1。役割

マルチテーブルの事前定義されたクエリに基づいて、これらのチェックされたテーブルはベーステーブルと呼ばれ
ます。DML(データ管理言語)操作は
、ビューを介しベーステーブルで実行できます。ビューで情報を取得する方法は、ベーステーブルから情報を取得する方法とまったく同じです。

注:ビューにはデータがなく、仮想テーブルと見なされます。ビューはベーステーブルの行にのみアクセスします

適用対象:取得したデータを確認する

利点:
ユーザーがビューを介してのみデータを取得するように制限して、ユーザーが基になるベーステーブルを表示できないようにします。
複雑なクエリをビューとしてコンパイルしてSQLの複雑さを軽減します。
セキュリティを実現するために、ベーステーブルのデータの一部のみにアクセスするようにユーザーを制限します。

4.2、ビューの使用

作成:

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

エラーが発生しました:グループ化関数の合計がここに写真の説明を挿入
正しく使用されました:ビューshitu2をselect DAILY_ID、DAILY_DATE、POWER_MAKE from ST_WATPOW_REP_DAILY where DAILY_ID <10として作成します。

削除:ビュービュー名を削除します。

5.なじみのない機能

5.1NVL機能

nvl(e1、e2)e1
の計算結果がnull値の場合、NVL()はe2を返します。e1の計算結果がnull値でない場合は、e1を返します。e1とe2は任意のデータタイプにすることができます。e1とe2の結果が両方ともnull値の場合、NVL()は.NULLを返します。

5.2ロールアップによるグループ化

グループ化後のロールアップ句の機能は、次のように理解できます。最初に特定のルールに従って複数のグループを生成し、次にさまざまなグループに従って統計データを生成します。さらに、グループ化後にロールアップ句によって返される結果セットは、各グループとして理解できます。重複データを削除せずに生成された結果セットの和集合。

5。3日付機能

日付変換:to_date( '変換される日付'、 'yy-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、バッグ、バッグ本体

6.1関係

1.パッケージ(パッケージ):Oracleのパッケージは、データベース内の関数とプロシージャを分類するために使用されます(JAVAのインターフェイスと同様)。パッケージ内の関数とプロシージャは、具体的に指定せずに宣言するだけで済みます。操作ステートメント(JAVAの抽象メソッドに類似)。

2.パッケージ本体(パッケージ本体):パッケージのみ、パッケージ内の関数とプロシージャを操作することはできません。特定の実装ステートメントが提供されていないためであるため、パッケージ内の関数とプロシージャを使用する場合は、それをパッケージ本体にインスタンス化し、内部の関数とプロシージャを再定義します(JAVAでクラスを作成してインターフェースを実装し、メソッドを書き直すのと同じです)。

6.2作成

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トリガー

7.1役割

トリガーは、この「トリガーイベント」を介して実行されます(ストアードプロシージャの呼び出しまたは実行は、ユーザーまたはアプリケーションによって実行されます)。トリガーを実行させる可能性のある操作は、DMLステートメントの実行(テーブルまたはビューでデータ処理操作を実行するためにINSERT、UPDATE、DELETEステートメントを使用)などの「トリガーイベント」と呼ばれます。データベース内のDDLステートメント(CREATE、ALTER、DROPステートメント)の実行スキーマオブジェクトの作成、変更、および削除);データベースシステムイベントのトリガー(システムの起動または終了、異常エラーなど);ユーザーイベントのトリガー(データベース操作のログインまたは終了など)。

7.2構文

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

7.3タイプ

ステートメントレベル、行レベル、置換、ユーザーイベント、システムイベント

8.プロセス

8.1カーソル

1.1。カーソルの宣言
DECLEARセクションで、次の形式でカーソル宣言します。CURSOR
カーソル名[(パラメーター1データタイプ[、パラメーター2データタイプ...])]
IS SELECTステートメント;
パラメーターはオプションの部分であり、定義されたパラメーターはSELECTステートメントに表示できます。 WHERE句内。パラメータが定義されている場合、カーソルを開くときに対応する実際のパラメータを渡す必要があります。
SELECTステートメントは、テーブルまたはビューに対するクエリステートメント、あるいは共同クエリです。WHERE条件、ORDER BY、GROUP BYなどの句を含めることはできますが、INTO句は使用できません。カーソルが定義される前に定義された変数は、SELECTステートメントで使用できます。
2.2。カーソル
開く実行可能セクションで、次の形式でカーソル開きます
。OPENカーソル名[(実際のパラメーター1 [、実際のパラメーター2 ...])];
カーソルを開くと、SELECTステートメントのクエリ結果がカーソル作業領域に転送されます。
3.3。データの取得
実行可能部分で、カーソル作業領域のデータを次の形式の変数に取得します。フェッチ操作は、カーソルを開いた後に実行する必要があります。
FETCHカーソル名INTO変数名1 [、変数名2…];
または
FETCHカーソル名INTOレコード変数;
カーソルを開いた後、データ領域へのポインターがあり、FETCHステートメントは一度にポインターが指すデータの1行を返し、複数の行を繰り返す必要があります実行は、ループステートメントを使用して実現できます。制御ループは、カーソルの特性を判断することで実行できます。
2つの形式について以下に説明します。
最初の形式の変数名は、カーソルからデータを受信するために使用される変数であり、事前に定義する必要があります。変数の数とタイプは、SELECTステートメントのフィールド変数の数とタイプと一致している必要があります。
2番目の形式は、一度に1行のデータをレコード変数にフェッチします。%ROWTYPEを使用してレコード変数を事前に定義する必要があります。この形式の方が使いやすく、複数の変数を個別に定義して使用する必要はありません。
レコード変数を定義する方法は次のとおりです。
変数名テーブル名|カーソル名%ROWTYPE;
テーブルが存在し、カーソル名を最初に定義する必要があります。
4.4。カーソルを
閉じるカーソル名を閉じます
明示的なカーソルを開いた後は、明示的に閉じる必要があります。カーソルを閉じると、カーソルが占めていたリソースが解放され、カーソルが無効になり、使用する前に再度開く必要があります。

8.2作成プロセス

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、同義語

エイリアスと同様に、これはマッピング関係です。複数のユーザーが1つのテーブルを使用できます。
ここに写真の説明を挿入

10.データベースのバックアップとリカバリ

バックアップ

在命令行中输入命令:

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

命令详细如下:

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

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

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

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

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

戻す

在命令行中输入命令

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

命令详细如下:

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

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

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

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

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

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

11.練習コード:

11.1表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プロセス

作成:

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;

保存されたプロシージャをテストするときに、ORA-24338エラーが発生しました。カーソルを閉じるステートメントを削除すると、正常に実行できます。
ここに写真の説明を挿入

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パッケージとインクルージョンプロセス

パッケージ:

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;

パッケージ本体:

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テーブルを作成するためのパッケージ本体の保存手順

元に戻す

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);

おすすめ

転載: blog.csdn.net/Wendy_i/article/details/109337526