Plsql-strings
PL/SQL-文字列
PL/SQLの文字列は、実際にはオプションのサイズ指定のある文字列です。 文字は、数字、文字、空白、特殊文字、またはすべての組み合わせです。 PL/SQLは3種類の文字列を提供します-
- 固定長文字列-そのような文字列では、プログラマは文字列を宣言しながら長さを指定します。 文字列は、指定された長さまでスペースで右詰めされます。
- 可変長文字列-そのような文字列では、文字列の最大長が32,767まで指定され、パディングは行われません。
- 文字ラージオブジェクト(CLOB)-これらは最大128テラバイトの可変長文字列です。
PL/SQL文字列は、変数またはリテラルのいずれかです。 文字列リテラルは引用符で囲まれています。 例えば、
'This is a string literal.' Or 'hello world'
文字列リテラル内に一重引用符を含めるには、2つの一重引用符を並べて入力する必要があります。 例えば、
'this isn''t what it looks like'
文字列変数の宣言
Oracleデータベースは、CHAR、NCHAR、VARCHAR2、NVARCHAR2、CLOB、NCLOBなどの多数の文字列データ型を提供します。 'N' が前に付いたデータ型は '国別文字セット' データ型で、Unicode文字データを格納します。
可変長文字列を宣言する必要がある場合は、その文字列の最大長を指定する必要があります。 たとえば、VARCHAR2データ型。 次の例は、いくつかの文字列変数の宣言と使用を示しています-
DECLARE
name varchar2(20);
company varchar2(30);
introduction clob;
choice char(1);
BEGIN
name := 'John Smith';
company := 'Infotech';
introduction := ' Hello! I''m John Smith from Infotech.';
choice := 'y';
IF choice = 'y' THEN
dbms_output.put_line(name);
dbms_output.put_line(company);
dbms_output.put_line(introduction);
END IF;
END;
/
上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-
John Smith
Infotech
Hello! I'm John Smith from Infotech.
PL/SQL procedure successfully completed
固定長文字列を宣言するには、CHARデータ型を使用します。 ここでは、固定長変数の最大長を指定する必要はありません。 長さの制約を省略すると、Oracle Databaseは必要な最大長を自動的に使用します。 次の2つの宣言は同一です-
red_flag CHAR(1) := 'Y';
red_flag CHAR := 'Y';
PL/SQL文字列関数と演算子
PL/SQLには、2つの文字列を結合するための連結演算子*(||)*が用意されています。 次の表は、PL/SQLが提供する文字列関数を提供します-
| S.No | Function & Purpose |
|---|---|
| 1 |
ASCII(x); 文字xのASCII値を返します。 |
| 2 |
CHR(x); ASCII値xの文字を返します。 |
| 3 |
CONCAT(x, y); 文字列xとyを連結し、追加された文字列を返します。 |
| 4 |
INITCAP(x); xの各単語の最初の文字を大文字に変換し、その文字列を返します。 |
| 5 |
INSTR(x, find_string [, start] [, occurrence]); xで find_string を検索し、それが発生する位置を返します。 |
| 6 |
INSTRB(x); 別の文字列内の文字列の位置を返しますが、値をバイト単位で返します。 |
| 7 |
LENGTH(x); xの文字数を返します。 |
| 8 |
LENGTHB(x); シングルバイト文字セットの文字列の長さをバイト単位で返します。 |
| 9 |
LOWER(x); xの文字を小文字に変換し、その文字列を返します。 |
| 10 |
LPAD(x, width [, pad_string]) ;
|
| 11 |
LTRIM(x [, trim_string]);
|
| 12 |
NANVL(x, value); xがNaNの特別な値(数値ではない)と一致する場合は値を返し、そうでない場合は x を返します。 |
| 13 |
NLS_INITCAP(x); NLSSORTで指定された異なるソート方法を使用できることを除いて、INITCAP関数と同じです。 |
| 14 |
NLS_LOWER(x) ; NLSSORTで指定された異なるソート方法を使用できることを除いて、LOWER関数と同じです。 |
| 15 |
NLS_UPPER(x); NLSSORTで指定された異なるソート方法を使用できることを除いて、UPPER関数と同じです。 |
| 16 |
NLSSORT(x); 文字のソート方法を変更します。 NLS関数の前に指定する必要があります。そうでない場合は、デフォルトのソートが使用されます。 |
| 17 |
NVL(x, value);
|
| 18 |
NVL2(x, value1, value2); xがnullでない場合、value1を返します。 xがnullの場合、value2が返されます。 |
| 19 |
REPLACE(x, search_string, replace_string); search_stringの x を検索し、replace_stringに置き換えます。 |
| 20 |
RPAD(x, width [, pad_string]); 右側に x を埋め込みます。 |
| 21 |
RTRIM(x [, trim_string]); 右から x を切り取ります。 |
| 22 |
SOUNDEX(x) ;
|
| 23 |
SUBSTR(x, start [, length]); startで指定された位置から始まる x の部分文字列を返します。 サブストリングのオプションの長さを指定できます。 |
| 24 |
SUBSTRB(x); パラメータがシングルバイト文字システムの文字ではなくバイトで表されることを除いて、SUBSTRと同じです。 |
| 25 |
TRIM([trim_char FROM) x);
|
| 26 |
UPPER(x); xの文字を大文字に変換し、その文字列を返します。 |
概念を理解するために、いくつかの例を試してみましょう-
例1
DECLARE
greetings varchar2(11) := 'hello world';
BEGIN
dbms_output.put_line(UPPER(greetings));
dbms_output.put_line(LOWER(greetings));
dbms_output.put_line(INITCAP(greetings));
/*retrieve the first character in the string*/
dbms_output.put_line ( SUBSTR (greetings, 1, 1));
/*retrieve the last character in the string*/
dbms_output.put_line ( SUBSTR (greetings, -1, 1));
/*retrieve five characters,
starting from the seventh position.*/
dbms_output.put_line ( SUBSTR (greetings, 7, 5));
/*retrieve the remainder of the string,
starting from the second position.*/
dbms_output.put_line ( SUBSTR (greetings, 2));
/*find the location of the first "e"*/
dbms_output.put_line ( INSTR (greetings, 'e'));
END;
/
上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-
HELLO WORLD
hello world
Hello World
h
d
World
ello World
2
PL/SQL procedure successfully completed.
例2
DECLARE
greetings varchar2(30) := '......Hello World.....';
BEGIN
dbms_output.put_line(RTRIM(greetings,'.'));
dbms_output.put_line(LTRIM(greetings, '.'));
dbms_output.put_line(TRIM( '.' from greetings));
END;
/
上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-
......Hello World
Hello World.....
Hello World
PL/SQL procedure successfully completed.