pl sql cursor strings
このチュートリアルでは、PL SQLカーソルとは何か、および暗黙カーソルと明示カーソル、ループのカーソルなどの関連概念について学習します。また、PL / SQLの文字列関数についても学習します。
の中に PLSQLコレクション のチュートリアル PL / SQLシリーズ 、コード例を使用して、収集メソッド、Varray、ネストされたテーブル、および連想配列について学習しました。
この記事では、PL / SQLが持つさまざまなタイプのカーソルについて説明します。また、コード例を使用して、さまざまなタイプのカーソルの実装についても説明します。
また、文字列と、PL / SQLで使用可能ないくつかの組み込み文字列関数についても説明します。
英語吹き替えアニメを見るためのウェブサイト
学習内容:
PLSQLカーソル
Oracleには、SQLステートメントを実行するための専用のメモリ位置があり、処理された情報を保持します。 例えば 、更新された行の総数。
PL / SQLのカーソルは名前を付け、コンテキスト領域と呼ばれる作業領域へのポインタとして機能し、その情報を使用します。 SQLステートメントによって処理された行数を保持します。これらの行はアクティブセットと呼ばれます。アクティブセットのサイズは、条件を満たす行の数と同じです。
以下にリストされているカーソルには2つのタイプがあります。
- 暗黙カーソル
- 明示カーソル
暗黙カーソル
暗黙カーソルは、SQLステートメントの実行中にデフォルトでOracleによって割り当てられます。 UPDATE、DELETE、INSERTなどのDML操作によって影響を受ける行を保持します。したがって、明示カーソルが配置されていない場合は、暗黙カーソルが使用されます。
行を挿入している間、カーソルはその特定のデータを保持します。同様に、削除および更新操作の場合、影響を受ける行はカーソルによって格納されます。暗黙カーソルには名前が付けられていないため、開発者が操作したり、そこに含まれるデータをどこでも使用したりすることはできません。
最新の更新されたカーソルは、カーソル属性を使用して使用できます。これらの属性は、定義を繰り返さずにアイテムのデータ型と構造を参照するのに役立つプロパティです。データベース内のすべての列とテーブルには、共通の属性(%記号で表される)特性があり、次のように使用できます。 sql%attribute_name。
Sl No. | 名前 | 目的 |
---|---|---|
7 | 長さ(m) | 文字列mの文字数のカウントを返します。 |
1 | %FOUND | 結果をブール値で返します。 DELETE、INSERT、UPDATE、またはSELECTステートメントが単一または複数の行に影響を与える場合はtrueを返します。それ以外の場合はfalseが返されます。 |
二 | %見つかりません | 結果をブール値で示し、%FOUNDの逆機能を備えています。 DELETE、INSERT、UPDATE、またはSELECTステートメントが行に影響を与えない場合はtrueを返します。それ以外の場合はfalseが返されます。 |
3 | %ISOPEN | 結果をブール値で返します。カーソルが現在開いている場合はtrueを返します。それ以外の場合はfalseが返されます。 |
4 | %ROWCOUNT | DELETE、INSERT、UPDATE、またはSELECTステートメントからフェッチされた行数のカウントを示します。 |
5 | %タイプ | データベースの列または変数のデータ型を指定します。 |
6 | %ROWTYPE | データベース行と同等のレコードタイプを提供します。 |
TUTORという名前のテーブルを考えてみましょう。
SELECT * FROM TUTOR;
以下に示すSQLステートメントを使用してテーブルを作成しました。
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
以下に示すSQLステートメントを使用してこのテーブルに値を挿入しました。
INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (1, 'Automation', 'Mukul', 'five stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (4, 'PLSQL', 'Anand', 'four stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (2, 'Performance', 'Arvind', 'four stars');
暗黙カーソルを使用したコードの実装:
DECLARE total_count number(30); BEGIN --updating a row UPDATE TUTOR SET TEACHER = 'Zen' where CODE = 1; -- result in boolean, true returned if no rows affected IF sql%notfound THEN dbms_output.put_line('no subjects fetched'); -- result in boolean, true returned if any rows affected ELSIF sql%found THEN -- count the number of rows affected rows affected total_count := sql%rowcount; dbms_output.put_line( total_count || ' teacher name updated '); END IF; END; /
上記のコードの出力は次のようになります。
ここで、TUTORという名前のテーブルに反映されている変更を確認しましょう。
SQLステートメントを使用して、テーブルの列を取得しています。
SELECT * FROM TUTOR;
したがって、カーソルが指すように、コード= 1の教師の名前がZenに更新されることがわかります。
明示カーソル
開発者は、DML操作を実行するための独自のユーザー定義コンテキスト領域を持つことができます。したがって、彼らはそれに対してより多くの力を行使することができます。コードのPL / SQLブロックの宣言セクションには、明示カーソルが含まれています。これは通常、複数の行をフェッチするSELECT操作に基づいて構築されています。
明示カーソルの構文:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
明示カーソルは、以下にリストされているプロセスで機能します。
#1) メモリ初期化のためのカーソル宣言。 ここでは、カーソル名として機能する名前付きコンテキスト領域が作成されます。
構文:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#二) メモリ割り当てのためのカーソルオープン 。更新された行をデータベースからフェッチするためのカーソルが使用できるようになりました。
構文:
OPEN tutorial_s;
#3)データを取得するためにカーソルをフェッチします。 SELECT操作が実行された後、取得された行は割り当てられたメモリに配置され、これらはアクティブセットと見なされます。カーソルは一度に1行にアクセスできます。
構文:
FETCH tutorial_s INTO c_code;
#4)割り当てられたメモリを解放するために、カーソルが最終的に閉じられます。 すべてのレコードが1つずつ取得されると、カーソルが閉じられてコンテキスト領域のメモリが解放されます。
構文:
CLOSE tutorial_s;
明示カーソルを使用したコード実装:
DECLARE -- cursor declaration CURSOR t_tutorials is SELECT code, subject, teacher FROM Tutor; t_code Tutor.code%type; t_subject Tutor.subject%type; t_teacher Tutor.teacher%type; BEGIN -- opening a cursor OPEN t_tutorials; LOOP -- fetching values from cursor FETCH t_tutorials into t_code, t_subject, t_teacher; EXIT WHEN t_tutorials%notfound; -- printing in console dbms_output.put_line('Code is: ' || t_code || ' ' || 'Subject is: ' || t_subject || ' Teacher is: ' || t_teacher); END LOOP; CLOSE t_tutorials; END; /
上記のコードの出力は次のようになります。
ループのカーソル
明示カーソルを操作している間、FETCH、OPEN、CLOSEなどのステートメントを使用する代わりにFORループを使用できます。カーソルFORループには、データベースから取得した行を指すレコードとしてループインデックスがあります。次に、カーソルを開いた後、結果セットからレコードフィールドにデータの複数の行を繰り返しフェッチします。
最後に、すべての行が取得された後、カーソルが閉じられます。レコード内の各フィールドを参照するためにドット(。)記号を使用します。 (。)ドット記号は、実際にはコンポーネントの選択に使用されます。
カーソルForループの構文:
DECLARE CURSOR c IS SELECT code, subject, price FROM Tutorial; ... BEGIN FOR Tutorial_rec IN c LOOP ... price_sum:= price_sum + Tutorial_rec.price; END LOOP;
ここで、CursorFORループは ‘を宣言します Tutorial_rec ’ 記録として。
変数カーソル
カーソル変数は、複数の行を持つ結果セット内の現在の行を参照するために使用されます。あらゆるタイプのクエリに使用できます。これはPL / SQLの変数に似ており、値を割り当てたり、データベースのサブプログラムを介して渡すことができます。したがって、カーソル変数は多くの柔軟性を提供し、データは一元化されたプロセスで取得できます。
PLSQL文字列
PL / SQLの文字列は、特定の順序の文字のグループです。文字列のサイズは、使用できる場合とできない場合があります。文字列の一部となる可能性のある文字は、特殊文字、空白、数字、および英数字です。したがって、これは文字のグループから選択された記号のセットです。
PL / SQLには3つのカテゴリの文字列があります。これらは以下のとおりです。
- 可変長文字列: 文字列の長さは32,767を超えることはできず、文字列にパディングを含めることはできません。
- 固定長文字列 :文字列の長さは文字列宣言に記載されています。文字列には、指定された長さの文字列に対応するためにスペースが右に埋め込まれます。
- 文字ラージオブジェクト(CLOB): これは、最大128TBのサイズの可変長ストリングです。
PL / SQLの文字列は、リテラルまたは変数のいずれかです。リテラルには引用記号が使用されます。
構文:
'This is Software Testing Help'
また、文字列リテラル内に引用符を追加するオプションもあります。これは、2つの連続した一重引用符を保持することによって実現されます。
構文:
'We can''t go there'
文字列リテラルのユーザー定義の区切り文字は、接頭辞として「q」文字を付けることで説明できます。
構文:
q'(We can't go there)'
文字列変数の宣言
PL / SQLには、NCHAR、CHAR、VARCHAR、VARCHAR2、CLOB、NCLOBなどの複数のデータ型があります。国別文字セットのデータ型には接頭辞Nが付いています。これらはUnicode文字を格納するために使用されます。
可変長の文字列では、文字列の長さの上限を記載する必要があります。
構文:
DECLARE subject varchar(10);
これは、可変サブジェクトが最大10文字まで保持できることを意味します。最大長を省略した場合、コンパイルエラーが発生します。
固定長文字列では、CHARデータ型を使用できます。固定長文字列の最大長を定義する必要はありません。制限を省略すると、Oracleはデフォルト値の1を使用します。
構文:
DECLARE subject char := 'P';
長さが1を超えるCHAR変数を宣言すると、Oracleはデフォルトで、格納した値をその変数にスペースで埋めます。これは、指定された最大長に達するまで実行されます。
文字ラージオブジェクトの宣言を行うには、CLOBが使用されます。ここで最大長を指定する必要はありません。長さはOracleデータベース自体によって設定され、データベースブロックのサイズによって異なります。
構文:
DECLARE l CLOB;
PL / SQLでデータ型を選択するためのガイドライン:
- 常に固定長の値を扱う場合、 例えば、 長さとフォーマットが一定の携帯電話番号の場合は、CHARまたはNCHARデータ型を使用する必要があります。
- それ以外の場合は、VARCHAR2またはNVARCHAR2データ型を使用する必要があります。
- 32,767文字を超える文字列を扱う場合は、CLOBまたはNCLOBデータ型を使用する必要があります。
文字列を使用したコードの実装:
DECLARE subject varchar2(30); teacher varchar2(40); syllabus clob; options char(1); BEGIN -- Initializing values to variables subject := 'Selenium'; teacher := 'Arun'; syllabus := 'Java, WebDriver Methods, Synchronization, WebTables.'; options := 'S'; -- checking condition and if true IF options = 'S' THEN -- printing in console dbms_output.put_line(subject); dbms_output.put_line(teacher); dbms_output.put_line(syllabus); END IF; END; /
上記のコードの出力は次のようになります。
文字列内のPL / SQL関数と演算子
Sl No. | 名前 | 目的 |
---|---|---|
1 | CONCAT(i、j) | 文字列iとjを追加し、新しい文字列を返します。 |
二 | ASCII(n) | nと同等のASCII値を返します。 |
3 | CHR(n) | 同等のASCII値nとともに文字を返します。 |
4 | INSTR(i、x、start、n) | x文字列内の部分文字列iを検索し、発生位置を返します。開始は検索の開始位置を指し、オプションのパラメーターです。 nは、文字列のn番目のオカレンスであり、オプションのパラメーターでもあります。 |
5 | INSTRB(i) | 文字列内の部分文字列の位置をバイト単位で返します。 |
6 | INITCAP(k) | 文字列kの個々の単語の最初の文字を大文字に変換してから、文字列を返します。 |
8 | LENGTHB(n) | 1バイト文字セットの文字列mの文字数をバイト単位で返します。 |
9 | LTRIM(n、x) | 文字列nの左側からx文字を削除します。 xは、指定されていない場合はオプションのパラメーターであり、文字列nの先頭のスペースをすべて削除します。 |
10 | RTRIM(n、x) | 文字列nの右側からx文字を削除します。 xは、指定されていない場合はオプションのパラメーターであり、文字列nの末尾のスペースをすべて削除します。 |
十一 | TRIM((trim_char FROM)x); | 文字列xの先頭、末尾、または両端からスペースまたは言及された文字を削除します。 |
12 | LOWER(i) | 文字列iの文字を小文字に変換してから、文字列を返します。 |
13 | アッパー(i) | 文字列iの文字を大文字に変換してから、文字列を返します。 |
14 | LPAD(i、l、x) | 文字列xを左にパディングして、文字列iの長さをlにします。省略されたスペースが文字列iの左側に埋め込まれている場合、パラメータxはオプションです。 |
15 | RPAD(i、l、x) | 文字列xを右にパディングして、文字列iの長さをlにします。省略されたスペースが文字列iの右側に埋め込まれている場合、パラメータxはオプションです。 |
16 | NANVL(n、val) | nがNaN値と等しい場合はvalを返し、そうでない場合はnが返されます。 |
17 | NLSSORT(i) | 文字のソート方法を変更します。 NLS関数の前に言及する必要があります。そうしないと、デフォルトのソートが実行されます。 |
18 | NLS_INITCAP(i) | 機能は関数INITCAPと似ていますが、関数NLSSORTで説明したように異なる種類の手法を使用できます。 |
19 | NLS_LOWER(m) | 関数LOWERと機能は似ていますが、関数NLSSORTで説明したように異なる種類の手法を使用できます。 |
20 | NLS_UPPER(m) | 関数UPPERと機能的には似ていますが、IN関数NLSSORTで説明したように異なる種類の手法を使用できます。 |
21 | NVL(n、val) | xがNULL値に等しい場合はvalを返し、そうでない場合はnを返します。 |
22 | NVL2(n、val、val2) | xがNULL値と等しくない場合はvalを返します。そうでない場合、xがNULLと等しい場合は、val2が返されます。 |
2. 3 | SOUNDEX(i) | iの音声表現を持つ文字列を返します。 |
24 | SUBSTR(n、start、l) | startで指定された位置から始まる文字列nの部分文字列を返します。パラメータlはオプションであり、部分文字列の長さを表します。 |
25 | SUBSTRB(n) | 機能は関数SUBSTRと似ていますが、パラメーターはバイト単位であり、1バイト文字システムの場合は文字単位ではありません。 |
26 | REPLACE(n、s、r) | 文字列n内のsの出現を文字列rに置き換えます。 |
いくつかの文字列関数を使用したコードの実装:
DECLARE name varchar2(30) := ' software testing help!'; BEGIN dbms_output.put_line(UPPER(name)); dbms_output.put_line(LOWER(name)); dbms_output.put_line(LENGTH(name)); dbms_output.put_line(INITCAP(name)); /* get the first word in the string */ dbms_output.put_line ( SUBSTR (name, 1, 8)); /* get the location of the first 'w' */ dbms_output.put_line ( INSTR (name, 'w')); /* replace a string */ dbms_output.put_line ( REPLACE( name, 'help', 'solution')); /* trim a string from right */ dbms_output.put_line ( RTRIM(name,'!')); /* trim a string */ dbms_output.put_line ( TRIM(name)); END; /
上記のコードの出力は次のようになります。
Mac用の最高の無料DVDリッパー
上記のコードの説明:
- 最初の出力は ソフトウェアテストのヘルプ!。 入力文字列を返します 「ソフトウェアテストのヘルプ!」 大文字の助けを借りて UPPER関数。
- 2番目の出力は ソフトウェアテストのヘルプ!。 入力文字列を返します ソフトウェアテストのヘルプ! の助けを借りて小文字で LOWER関数。
- 3番目の出力 2. 3 。の助けを借りて入力文字列の長さを返します LENGTH関数。
- 4番目の出力は ソフトウェアテストのヘルプ!。 入力文字列の各単語の最初の文字を大文字で返します。 INITCAP関数 。
- 5番目の出力は ソフトウェア。 入力文字列の最初の位置から長さ8までの部分文字列を返します。 SUBSTR関数 。
- 6番目の出力は 6.6。 の位置を返します に の助けを借りて入力文字列で INSTR関数 。
- 7番目の出力は ソフトウェアテストソリューション!。 置き換えることで新しい文字列を返します 助けて と 解決 REPLACEの助けを借りて入力文字列で 関数 。
- 8番目の出力は ソフトウェアテストのヘルプ。 文字をトリミングして新しい文字列を返します ! 入力文字列の右側から RTRIM関数 。
- 9番目の出力は ソフトウェアテストのヘルプ!。 入力文字列から先頭と末尾のスペースをトリミングして新しい文字列を返します。 TRIM機能 。
よくある質問と回答
Q#1)PL / SQLのカーソルとは何ですか?
回答: SQLステートメントが実行された後、Oracleデータベースはコンテキスト領域と呼ばれるメモリを構築します。カーソルには、selectステートメントから処理された情報があり、そのSELECT操作によって更新された行が含まれています。
Q#2)カーソルとカーソルの種類は何ですか?
回答: SQLステートメントが実行された後、Oracleデータベースは一時的な作業領域であるコンテキスト領域と呼ばれるメモリを構築します。カーソルには、暗黙カーソルと明示カーソルの2つのカテゴリがあります。
Q#3)Oracleでカーソルを実行するにはどうすればよいですか?
回答: Oracleでカーソルを実行するための構文は、次のとおりです。 開いた<> 。 CURSORNAMEは、コードのPL / SQLブロックの宣言セクションで使用可能なカーソルの名前を参照します。
Q#4)begin内でカーソルを宣言できますか?
回答: はい、PL / SQLコードブロック内で複数のカーソルを宣言できます。
Q#5)PL / SQLで文字列の長さをどのように見つけますか?
回答: 関数LENGTH(str)を使用して、PL / SQLで文字列の長さを見つけることができます。ここで、strは、長さを取得する文字列です。この関数は数値を返します。
Q#6)OracleのSUBSTRとは何ですか?
回答: SUBSTR関数は、文字列の特定の位置から特定の数の文字を提供します。構文はSUBSTR(n、start、l)です。 startで指定された位置から始まる文字列nから部分文字列を返します。パラメータlはオプションであり、部分文字列の長さを表します。
結論
このチュートリアルでは、PL / SQLの基本的な概念のいくつかについて詳しく説明しました。
以下のトピックについて説明しました。
- PL SQLカーソル:暗黙カーソルと明示カーソル
- PL / SQL文字列。
- 文字列内の関数と演算子。
<< PREV Tutorial | 次のチュートリアル>>