高度なステートメントOracleデータベース

-ビュー
-ビューは、問合せウィンドウは、元のテーブルからすべてのデータを提供しています

-テーブルのクエリ作成
からSELECT *スコットようなテーブルEMPを作成し
、EMPからSELECT *を; t.emp。

- ] DBA権限を持っている必要がありますビューを作成します
。SELECT ENAME、EMPからのジョブとして表示v_empを作成し
、クエリビュー-
v_empからSELECT *を;
-ビューの変更
ジョブ=「CLERK」WHERE ENAME =「ALLEN」SET v_empアップデートを、
コミット;
-読み取り専用作成ビュー
を選択ENAME、ジョブとしてビューv_emp1を作成するだけ読んでEMPから。

v_emp1から*を選択します。

-の役割を考慮
- 1は、ビューには敏感なフィールドを保護することができます
- 2、タイムリーかつ統一本社と支店のデータを確実にするために


-インデックス
-コンセプトのインデックス:インデックスは、テーブル内のカラム上のバイナリツリー構築する
-クエリの効率が最も大幅な増加を目的としますが、効率のインデックスに追加および削除に影響します
-単一ページのインデックス
-シングルトンを作成するための指標

-別のインデックストリガルール:条件はインデックス列の元の値でなければならない
-一方向性関数、ファジークエリがトリガインデックスが影響する
EMP(ENAME)のインデックスidx_enameを作成します 。

-複合インデックスは、
EMP(ENAME、上のインデックスidx_enamejob作成ジョブ)。

-インデックス・トリガーは、
ENAME =「EMPから選択* SCOTT」と仕事=「XX」; - コンポジットインデックストリガは
EMPからどこENAMEは=「選択* SCOTT」や仕事=「XX」; - インデックストリガしない
*選択をEMP ENAME =「SCOTT」から - ; 別のインデックスをトリガ

--pl / SQLプログラミング言語
-通常の手続き型プログラミング言語よりも効率的な
ストアドプロシージャを記述するために使用される主なプログラミング言語となっ--pl / SQL

-述べた方法
DECLARE
; = 10:私は番号(2)
= 'ボブ'; S VARCHAR2(10)
参照変数- ; ENAは%タイプEMP.ENAME

emprowのemp%の行型と、 -記録変数が
始まります


DBMS_OUTPUT.PUT_LINE(S);
DBMS_OUTPUT.PUT_LINE(I);
ここでEMPNO = 7788 EMPからENAにENAMEを選択します。
DBMS_OUTPUT.PUT_LINE(ENA)。

END;
--pl / SQLを分析することであるIF
-未満18のデジタル入力、出力マイナー
40のうち18の未満番号中年の出力よりも大きい-
-入力は、高齢者の出力40よりも大きいです


宣言
I番号(3):=&II。

開始
私は18を<あればある
DBMS_OUTPUT.PUT_LINE( 'マイナー');
ELSIF I <40その後、
DBMS_OUTPUT.PUT_LINE( '中年');
他の

DBMS_OUTPUT.PUT_LINE( '高齢');
END IF;
END;
- ----------------------
--PL循環SQL /
-出力番号3つの方法で1〜10
サイクル--while
DECLARE
I(数値2)= 1;
始める
Iに<しばらく11ループ。
DBMS_OUTPUT.PUT_LINE(I)、
I = I + 1;
エンドループ。


終わり;
--exit循环
DECLARE
iは(2)番号:= 1;
開始
ループ
終了のときに私> 11。
DBMS_OUTPUT.PUT_LINE(I);
I:= I + 1;
ループを終了します。

終わり;
循环--for
宣言

開始
1..10ループに私のために
DBMS_OUTPUT.PUT_LINE(I);
ループを終了します。
終わり;

 

-カーソルます。javaのコレクションと同様に
-出力EMP表の全従業員の名前が
DECLARE
カーソルのClはEMPからSELECT * IS;
のemp%のROWTYPEをemprow;
始める
オープンのClを、
ループ
emprow ClでのFETCH INTO;
のCl%のNOTFOUNDを終了します。
DBMS_OUTPUT.PUT_LINE(emprow.ename);
エンドループ;

閉じるClであり;

END;

-给指定部门员工涨工资
宣言
カーソルC2(%タイプEMP.DEPTNO ENO)を
EMP DEPTNO = ENOから選択EMPNOあります。
エンemp.empno%タイプ。

始まる
オープンC2(10)。
ループは、
専用にC2をフェッチします。
終了時にC2%NOTFOUND;
EMPセットSAL = SAL + 100 EMPNO = ENが更新します。
コミット;
ループを終了します。

近くC2;
終わり ;

-クエリ第10セクタの賃金
EMPからSELECT *をWHERE DEPTNO = 10;
-------------------------


-ストアドプロシージャ
-ストアドプロシージャ:予めデータベース側に配置されたPL / SQL言語のためにコンパイルされている
-直接PL / SQL一般固定手順のこの期間を呼び出すことができ

