インストール
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);