ネットワーク エンジニアリングおよびモノのインターネットの専攻に適用可能
目次
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 言語の変更は柔軟に使用する必要があり、コードの使用とクエリ、ビュー、ストレージ トリガーの適用はより柔軟でなければなりません。
一部のクエリでは、データベースでデカルト相関演算を使用して解決する必要があります。
考えられる質問:
- すべての営業担当者よりも多くの収入を得ている従業員の名前、職業、給与を調べます。 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. まとめと経験
- 実験中にいくつかのコマンド実行エラーが発生し、後で独自の関連コマンドの使用に誤りがあることがわかります。
- 実験中は、授業で説明したコマンドを統合して適応させる必要があります。
- 同時に、実験中に注意を払い、問題が発生するすべてのプロセスを分析して要約し、教室での知識を使用して問題を解決する必要があります。
7. 実験プロセス、方法、手段を改善するための提案
1. さらに、学習した知識を習得するために、いくつかの SQL 言語演習を適切に追加できます。
2. 実験ステップの関連部分にはコードを与えず、学生が自分でコードを書くことをお勧めします。