- 100ドル、指定のスタッフまで

プロシージャP1を作成したり、交換してください(ENO emp.empno%タイプ)

あります

開始
更新EMPセットSAL = SAL + 100 EMPNO = ENOと、
コミット;
終わり;

---テストP1

宣言し
始める
P1(7788);

END;
-ストアドプロシージャのクエリを使用すると、
EMPから選択*どこEMPNO = 7788 ;


-格納することによって、従業員の年収を計算する関数
関数f_yearsalを作成するか、または交換(ENO型emp.empno%)の番号リターンは
IS
Sナンバー(10);
始める
SELECT * SAL 12 + NVL(COMM、0)S INTO EMPからWHERE EMPNOありますENO =;
Sを返す;
END;

- テスト

宣言
の番号(10)。
開始
秒:= f_yearsal(7788)。
DBMS_OUTPUT.PUT_LINE(S);
終わり;


--out型パラメータがどのように使用する
-給与をカウントするストアドプロシージャを使用して
作成するか、(数OUT yearsal、ENO%のemp.empnoタイプ)手順p_yearsalを交換
IS
S番号(10);
C emp.comm%のタイプは、
開始
* SAL SELECT ;図12は、S、EMPNO EMPからC = ENO INTO NVL(0 COMM)である
= S + C; yearsal
; END

試験p_yearsalの-
DECLAREの
yearsal番号(10);
始める
p_yearsal(7788、yearsal);
DBMS_OUTPUT.PUT_LINE (yearsal);
END;

何--inとアウト型パラメータの違いはありますか?
-すべてのクエリに割り当てに関連するまたは=パラメータ割り当て、修飾2を使用しなければならない
------------- 44

-ストアド・プロシージャとストアド・ファンクションの差
-構文差:キーワードは同じではない
ストアドプロシージャより--------------記憶機能、さらに2つのリターン
------- -------本質的な違い:ストレージ機能が値を返す、ストアドプロシージャは値を返さない
ストアドプロシージャは、ビジネスの値を返す実装したい場合は、タイプを使用する必要があります--------------パラメータ


-私たちは、保存された関数は、関数の定義から、プロパティの値を返す使用することができ
、むしろ機能をカスタマイズするためにストアドプロシージャを使用するよりも-
;、従業員の部門名を従業員名をチェックアウト:ケースが必要-------
----準備作業、下の現在のユーザーへのscottユーザーの下で割り当てDEPTワークシート
; SCOTT.DEPTからSELECT * AS作成表dept
伝統的ケースは必要事項-
SELECT e.enameを、d.dname
EのEMP、DEPT dから
WHERE = d.deptno e.deptno;
-部門番号、部門名出力実装するストレージ機能を作成する
機能を作成するか(タイプのDNO DEPT.DEPTNO%)FDNAを交換タイプのdept.dname%を返すこと
IS
タイプのDNAのdept.dname%以下;
始める
DEPTNO = DNO部門からDNAへSELECT DNAMEと、
DNAを返す;
END;

-記憶機能の試験
SELECT e.ename、FDNA(e.deptno)
EMP Eから、
--------------------


-トリガー:私たちはCRUD操作、コールする必要はありません行うときに自動的にトリガ、ルールを指定します
-文トリガーは、行ごとに含まれていません
-行レベルのトリガ:行ごとに含まれても、行レベルのトリガであります
-古いか:新しいオブジェクト-プラス使用するための行ごとに

-トリガーの2種類
-文レベルのトリガ

-新しい従業員のレコード出力を挿入
トリガT1を作成するか交換
した後
INSERT
人物ON
DECLARE

開始
DBMS_OUTPUT.PUT_LINE( '新入社員を');
END;

-トリガーT1
INSERT INTO人値(1、 '赤');
コミット。

人から*選択します。

-行レベルトリガ
-カット従業員に賃金を与えることはできません
作成またはトリガーT2交換する
前に、
アップデート
オンEMP
各行に対して
DECLAREを

開始
old.sal>:IF:new.salその後、
RAISE_APPLICATION_ERROR(-20 001、 'カット従業員を支払うことではない');
END IF;
END;

-テスト・トリガ
EMPNO -1 = 7788更新SET SAL = SAL EMP;
-クエリ
SELECT * FROM EMPNO = 7788 EMPから 。


-トリガーは、主キーの増分を実装する
-分析:ユーザーが挿入する前に、中に挿入されるデータを取得する
-割り当てられた主キーのデータを
作成するか、またはトリガーSUID交換する
前に、
人ON INSERT
Row毎
DECLARE
始まる
SELECT INTOのs_person.nextvalを:デュアルからnew.pid;

END;
人からのSELECT *;

-使用は、エネルギー自給プライマリキー達成するためにトリガー
人INTO INSERT(PNAME)の値(「A」)を、
コミット;

--oracleの10g ojdbc14.jarが
--- Oracle 11gののojdbc

 

おすすめ

転載: www.cnblogs.com/purpleone/p/11701495.html