中国電子科学技術大学データベースおよびソフトウェア工学III

ネットワーク エンジニアリングおよびモノのインターネットの専攻に適用可能

目次

1. 実験目的

2. 実験内容

3. 実験用ソフトウェア

4. 実験手順とデータ記録

1. サブクエリ

2. 疑似カラム

3. データベースオブジェクト

4. ブロック、ストアド プロシージャ、トリガー

5. 実験の結論と疑問

実験結果:

考えられる質問:

6. まとめと経験

7. 実験プロセス、方法、手段を改善するための提案


1. 実験目的

1. サブクエリと共通関数を学びます。

2. データベース ビューの操作を理解します。

3. PL/SQL 言語を学習して、データベース ストアド プロシージャ、トリガーなどの操作を実装します。

2. 実験内容

 学生ユーザーを使用してSQL DeveloperでOracleデータベースに接続し、実験2でインポートしたEMPテーブル(従業員テーブル)、DEPTテーブル(部門テーブル)およびSALGRADEテーブル(給与等級テーブル)を使用してデータベース・サブクエリを実装します。 、ビュー、ストアド プロシージャの操作プロセス、トリガーなど。

3. 実験用ソフトウェア

Oracleデータベース、SQL開発者

4. 実験手順とデータ記録

1. サブクエリ

1) 営業部門 (SALES) の従業員の名前、役職、給与を照会します。

EMP から名前、役職、給与を選択してください

WHERE DEPTNO=(WHERE DNAME='Sales'から DEPTNO を選択);

結果は次のとおりです。

図1

2) EMP テーブル内の、どの営業マン (営業マン) よりも給与が低い (営業マン給与クエリ結果の最大値未満) 従業員の名前、職務、および給与をクエリします。

EMP から ENAME、JOB、SAL を選択してください

WHERE SAL

結果は次のとおりです。

図2

2. 疑似カラム

1) 従業員テーブルの上位 5 人の従業員の名前、役職、および給与をクエリします。

SELECT ROWNUM,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=5;

結果は次のとおりです。

画像3

2) 給与が最も高い上位 5 人の従業員の名前、給与、賃金をクエリします

から ROWNUM、T.* を選択してください

(名前、仕事、給与を選択してください

EMP からの注文 (SAL DESC) T

WHERE ROWNUM<=5;

結果は次のとおりです。

図4

3. データベースオブジェクト

1) EMP テーブルと DEPT テーブルに基づいて読み取り専用ビューを作成します。このビューには従業員番号、名前、役職、入社日、部門名のみが含まれ、従業員の給与、賞与、部門番号などの情報は非表示になります。

作成または置換 EMPDETAIL の表示

として

従業員名、名前、ジョブ、雇用日、DNAME を選択してください

FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO

読み取り専用の場合。

作成された EMPDETAIL ビューをクエリします。

結果は次のとおりです。

図5

2) EMP テーブルの ENAME 列に一意のインデックスを作成し、EMP テーブルの給与列に通常のインデックスを作成し、まず JOB 列を小文字に変更してからインデックスを作成します。< a i=1>。

EMP(ENAME) に一意のインデックス UQ_ENAEM_IDX を作成します。

EMP(SAL) にインデックス IDX_SAL を作成します。

CREATE INDEX IDX_JOB_LOWER ON EMP(LOWER(JOB));

 次の SELECT コマンドを使用して、テーブル EMP のインデックスを表示します。

SELECT INDEX_NAME、INDEX_TYPE、TABEL_OWNER、TABLE_NAME、UNIQUENESS

FROM USER_INDEXES WHERE TABLE_NAME='EMP';

結果は次のとおりです。

図6

4. ブロック、ストアド プロシージャ、トリガー

1) sname という名前の変数を宣言します。

宣言する

SNAME VARCHAR2(20):='ジェリー';

始める

SNAME:SNAME||'そしてトム';

DBMS_OUTPUT.PUT_LINE(sname);

終わり;

