30 most important pl sql interview questions
今後の面接の準備に役立つ例を含むPL / SQL面接の上位の質問:
PL / SQLとは何ですか?
PL / SQL(Procedural Language / SQL)は、基本的にOracle –SQLの手続き型拡張です。 PL / SQLは、ユーザーが制御構造、プロシージャ、関数、モジュールなどを使用して複雑なデータベースアプリケーションを開発するのに役立ちます。
この記事では、PL / SQLインタビューの最上位の質問と回答について説明します。
PL / SQLインタビューの質問と回答
はじめましょう!!
Q#1)PL / SQLとSQLを区別しますか?
回答: SQLとPL / SQLの違いは、次のように分類できます。
SQL | PL / SQL |
---|---|
SQLは、インタラクティブな処理に非常に役立つ自然言語です。 | PL / SQLは、Oracle-SQLの手続き型拡張です。 |
条件テストやループなどの手続き型機能はSQLでは提供されていません。 | PL / SQLは、手続き型機能だけでなく、条件文、ループ文などの高級言語機能もサポートしています。 |
すべてのSQLステートメントはデータベースサーバーによって一度に1つずつ実行されるため、時間のかかるプロセスです。 | PL / SQL文は、文のブロック全体をデータベースサーバーに同時に送信するため、ネットワークトラフィックが大幅に削減されます。 |
SQLにはエラー処理手順はありません。 | PL / SQLは、カスタマイズされたエラー処理をサポートします。 |
Q#2)PL / SQLの特性を参加させますか?
回答:
PL / SQLの特徴は次のとおりです。
- PL / SQLを使用すると、複数のアプリケーションが同じサブプログラムにアクセスして共有できます。
- Oracleがロードされていれば、どのオペレーティングシステムでもコードを実行できるため、コードの移植性で知られています。
- PL / SQLを使用すると、ユーザーは独自にカスタマイズしたエラー処理ルーチンを作成できます。
- Oracleデータディクショナリとの統合によるトランザクションパフォーマンスの向上。
Q#3)PL / SQLで使用できるデータ型は何ですか?
回答: データ型は、データの種類とそれに関連する操作を識別する方法を定義します。
次のように説明される4つのタイプの事前定義されたデータ型があります。
- スカラーデータ型: スカラーデータ型は、内部コンポーネントを持たないアトミックデータ型です。
- 例えば
- CHAR(1から32,767文字までの固定長文字値の範囲)
- VARCHAR2(1から32,767文字までの可変長文字値の範囲)
- NUMBER(固定10進数、浮動小数点10進数、または整数値)
- BOOLEAN(TRUE FALSEまたはNULL値の論理データ型)
- DATE(日付と時刻の情報を格納します)
- LONG(可変長の文字データ)
- 複合データ型: 複合データ型は、他のデータ型と、簡単に使用および操作できる内部コンポーネントで構成されています。 例えば、 RECORD、TABLE、およびVARRAY。
- 参照データ型: 参照データ型は、他のプログラム項目またはデータ項目を指定するポインタと呼ばれる値を保持します。 例えば、 参照カーソル。
- ラージオブジェクトのデータ型: ラージオブジェクトデータ型は、ロケーターと呼ばれる値を保持します。この値は、ライン外に格納されたラージオブジェクト(ビデオクリップ、グラフィックイメージなど)の場所を定義します。
- 例えば
- BFILE(バイナリファイル)
- BLOB(バイナリラージオブジェクト)
- CLOB(文字ラージオブジェクト)
- NCLOB(NCHAR型ラージオブジェクト)
推奨読書= >> PLSQLデータ型
Q#4)例を使用して%TYPEおよび%ROWTYPEデータ型の目的を説明してください。
回答: PL / SQLは、アンカーに%TYPE宣言属性を使用します。この属性は、変数、定数、または列のデータ型を提供します。 %TYPE属性は、テーブル列と同じデータ型を持つ変数を宣言するときに役立ちます。
例えば、 変数m_empnoのデータ型とサイズは列と同じです empno テーブルempで。
m_empno emp.empno%TYPE;
%ROWTYPE属性は、変数をテーブルの行と同じ構造を持つレコードとして宣言するために使用されます。行はレコードとして定義され、そのフィールドの名前とデータ型はテーブルまたはビューの列と同じです。
例えば:
dept_rec dept%ROWTYPE;
これにより、DEPTテーブルの行全体を格納できるレコードが宣言されます。
Q#5)PL / SQLパッケージで何を理解していますか?
回答: PL / SQLパッケージは、関数、ストアドプロシージャ、カーソル、および変数を1か所にグループ化するスキーマオブジェクトです。
パッケージには2つの必須部分があります。
- パッケージ仕様
- パッケージ本体
Q#6)PL / SQLカーソルで何を理解していますか?
回答: PL / SQLには、複数の行を取得して処理するための特別な機能が必要であり、そのリソースはカーソルと呼ばれます。カーソルは、SQLステートメントとステートメントを処理するための情報を含むメモリ領域であるコンテキスト領域へのポインタです。
PL / SQLカーソルは基本的に、データベースからデータの複数の行が選択され、各行がプログラム内で個別に処理されるメカニズムです。
Q#7)カーソルの種類を説明してください。
Pythonウィンドウ用の最高のテキストエディタ
回答: カーソルには2つのタイプがあります。
それらは次のように説明されます:
a)明示カーソル: 複数の行を返すクエリの場合、明示的なカーソルが宣言され、プログラマーによって名前が付けられます。 PL / SQLで明示カーソルを使用するには、4つの手順に従います。
- カーソルを宣言します
構文: カーソルは
SELECTステートメント;
ここで、はカーソルに割り当てられた名前であり、SELECTステートメントはカーソルのアクティブセットに行を返すクエリです。
- カーソルを開く
構文: 開いた ;
ここで、は以前に定義されたカーソルの名前です。
- カーソルから行をフェッチします
構文: FETCH INTO;
ここで、は、行がフェッチされる前に定義されたカーソルの名前を指します。
フェッチされるデータを受け取る変数のリストを表します。
- カーソルを閉じる
構文: CLOSE;
閉じているカーソルの名前です。
b)暗黙カーソル: SQL文が実行されると、PL / SQLは、暗黙カーソルと呼ばれるカーソルを定義せずに、カーソルを自動的に作成します。
オンラインでアニメを見るのに最適な場所
次の文の場合、PL / SQLは暗黙カーソルを使用します
- インサート
- 更新
- 削除
- SELECT(正確に1行を返すクエリ)
Q#8)トリガーはいつ使用しますか?
回答: 「トリガー」という言葉は、アクティブ化することを意味します。 PL / SQLでは、トリガーは、データベース関連のイベントが実行されたときにデータベースによって実行されるアクションを定義するストアドプロシージャです。
トリガーは主に次の目的で必要です。
- 複雑な整合性制約を維持するには
- 変更を記録してテーブル情報を監査する
- テーブルに変更が加えられたときに他のプログラムアクションを通知する
- 複雑なビジネスルールの実施
- 無効なトランザクションの防止
Q#9)トリガーとストアドプロシージャの実行の違いを説明してください。
回答: ストアドプロシージャは、引数を指定したプロシージャコールを介して、別のブロックからプロシージャコールステートメントを発行することにより、明示的に実行されます。
トリガーは、DMLステートメントの発生などのトリガーイベントが発生するたびに暗黙的に実行されます。
Q#10)トリガーと制約の違いを説明してください。
回答:トリガーは、次の点で制約とは異なります。
トリガー | 制約 |
---|---|
トリガーが有効になった後に追加された行にのみ影響します。 | 制約が有効になっているときにすでに存在するものを含め、テーブルのすべての行に影響します。 |
トリガーは、整合性制約を使用して実装できない複雑なビジネスルールを実装するために使用されます。 | 制約はデータベースの整合性を維持します。 |
Q#11)PL / SQLブロックとは何ですか?
回答: PL / SQLでは、文はブロックと呼ばれる単位にグループ化されます。 PL / SQLブロックには、定数、変数、SQL文、ループ、条件文、例外処理を含めることができます。ブロックは、プロシージャ、関数、またはパッケージを作成することもできます。
大まかに言って、 PL / SQLブロックには次の2つのタイプがあります。
(i)匿名ブロック: ヘッダーのないPL / SQLブロックは、匿名ブロックと呼ばれます。これらのブロックは、プロシージャ、関数、またはトリガーの本体を形成しません。
例:
DECLARE num NUMBER(2); sq NUMBER(3); BEGIN num:= &Number1; sq := num*num; DBMS_OUTPUT.PUT_LINE(‘Square:’ ||sq); END;
(ii)名前付きブロック: ヘッダーまたはラベルを持つPL / SQLブロックは、名前付きブロックと呼ばれます。名前付きブロックは、サブプログラム(プロシージャ、関数、パッケージ)またはトリガーのいずれかです。
推奨読書= >> PLSQLのプロシージャと関数
例:
FUNCTION sqr (num IN NUMBER) RETURN NUMBER is sq NUMBER(2); BEGIN sq:= num*num; RETURN sq; END;
Q#12)構文エラーと実行時エラーを区別しますか?
回答:
構文エラー PL / SQLコンパイラで簡単に識別できるものです。これらのエラーは、スペルミスなどである可能性があります。
ランタイムエラー エラーを処理するための例外処理セクションが含まれるPL / SQLブロック内のエラーです。これらのエラーは、行を返さないSELECTINTOステートメントである可能性があります。
Q#13)COMMIT、ROLLBACK、およびSAVEPOINTとは何ですか?
回答: COMMIT、SAVEPOINT、およびROLLBACKは、PL / SQLで使用可能な3つのトランザクション仕様です。
COMMITステートメント: DML操作が実行されると、データベースバッファー内のデータのみが操作され、データベースはこれらの変更による影響を受けません。これらのトランザクションの変更をデータベースに保存/保存するには、トランザクションをコミットする必要があります。 COMMITトランザクションは、最後のCOMMIT以降のすべての未処理の変更を保存し、次のプロセスが発生します
- 影響を受ける行のロックが解除されます
- 完了としてマークされたトランザクション
- トランザクションの詳細はデータディクショナリに保存されます。
構文: コミット;
ROLLBACKステートメント: 現在のトランザクションでこれまでに発生したすべての変更を元に戻すか消去する場合は、トランザクションをロールバックする必要があります。つまり、ROLLBACKは、最後のCOMMITまたはROLLBACK以降の未処理の変更をすべて消去します。
トランザクションを完全にロールバックする構文:
ロールバック;
SAVEPOINTステートメント: SAVEPOINTステートメントは、現在のトランザクションの処理で名前を付け、ポイントをマークします。トランザクションのSAVEPOINTの前に発生した変更とロックは保持されますが、SAVEPOINTの後に発生した変更とロックは解放されます。
構文:
セーブポイント;
Q#14)変更テーブルと制約テーブルとは何ですか?
回答: テーブルでトリガーを定義するなど、DMLステートメントによって現在変更されているテーブルは、 変異テーブル 。
参照整合性制約のために読み取る必要がある可能性のあるテーブルは、次のように知られています。 拘束テーブル 。
Q#15)実際のパラメータと正式なパラメータは何ですか?
回答: プロシージャ呼び出しステートメントに表示される変数またはパラメーターと呼ばれる式は、次のように知られています。 実際のパラメータ 。
例えば: raise_sal(emp_num、merit + amount);
上記の例では、emp_numとamountが2つの実際のパラメーターです。
プロシージャヘッダーで宣言され、プロシージャ本体で参照される変数は、次のように呼び出されます。 正式なパラメータ 。
例えば:
手順raise_sal(emp_id INTEGER)IS
curr_sal REAL:
………..
ベギン
SELECT sal INTO cur_sal FROM emp WHERE empno = emp_id;
……。
END raise_sal;
上記の例では、emp_idは仮パラメーターとして機能します。
Q#16)ROLLBACKステートメントとROLLBACK TOステートメントの違いは何ですか?
回答: ROLLBACKステートメントの後にトランザクションは完全に終了します。つまり、ROLLBACKコマンドはトランザクションを完全に元に戻し、すべてのロックを解放します。
一方、トランザクションは、指定されたSAVEPOINTまでのトランザクションの一部のみを元に戻すため、ROLLBACKTOコマンドの後もアクティブで実行されています。
Q#17)次の一連の数値を表示するPL / SQLスクリプトを記述します:99,96,93……9,6,3?
回答
SET SERVER OUTPUT ON DECLARE BEGIN FOR i IN REVERSE 1..99 LOOP IF Mod(i,3) = 0 THEN DBMS_OUTPUT.PUT_LINE(i); END IF; END LOOP; END; /
Q#18)パラメータの3つのモードは何ですか?
回答: パラメータの3つのモードは、IN、OUT、INOUTです。
これらは次のように説明できます。
- INパラメータ: INパラメータを使用すると、呼び出されているプロシージャに値を渡すことができ、デフォルト値に初期化できます。 INパラメータは定数のように機能し、値を割り当てることはできません。
- OUTパラメータ: OUTパラメーターは呼び出し元に値を返すため、指定する必要があります。 OUTパラメータは初期化されていない変数のように機能し、式で使用することはできません。
- IN OUTパラメータ: IN OUTパラメータは、初期値をプロシージャに渡し、更新された値を呼び出し元に返します。 IN OUTパラメータは初期化された変数のように機能し、値を割り当てる必要があります。
Q#19)暗黙カーソルに対して%ISOPENが常にfalseになるのはなぜですか?
回答: 暗黙カーソル、SQL%ISOPEN属性は常にfalseです。これは、暗黙カーソルがDMLステートメントに対して開かれ、DMLステートメントの実行直後に閉じられるためです。
Q#20)どのカーソル属性でDMLステートメントが実行されると、ステートメントの結果が保存されますか?
回答: ステートメントの結果は、4つのカーソル属性に保存されます。
これらは:
- SQL%FOUND
- SQL%NOTFOUND
- SQL%ROWCOUNT
- SQL%ISOPEN
Q#21)PL / SQLコードでコメントする方法は何ですか?
回答: コメントは、読みやすさを向上させ、読者の理解を深めるためにコードに含まれているテキストです。これらのコードは実行されません。
PL / SQLでコメントする方法は2つあります。
1)1行コメント: このコメントはdouble–で始まります。
例:
宣言する
num NUMBER(2); —これはローカル変数です。
ベギン
2)複数行コメント: このコメントは/ *で始まり、* /で終わります。
例:
ベギン
num:=&p_num; / *これはプログラム本体で使用されるホスト変数です* /
………。
終わり
Q#22)PL / SQLの例外処理で何を理解していますか?
回答: PL / SQLでエラーが発生すると、例外が発生します。つまり、PL / SQLスクリプトが予期せず終了した望ましくない状況を処理するために、エラー処理コードがプログラムに含まれています。 PL / SQLでは、すべての例外処理コードはEXCEPTIONセクションに配置されます。
例外には3つのタイプがあります。
- 事前定義された例外: 事前定義された名前の一般的なエラー。
- 未定義の例外: 事前定義された名前のないあまり一般的ではないエラー。
- ユーザー定義の例外: ランタイムエラーを引き起こさないでくださいが、ビジネスルールに違反してください。
Q#23)いくつかの事前定義された例外を参加させますか?
回答:
事前定義された例外のいくつかは次のとおりです。
- 何もデータが見つかりませんでした: データが返されない単一行のSELECTステートメント。
- TOO_MANY_ROWS: 複数の行が返される単一行のSELECTステートメント。
- INVALID_CURSOR: 不正なカーソル操作が発生しました。
- ZERO_DIVIDE: ゼロ除算を試みました。
Q#24)PL / SQLカーソルの例外とは何ですか?
回答:
PL / SQLカーソルに関連する例外は次のとおりです。
- CURSOR_ALREADY_OPEN
- INVALID_CURSOR
Q#25)プロシージャで宣言されたカーソルとパッケージ仕様で宣言されたカーソルの違いを説明してください。
配列javaからインデックスを削除する方法
回答: プロシージャで宣言されたカーソルはローカルとして扱われるため、他のプロシージャからアクセスすることはできません。
パッケージ仕様で宣言されているカーソルはグローバルとして扱われるため、他のプロシージャからアクセスできます。
Q#26)INSTEAD OFトリガーとは何ですか?
回答: INSTEAD OFトリガーは、特にビューを変更するために作成されたトリガーであり、SQLDMLステートメントを介して直接変更することはできません。
Q#27)式とは何ですか?
回答: 式は、演算子で区切られた一連のリテラルと変数で表されます。 PL / SQLでは、操作を使用して一部のデータを操作、比較、および計算します。式は、「演算子」と「オペランド」の合成です。
- オペランド: これらは演算子への引数です。オペランドは、変数、関数呼び出し、または定数にすることができます。
- 演算子: これらは、オペレーターに対して実行されるアクションを指定します。 例: '+'、 '*'など
Q#28)例とともにさまざまなタイプの式をリストします。
回答: 式は次のようになります。
- 数式または算術式: 例: 20 * 10+ 15
- ブール式: 例: 「スポット」LIKE「sp%t」
- 文字列式: 例: 長さ(「ニューヨーク」||「NY」)
- 日付式: 例: SYSDATE> TO_DATE('15 -NOV-16 '、 'dd-mm-yy')
Q#29)ユーザーが入力した数値の平均を計算するWHILEループの使用法を示すプログラムを作成し、数値0を入力することでそれ以上の数値の入力を停止しますか?
回答
DECLARE n NUMBER; avg NUMBER :=0 ; sum NUMBER :=0 ; count NUMBER :=0 ; BEGIN n := &enter_a_number; WHILE(n0) LOOP count := count+1; sum := sum+n; n := &enter_a_number; END LOOP; avg := sum/count; DBMS_OUTPUT.PUT_LINE(‘the average is’||avg); END;
Q#30)PL / SQLレコードで何を理解していますか?
回答: PL / SQLレコードは、値のコレクション、または複数の情報のグループとして参照できます。各情報はより単純なタイプであり、フィールドとして相互に関連付けることができます。
PL / SQLでサポートされるレコードには次の3つのタイプがあります。
- テーブルベースのレコード
- プログラマーベースの記録
- カーソルベースのレコード
結論
PL / SQLは、学習とアプリケーションに関しては非常に広大です。これらの面接の質問と回答があなたが通過するのに役立つことを願っています。
PL SQLの詳細については、包括的な情報をお読みください。 PL / SQLチュートリアルシリーズ 。
ハッピーラーニング!!