データ操作言語 (DML)コマンドは、ユーザがアクセスするかデータを操作 することを可能にします。利用可能なDMLコマンドの概略を以下に示します。
Table 5-1: データ操作言語コマンド
コマンド | 概要 |
INSERT | テーブルにデータを入力します。 |
SELECT | テーブルから情報を検索します。クエリーは他テーブルとのジョインなど複雑に なるかもしれません。 |
UPDATE | テーブル中の既存レコードを更新します。 |
DELETE | テーブル中の不必要なレコードを削除します。 |
EMPTY | テーブル中の全レコードを削除します。 |
CALL | ストアドプロシージャ-またはエキスプレッション(表現)を呼び出します。 |
LOCK TABLE | トランザクション中にテーブルをロックします。 |
SORT | 一つ以上のフィールドによりテーブルを並び替えます。 |
INSERTコマンドは、フィールド値をコマンドラインから、他のテーブル から、ファイルからまたはオペレーティングシステムコマンドの出力から直接取得し、 テーブル中にデータを格納します。
Syntax
Syntax 1:
INSERT [INTO] table [( | | * |attr {, attr} |
|)] | |
|VALUES [(] attr_value {, attr_value} [)] |SET TO attr_value {, attr_value} |select_command |FROM data_source | |; | | | |
Syntax 2:
INSERT [INTO] table SET attr | |TO |= | | | | attr_value {, attr | |TO |= | | | | attr_value}; |
Syntax 3:
INSERT [INTO] table SET | | * | attr {, attr} |
| | |
|VALUES [(] attr_value {, attr_value} [)] |select_command |FROM data_source |; | | | |
説明
attr_value |
| |||
expr | フィールドに与えられた適した値。 詳細はExpressionsを参照してください。 | |||
data_source |
| |||
os_command | システムコマンドの出力がテーブルに直接挿入されます。 Unixにのみ有効な機能です。 | |||
select_command | SELECT文。SELECTを 参照してください。 |
注意
バッチによる挿入(insert .. from ファイル)の場合、途中でエラーが発生すると Empressはエラーメッセージを出力し処理を中止します。その場合、途中まで レコードが挿入されてしまうので、再試行する時にはエラー個所を修正してそのデータ から始めなくてはならなくなり、非常に面倒な作業となります。この場合バッチでの 挿入を再開するベストな方法は以下の方法です。
必要な特権
例
数値、日付、文字列を持ったレコードを挿入します。
loansテーブルに1990年6月27日にKilroyが$100,00のローンを組んだ レコードを追加します。
INSERT INTO loans VALUES (10, 'Kilroy', '27 June 1990', 100.00);
データの順番が重要です。DISPLAY TABLEコマンドにリストされた フィールド名を順番に左から右へ指定してください。 順番どおりに指定しない以下のような場合。
INSERT INTO loans VALUES (10, '27 June 1990', 'Kilroy', 100.00);
名前フィールドに日付データがセットされ、日付フィールドに名前データがセット されるため、Empressは変換エラーの表示をします。
DOLLAR値を持ったレコードを挿入します。
次のコマンドは、最初の例題と同じ値を挿入することになります。 (ドル記号を2つ指定していることに注意してください。)
INSERT INTO loans (name, date, amount) VALUES ('Kilroy','27 June 1990','$$100.00';
NULL値を持ったレコードを挿入します。
personnelテーブルのcredit_limitフィールドと phoneフィールドにNULL値をセットしてレコードを挿入します。
INSERT INTO personnel (number, name, phone, credit_limit) VALUES (14, 'Martin', null, null);
部分的なフィールド値を持ったレコードを挿入します。
指定されないフィールド値には自動的にNULL値が設定されます。よって前の例題と 同様の結果となります。
INSERT INTO personnel (number, name) VALUES (14, 'Martin');
様々なシンタックスによりレコードを挿入します。
対話型でない挿入コマンドのいろいろな形式で、Martinに対して 個人番号は20、電話番号は962-2587、クレジット限度額 $500をpersonnelテーブルに入力します。
INSERT INTO personnel SET number TO 20, name TO 'Martin', phone TO '962-2587', credit_limit TO 500; INSERT INTO personnel (number, name, phone, credit_limit) SET TO 20, 'Martin', '962-2587', 500; INSERT INTO personnel SET TO 20, 'Martin', '962-2587', 500; INSERT INTO personnel SET number, name, phone, credit_limit 20, 'Martin', '962-2587', 500; INSERT INTO personnel SET number, name, phone, credit_limit VALUES 20, 'Martin', '962-2587', 500;
複数レコードを挿入します。
同時に複数レコードを追加します。
INSERT personnel VALUES 20, 'Martin', '962-2587', 500, 21, 'Stevens', '973-7721', 250, 22, 'DuRoche', '922-8047', 500;
他のテーブルから挿入します。
loansテーブルからjonesloansというテーブルを作成します。
INSERT INTO jonesloans SELECT FROM loans WHERE name = 'Jones';
作成されるテーブルはloansテーブルと同一の構造ですが、レコードは nameフィールドのデータが<Jones>のものしか存在しません。
ファイルからレコードを挿入します。
セパレータに"|"を設定し、以下のようなデータが入っている newloansファイルからレコードを挿入します。
10|Kilroy|August 24, 1990|200 5|Mosca|September 3, 1990|100 4|Scarlatti|September 23, 1990|75
以下のコマンドで上記ファイルから3レコード挿入します。
INSERT loans FROM 'newloans';
オペレーティングシステムコマンドから挿入します。
コメントが記述されたcomments.nファイルをnroffコマンドに 渡した出力を挿入します。
INSERT customers SET COMMENTS DIRECT_FROM '!nroff comments.n';
SELECTコマンドはテーブルからデータを検索します。検索結果は スクリーン上にテーブルとして表示されます。しかしリスト形式で表示したり オペレーティングシステムに転送したりできます。 コマンドには最低でも1つ以上のテーブルを指定しなければなりません。指定できる ものには以下のようなものがあります。
Syntax 1
SELECT [|BYPASS |] [|DISTINCT|] [|* |] |BYPASS_LOCK| |ALL | |select_item {, select_item}| FROM table_expression {, table_expression } [where_clause] [GROUP BY attr {, attr}] [having_clause] [sort_clause] [|LIST |] [DUMP] [|INTO| file]; |REPORT| |ONTO|
Syntax 2
SELECT [|BYPASS |] [|DISTINCT|] [|* |] |BYPASS_LOCK| |ALL | |select_item {, select_item}| FROM table_expression {, table_expression } [|LIST |] [DUMP] [|INTO| file] |REPORT| |ONTO| [where_clause] [GROUP BY attr {, attr}] [having_clause] [sort_clause];
Syntax 3
SELECT [|BYPASS |] [|DISTINCT|] [|* |] |BYPASS_LOCK| |ALL | |select_item {, select_item}| FROM table_expression {, table_expression } [where_clause] [GROUP BY attr {, attr}] [having_clause] [sort_clause] INSERT [INTO] table [|(attr {, attr}) |] ; |SET * | |SET attr {, attr} | |(*) |
Syntax 4
TABLE table [ sort_clause ] [ |LIST | ] [DUMP] [ |INTO| file ]; |REPORT| |ONTO|
Syntax 5
query_expression [ |LIST | ] [DUMP] [ |INTO| file ] |REPORT| |ONTO| [ sort_clause ];
select_item |
いずれか1つ。
|table.* | |alias.* | |expr [print_clause] | |column_alias = expr | |function ([DISTINCT] attr) [print_clause] | |COUNT [|(*) |][print_clause] | |([DISTINCT] expr)|attrのデータタイプがbulkまたはtextの場合。 attr |DIRECT_INTO| file |DIRECT_ONTO| |
table_expression | いずれか1つ。
a) table [[| ALIAS |] alias ] | AS | b) ( query_expression ) alias c) table_expression CROSS JOIN table_expression d) table_expression NATURAL |INNER | JOIN table_expression |LEFT [OUTER] | |RIGHT [OUTER] | |FULL [OUTER] | e) table_expression |INNER | JOIN table_expression |LEFT [OUTER] | |RIGHT [OUTER] | |FULL [OUTER] | | ON where_clause_condition | | USING ( attr {, attr } ) | |
expr | 表現式です。詳細はExpressions を参照してください。 |
column_alias | 出力時にフィールド名に換えて表示する名前です。 |
function | 集計関数の1つを指定しますAVG, MAX, MIN, SUM。 複数レコードに対して実行されます。関数は指定されたフィールドに対して実行され 結果を出力します。関数SUMとAVGは数値フィールドのみ有効です。 詳細は、Functionsを参照してください。 |
print_clause |
|PRINT| header [WIDTH integer][ |LEFT |] |AS | |RIGHT | |CENTRE | |CENTER | |LEFTRIGHT | [WRAPMARGIN integer] |
sort_clause | 以下のシンタックスです。
|SORT | [ |BY|] |attr | [|ASCENDING |] |ORDER| |ON| |attr_num | |ASC | |column_num| |DESCENDING| |DESC | {, |attr | [|ASCENDING |]} |attr_num | |ASC | |column_num| |DESCENDING| |DESC | キーワードASCとDESCは、それぞれ ASCENDINGとDESCENDINGの同義語です。省略値はASCENDING です。 SORTとORDERは同義語です。 |
having_clause | シンタックスはHAVING句を参照 してください。 |
where_clause | シンタックスはWHERE句を参照 してください。 |
query_expression |
1つ以上のselect_commandを含み、演算子で繋がれています。
UNIONは、EXCEPTとINTERSECTをサポートしています。 query_expressionは以下のようになります。 |select_command| { |UNION | [ALL] |select_command| } |TABLE table | |EXCEPT | |TABLE table | |INTERSECT| UNIONは、全ての重複値以外に一方のselect_commandによって検索 された、すべてのレコードを返します。 UNION ALLは、重複値を含む、select_commandで検索された、両方の レコードを返します。 EXCEPTは、すべての重複値以外に、2つのselect_command オペランドによって選択された2セットのレコードの間の違いを返します。 ALLオプションは重複値を含みます。 INTERSECTは、すべての重複値以外に、2つのselect_command オペランドによって選択されたレコードの2つのセットの交差を返します。 ALLオプションは重複値を含みます。 UNION、EXCEPTあるいはINTERSECT操作の2つの select_commandオペランドは、同一でなくてはいけません。 それらのselect_itemsが同数のフィールドを持たなくてはいけないことを 意味します。また対応するフィールドは、同じデータタイプでなくてはいけません。 UNION、EXCEPT、INTERSECT操作の結合した結果は、 フィールド、フィールド名(別名)、対応するデータタイプの、第1の select_commandオペランドのselect_itemと同じ数を持っています。 |
select_command | どちらか一方。
|
注意
フィールド名の変わりに番号が指定された場合、出力カラムの指定がある場合 には、その順番によりソートし、それ以外データディクショナリーで指定されている フィールド番号によりソートします。
表現式からソートする場合などは、column_numでのソート指定は 有効となります。例えば以下のような場合。
SELECT a * b, c, d, e * d FROM T1, ORDER BY 1;
出力はa * bの結果によってソートされます。
INSERT INTO table がSELECT文の前に指定される場合も あります(INSERT INTO table SELECT FROM table...)。
フィールドがそのとき既存のテーブルに挿入される場合、既存テーブルから 選ばれたフィールドは対応するリスト中でattrsを指定することに より、新しいテーブル中で改名することができます。これは、少数のフィールド値を 備えたレコードが既存のテーブルに加えられることを可能にします。 さらに、作成される新しいテーブル中のフィールド名およびオーダーを変更する メカニズムを提供します。
select_itemがheader(文字列、ブランクを 含んでいる場合には引用符で囲む)を含んでいる場合、新しいテーブル中の対応する フィールドは既存のテーブル中の名前ではなくheaderによって与え られた名前になります。これは既存のテーブルのフィールド名には影響しません。 headerおよびattrの両方が指定される場合、 attrは、新しく作成されたフィールド名としてヘッダーより優先 します。
GROUP BY句が使用される場合、出力はレコードからのみになります。 関数結果が各グループの下で表示される出力はエラーとなります。GROUP BY句 の使用はGROUP BY句で解説します。
検索されたテーブルにデータを挿入することができないことに注意してください。
SELECT * FROM table [ sort_clause ] [ |LIST | ] [DUMP] [ |INTO| file ]; |REPORT| |ONTO|
必要な特権
例
シンプルな検索
loansテーブルの検索
SELECT * FROM loans;
以下の表示を行います。
number name date amount 5 Mosca 2 February 1990 $150.00 3 Jones 7 February 1990 $33.95 10 Kilroy 16 February 1990 $250.00 17 Wladislaw 27 February 1990 $55.00 3 Jones 3 April 1990 $25.00 5 Mosca 4 May 1990 $200.00 17 Wladislaw 12 May 1990 $25.00 8 Peterson 6 June 1990 $50.00 17 Wladislaw 25 June 1990 $75.00 3 Jones 12 August 1990 $300.00 4 Scarlatti 9 September 1990 $150.00 4 Scarlatti 14 October 1990 $125.00
以下のコマンドでも同一の結果が得られます。
SELECT FROM loans;
シンプルな条件検索
1990年6月以降のローンの検索
SELECT * FROM loans WHERE date > "31 May 1990";
以下のように表示します。
number name date amount 8 Peterson 6 June 1990 $50.00 17 Wladislaw 25 June 1990 $75.00 3 Jones 12 August 1990 $300.00 10 Kilroy 27 June 1990 $100.00 4 Scarlatti 9 September 1990 $150.00 4 Scarlatti 14 October 1990 $125.00
複数の条件検索
customersテーブルからLucas、Wilson、Marshallを検索します。
SELECT * FROM customers WHERE name MATCH "*Lucas*" OR name MATCH "*Wilson*" OR name MATCH "*Marshall*";
以下のように表示します。
name address comments Mr. R. Lucas 1423 Beach Drive, Can always be sold Bayville, CA 92308 something new and flashy - likes chrome and colored stuff, also little gadgets. Mr. B. Wilson 14 Valley View Drive, Good customer - give Bayville, CA 92308 credit if he asks for it Ms. C. Marshall 12 Berkeley St. Suggest vacuum & Gull Point, CA 92309 wash, she keeps 3 dogs. Look for dog hair collecting in engine.
1つのフィールドを検索します。
特定フィールドを指定して検索できます。
SELECT name FROM personnel;
以下のように表示します。
name Kilroy Mosca Wladislaw Jones Peterson Scarlatti Jordan
複数のフィールドを指定したシンプルな条件検索。
personnelテーブルからcredit_limitフィールド値が$250.00 より多い、nameフィールドと、numberフィールドを表示します。
SELECT name, number FROM personnel WHERE credit_limit > 250.00;
以下のように表示します。
name number Kilroy 10 Mosca 5 Jones 3
異なるオーダーのフィールドを検索します。
テーブル作成時の指定フィールド順と違う順番で、表示します。
SELECT amount, name, date FROM loans;
以下のように表示します。
amount name date $150.00 Mosca 2 February 1990 $33.95 Jones 7 February 1990 $250.00 Kilroy 16 February 1990 $55.00 Wladislaw 27 February 1990 $25.00 Jones 3 April 1990 $200.00 Mosca 4 May 1990 $25.00 Wladislaw 12 May 1990 $50.00 Peterson 6 June 1990 $75.00 Wladislaw 25 June 1990 $300.00 Jones 12 August 1990 $150.00 Scarlatti 9 September 1990 $125.00 Scarlatti 14 October 1990
フィールドにヘッダーを付けて検索します。
PRINT句を指定しフィールドにヘッダーを付加します。文字列にブランク、 ピリオド、スラッシュ、コロン、セミコロン、タブ、改行コードが含まれる場合には 引用符で囲む必要があります。
コマンド
SELECT name PRINT Employee, amount PRINT "Loan Amount" FROM loans;
以下のように表示します。
Employee Loan Amount Mosca $150.00 Jones $33.95 Kilroy $250.00 Wladislaw $55.00 Jones $25.00 Mosca $200.00 Wladislaw $25.00 Peterson $50.00 Wladislaw $75.00 Jones $300.00 Kilroy $100.00 Scarlatti $150.00 Scarlatti $125.00
PRINTの変わりにASを指定しても同一の結果となります。
SELECT name AS Employee, amount AS "Loan Amount" FROM loans;
Empressの変数MSQLSELHEADがアンセットされた場合、ヘッダーの 出力は抑制されます。
計算式を含んで検索します。
計算は検索されたフィールド値に対して行なわれ、単純な表現式や複雑な表現式かもしれません。
loansテーブルに対してamountとamountの2%と amountの2%増量を表示します。
SELECT name, amount, amount * 0.02 PRINT 'interest', amount * 1.02 PRINT 'new balance' FROM loans;
以下のように表示します。
name amount interest new balance Mosca $150.00 3.00 153.00 Jones $33.95 0.67 34.62 Kilroy $250.00 5.00 255.00 Wladislaw $55.00 1.10 56.10 Jones $25.00 0.50 25.50 Mosca $200.00 4.00 204.00 Wladislaw $25.00 0.50 25.50 Peterson $50.00 1.00 51.00 Wladislaw $75.00 1.50 76.50 Jones $300.00 6.00 306.00 Scarlatti $150.00 3.00 153.00 Scarlatti $125.00 2.50 127.50
ドル記号付きでinterest、new balanceというヘッダーで表示 します。
SELECT name, amount, amount * 0.02 CONVERT DOLLAR PRINT 'interest', amount * 1.02 CONVERT DOLLAR PRINT 'new balance' FROM loan;
以下のように表示します。
name amount interest new balance Mosca $150.00 $3.00 $153.00 Jones $33.95 $0.67 $34.62 Kilroy $250.00 $5.00 $255.00 Wladislaw $55.00 $1.10 $56.10 Jones $25.00 $0.50 $25.50 Mosca $200.00 $4.00 $204.00 Wladislaw $25.00 $0.50 $25.50 Peterson $50.00 $1.00 $51.00 Wladislaw $75.00 $1.50 $76.50 Jones $300.00 $6.00 $306.00 Scarlatti $150.00 $3.00 $153.00 Scarlatti $125.00 $2.50 $127.50
複数テーブルから検索し、結果をテーブルに格納します。
loansテーブル、personnelテーブルから検索し、 loanslistというテーブル名のテーブルを作成し結果を格納します。
SELECT name PRINT Employee, credit_limit, date, amount FROM loans, personnel INSERT INTO loanlist WHERE loans.name = personnel.name;
データベース内を参照すると。
*** repairs *** auto parts customers loanlist loans personnel
以下のコマンドを実行すると。
SELECT * FROM loanlist;
以下のように表示されます。
Employee credit_limit date amount Mosca $750.00 2 February 1990 $150.00 Jones $500.00 7 February 1990 $33.95 Kilroy $500.00 16 February 1990 $250.00 Wladislaw $50.00 27 February 1990 $55.00 Jones $500.00 3 April 1990 $25.00 Mosca $750.00 4 May 1990 $200.00 Wladislaw $50.00 12 May 1990 $25.00 Peterson $250.00 6 June 1990 $50.00 Wladislaw $50.00 25 June 1990 $75.00 Jones $500.00 12 August 1990 $300.00 Scarlatti $100.00 9 September 1990 $150.00 Scarlatti $100.00 14 October 1990 $125.00
この新しく作成されたテーブルは、他のテーブル同様に使用できます。
UNIONを使用した検索
2つのテーブル、loansとloanlistの連携を取得します。SELECT name, amount FROM loans UNION SELECT Employee, amount FROM loanlist;UNIONオペレーションのオペランドが同一なくてはなりません。それは、UNION オペレーションの2つのフィールドセットが同数のフィールドを持っていることを 意味します。また対応するフィールドは同じデータタイプでなくてはなりません。
同一のテーブル構造を持つテーブルに対するUNIONを使用した検索。
loanテーブルとloanlistテーブルが同一構造であり、2つの テーブルのすべての内容の結合を得たい場合、次の指定をします。
TABLE loan UNION TABLE loanlist;
UPDATEコマンドは、テーブル中にある一つ以上のレコードのフィールド値 を変更します。 Syntax command changes attribute values in one or more existing records in a table.
Syntax
Syntax 1:
UPDATE table SET attr | |TO |= |
| | |
attr_value {, attr | |TO |= |
| | |
attr_value} |
[where_clause];
Syntax 2:
UPDATE table [ | |(*) |(attr {, attr}) |
|] | |
|VALUES [(] attr_value {, attr_value} [)] |attr_value {, attr_value} [END] |SET TO attr_value {, attr_value} |FROM data_source |
|; | | | |
[where_clause];
Syntax 3:
UPDATE table SET | | * | attr {, attr} |
| | |
|VALUES [(] attr_value {, attr_value} [)] |attr_value {, attr_value} [END] |FROM data_source |
|; | | |
[where_clause];
説明
attr_value |
| |||
expr | フィールドに与えられた適した値。詳細は Expressionsを参照してください。 | |||
data_source |
| |||
os_command | システムコマンドの出力が、直接テーブルに挿入されます。 この機能はUnixのみ有効です。 | |||
where_clause | シンタックスはWHERE句 を参照してください。 |
注意
必要な特権
UPDATE特権
例
シンプルな更新
loansテーブル内の全てのレコードに対して日付を、1990年1月1日 にします。
UPDATE loans SET date = '1 Jan 1990';
特定レコードの更新
loansテーブル中のnameフィールドMoscaを Kilroyに変更します。
UPDATE loans SET name TO 'Kilroy' WHERE name = 'Mosca';
この更新では、2レコードしか更新しません。
AND結合した条件で更新すいます。
loansテーブル中の日付が1990年2月2日でname フィールドがMoscaのレコードのnameフィールドをKilroy に変更します。
UPDATE loans SET name TO 'Kilroy' WHERE name = 'Mosca' AND date = '2 February 1990';
OR結合された条件で更新します。
loansテーブルのnameフィールドがMoscaと Jonesのレコードの、nameフィールドをKilroyに変更 します。
UPDATE loans SET name TO 'Kilroy' WHERE name = 'Mosca' OR name = 'Jones';
MoscaとJonesを表す場合に、英語での記述は Mosca and Jonesとなりますが、SQLのWHERE句での指定は Mosca or Jonesと指定するということに注意してください。 WHERE句でAND結合した記述Mosca and Jonesは レコードを限定できません。
いろいろなUPDATEコマンドのシンタックス例
Moscaの電話番号を928-1796に、クレジットリミットを$250.00 に変更するには以下のコマンドを使用します。
UPDATE personnel SET phone TO '923-1796', credit_limit TO 250 WHERE name = 'Mosca'; UPDATE personnel (phone, credit_limit) SET TO '923-1796', 250 WHERE name = 'Mosca'; UPDATE personnel (phone, credit_limit) '923-1796', 250 END WHERE name = 'Mosca'; UPDATE personnel (phone, credit_limit) VALUES '923-1796', 250 WHERE name = 'Mosca'; UPDATE personnel VALUES 5, 'Mosca', '923-1796', 250 WHERE name = 'Mosca';
計算して更新します。
loansテーブルのamountフィールド値を2%高くして更新します。
UPDATE loans SET amount TO amount * 1.02;
ファイルから更新します。
下に示すデータを含んでいるファイル名をnewlimitsとします。データは 1行ごとか、Empress変数MSVALSEPに設定された文字列で分離されて いる必要があります。
600 500 250 750 500 250
以下のコマンドを使用します。
UPDATE personnel SET credit_limit FROM newlimits;
SELECT from personnelコマンドは、以下のような表示をします。
number name phone credit_limit 10 Kilroy 426-9681 $600.00 5 Mosca 544-2243 $500.00 17 Wladislaw 723-6073 $250.00 3 Jones 667-2951 $750.00 8 Peterson 978-6060 $500.00 4 Scarlatti 961-7363 $250.00
DELETEコマンドは、テーブルから1つ以上のレコードを削除します。
Syntax
DELETE [FROM] table [where_clause];
説明
where_clause | シンタックスはWHERE句 を参照してください。 |
注意
よって削除対象を指定する条件を設定する際には、十分注意する必要があります。
必要な特権
DELETE特権
例
シンプルな削除
loansテーブルのnameフィールドがJonesのレコードを全て削除 します。
DELETE FROM loans WHERE name = 'Jones';
Jonesという名前のレコードを全て削除します。
AND結合した条件で削除します。
WHERE句にレコードを特定するための条件を与えて削除します。 loansテーブルのnameフィールドがJonesで、 dateフィールドが1990年8月12日のレコードを削除します。
DELETE FROM loans WHERE name = 'Jones' AND date = '12 August 1990';
最も安全な方法はWHERE句の中で全フィールドを指定することです。
EMPTYコマンドは指定されたテーブル中の、全レコードを削除します。
Syntax
EMPTY table;
注意
必要な特権
EMPTY特権
例
loansテーブル内の全レコードを削除します。
EMPTY loans;
CALLコマンドは、表現式を評価したり、ストアドプロシージャを呼び出し ます。
Syntax
CALL | |expr |procedure_name [([expr {,expr}])] |
| [ | |
|INTO |ONTO |
| filename ]; | |
注意
CALLコマンドでの表現式には、テーブル名、フィールド名は指定 できません。
対話型SQLではCALLコマンドによるデータタイプの変換はでき ません。
プロシージャまたはファンクションのみ呼び出すことができます。集計関数や オペレータが呼び出された場合には、エラーメッセージを出力します。
必要な特権
なし
例
ストアドプロシージャlog_eventを呼び出します。
CALL log_event;
本日から32日後の日付を取得します。
CALL TODAY + 32 DAYS;
いくつかの数学関数を呼び出します。
CALL sin(30); CALL cos(60);
しばしば、ある期間内のデータ(テーブルからの読込みまたは更新)について保証 しなくてはならない場合があります。これは、トランザクションの間に LOCK TABLEコマンドを使用して、他からのテーブルアクセスを制限すること により行うことができます。LOCK TABLEコマンドを発行することにより直ち に機能します。
Syntax
LOCK table [IN] | |EXCLUSIVE |EXCL |SHARE |
| [MODE]; | | |
注意
必要な特権
共有モードでは、SELECT特権とUPDATE特権が必要 です。
排他モードでは、UPDATE特権、INSERT特権、 DELETE特権が必要です。
例
トランザクションが既に開始されていて、トランザクション中は排他 モードでloansテーブルをロックする場合。
LOCK loans EXCLUSIVE;
他のプロセスがloansテーブルにアクセス中であった場合、以下の メッセージが表示されます。
*** Lock Busy *** table 'loans' lock busy
SORTまたはORDERコマンドは、テーブルのデータを並べ替え ます。この並べ替えは1つのフィールドでも複数のフィールドでも行なえ、フィールド ごとに昇順または降順の指定ができます。省略時は昇順です。
Syntax
|SORT |ORDER |
| table [ | |
|BY |ON |
|] attr [ | |ASCENDING |ASC |DESCENDING |DESC |
|] {, attr [ | | | |
|ASCENDING |ASC |DESCENDING |DESC |
|]}; | | | |
注意
必要な特権
SORT特権
例
personnelテーブルをnumberフィールドの昇順にソートします。
SORT personnel BY number; ORDER personnel BY number;
ソート後のテーブルを検索します。
SELECT FROM personnel;
以下のように表示されます。
number name phone credit_limit 3 Jones 667-2951 $500.00 4 Scarlatti 961-7363 $100.00 5 Mosca 544-2243 $750.00 8 Peterson 978-6060 $250.00 9 Jordan 964-3335 $250.00 10 Kilroy 426-9681 $500.00 17 Wladislaw 723-6073 $50.00