SQL でデータを出力する場合 *さらに、結果が表示されない場合もあります。set serveroutput on コマンドを使用して、 SQL a> Plus コンソールに出力します。 *

出力結果は図のようになります

図7

2) 従業員の総数を表示するストアド プロシージャを作成します。

プロシージャEMP_COUNTの作成または置換

として

V_合計数(10);

始める

EMP から V_TOTAL に COUNT(*) を選択します。

DBMS_OUTPUT.PUT_LINE('従業員の合計数は次のとおりです:'||V_TOTAL);

終わり;

ストアド・プロシージャを実行するには、SQL Developerの「実行」ボタンをクリックする必要があります。エラーがある場合は、「警告: 作成されたプロシージャにはコンパイル・エラーがあります。」と表示されます。エラーが存在する場合は、エラーが発生しなくなるまでスクリプトを変更します。コンパイル結果が正しければ「プロセスをコンパイルしました」と表示されます。

ストアド プロシージャを呼び出し、ワークシートに次のステートメントを入力して実行します。

結果は次のとおりです。

図8

 3) データベーストリガーを作成します。 EMP テーブルに対するすべての INSERT、UPDATE、および DELETE 操作をログに記録します。

CREATE TABLE EMP_LOG(

誰 varchar2(30)、

いつ日付);

トリガーEMP_OPの作成または置換

挿入、更新、削除の前に

オンEMP

始める

INSERT INTO EMP_LOG (誰が、いつ)

VALUES(ユーザー,sysdate);

END EMP_OP;

EMP テーブル更新操作を実行し、ログ テーブルを表示すると、結果は次のようになります。

図9

5. 実験の結論と疑問

実験結果:

SQL 言語の変更は柔軟に使用する必要があり、コードの使用とクエリ、ビュー、ストレージ トリガーの適用はより柔軟でなければなりません。

一部のクエリでは、データベースでデカルト相関演算を使用して解決する必要があります。

考えられる質問:

  1. すべての営業担当者よりも多くの収入を得ている従業員の名前、職業、給与を調べます。 SELECT コマンドを作成し、クエリ結果のスクリーンショットを添付してください。

 EMP から ENAME、JOB、SAL を選択してください

WHERE SAL>ALL (EMP WHERE JOB='Salesman'から SAL を選択);

クエリ結果は次のとおりです。

図10

2. EMPDETAILビューのNo.5からNo.10までのレコードを問い合せます。 SELECT コマンドを作成し、クエリ結果のスクリーンショットを提供してください。

SELECT *FROM (SELECT rownum no, EMPNO, ENAME, JOB, HIREDATE, DNAME FROM EMPDETAIL WHERE rownum<=10 ORDER BY rownum ASC) WHERE no>=5;

結果は次のとおりです。

図11

3. 給与が最も低い従業員の名前を表示するストアド プロシージャを作成します。ストアド プロシージャを作成するコードを記述し、ストアド プロシージャの実行結果のスクリーンショットを提供してください。

プロシージャ SAL_LOW の作成または置換

として

V_LOW STRING(20);

始める

SELECT ENAME INTO V_LOW FROM EMP WHERE ROWNUM=1 ORDER BY SAL ASC;

DBMS_OUTPUT.PUT_LINE('最低賃金:'||V_LOW);

終わり;

結果は次のとおりです。

図12

6. まとめと経験

  1. 実験中にいくつかのコマンド実行エラーが発生し、後で独自の関連コマンドの使用に誤りがあることがわかります。
  2. 実験中は、授業で説明したコマンドを統合して適応させる必要があります。
  3. 同時に、実験中に注意を払い、問題が発生するすべてのプロセスを分析して要約し、教室での知識を使用して問題を解決する必要があります。

7. 実験プロセス、方法、手段を改善するための提案

1. さらに、学習した知識を習得するために、いくつかの SQL 言語演習を適切に追加できます。

2. 実験ステップの関連部分にはコードを与えず、学生が自分でコードを書くことをお勧めします。

おすすめ

転載: blog.csdn.net/weixin_53284122/article/details/129219643