|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サブルーチン定義 |
なし
普通にプログラムを書き、GOSUBで呼ばれてRETURNで終わればサブルーチン扱い。したがって、引数やローカル変数などという概念もない |
Sub 名前()
〜
End Sub |
Sub 名前()
〜
End Sub |
Sub 名前()
〜
End Sub |
procedure 名前;
begin
〜
end; |
名前: PROC;
〜
END; |
sub 名前
{
〜
} |
void 名前(void){
〜
} |
void 名前(){
〜
} |
void 名前(){
〜
} |
function 名前(){
〜
} |
void 名前(){
〜
} |
CREATE OR REPLACE PROCEDURE 名前
IS
〜
BEGIN
〜PL/SQL〜
END;
/
SHOW ERR |
CREATE OR REPLACE
PROCEDURE 名前
IS
〜
BEGIN
〜PL/SQL〜
END;
/
SHOW ERR |
なし |
Sub 名前(引数 As 型,…)
〜
End Sub |
Sub 名前(引数,…)
〜
End Sub |
Sub 名前(引数 As 型,…)
〜
End Sub |
procedure 名前(引数,引数:型; 引数:型);
ローカル変数等宣言;
begin
〜
end;
procedureの中にprocedureを宣言することも可 |
名前: PROC(引数,…);
DCL 引数 型;…
〜
END; |
sub 名前
{
〜
}
引数は特殊配列@_を使用 |
void 名前(型 引数,…){
〜
} |
void 名前(型 引数,…){
〜
} |
void 名前(型 引数,…){
〜
} |
function 名前(引数,…){
〜
} |
void 名前(型 引数,…){
〜
} |
CREATE OR REPLACE PROCEDURE 名前(引数 IN 型,…)
IS BEGIN
〜PL/SQL〜
END;
/
SHOW ERR
IN,OUT,INOUTが使用可能 |
CREATE OR REPLACE
PROCEDURE 名前(引数 IN 型,…)
IS
〜
BEGIN
〜PL/SQL〜
END;
/
SHOW ERR
IN,OUT,INOUTが使用可能 |
RETURN |
Exit Sub |
|
|
|
RETURN; |
return; |
return; |
return; |
return; |
return; |
return; |
|
|
サブルーチン呼び出し |
GOSUB 行番号
サブルーチンとしてその行を実行する。RETURNが無ければ、単なるGOTOと同じ。スタックは無駄に使うだろうけど |
Call 名前 |
|
|
名前 |
|
名前;
&名前; |
名前(); |
名前(); |
名前(); |
名前(); |
名前(); |
EXEC 名前
EXEC 名前()
sql*plus |
名前;
名前(); |
なし |
Call 名前(引数,…)
名前 引数,…
この2つの構文の違いは「引数の計算をどこでやるか」だったと思うが、詳細は忘れた |
Call 名前(引数,…)
名前 引数,… |
|
名前(引数,…) |
CALL 名前(引数,…); |
名前(引数,…);
&名前(引数,…); |
名前(引数,…); |
名前(引数,…); |
名前(引数,…); |
名前(引数,…); |
名前(引数,…); |
EXEC 名前(引数,…)
CALL 名前(引数,…);
sql*plus |
名前(引数,…);
名前(引数名=>値,…); |
名前 引数名:=値,…
引数名を明示することで、順序を好きに変えられる |
関数定義 |
なし |
Function 名前(引数 As 型,…) As 戻り型
〜
End Function |
Function 名前(引数,…)
〜
End Function |
Function 名前(引数 As 型,…) As 戻り型
〜
End Function |
function 名前(引数,引数:型; 引数:型):戻り型;
宣言部;
begin
〜
end; |
|
sub 名前{
〜
} |
戻り型 名前(型 引数,…){
〜
} |
戻り型 名前(型 引数,…){
〜
} |
戻り型 名前(型 引数,…){
〜
} |
function 名前(引数,…){
〜
} |
戻り型 名前(型 引数,…){
〜
} |
CREATE OR REPLACE FUNCTION 名前(引数 IN 型,…)
RETURN 型
IS
〜
BEGIN
〜PL/SQL〜
END;
/
SHOW ERR
INのみ使用可能 |
CREATE OR REPLACE
FUNCTION 名前(引数 IN 型,…)
RETURN 型
IS
〜
BEGIN
〜PL/SQL〜
END;
/
SHOW ERR
INのみ使用可能 |
(defun 名前 (引数 …) 本体〜)
暗黙の(block 名前 〜)が作られるので、return-fromが使える |
なし |
名前=戻り値
Exit Function |
名前=戻り値
Exit Function |
Return 値
VBAと同じ返し方も可 |
名前:=戻り値 |
|
return 戻り値;
又は関数の最後に値だけの行を置く |
return 戻り値; |
return 戻り値; |
return 戻り値; |
return 戻り値; |
return 戻り値; |
RETURN 戻り値; |
RETURN 戻り値; |
(return-from 名前 戻り値) |
関数呼び出し |
なし |
名前(引数,…)
名前(引数,…,引数名:=値,…) |
名前(引数,…) |
|
名前(引数,…)
引数がない場合は、名前のみ |
|
名前(引数,…)
&名前(引数,…) |
名前(引数,…) |
名前(引数,…) |
名前(引数,…) |
名前(引数,…) |
名前(引数,…) |
名前(引数,…)
CALL 名前(引数,…) INTO :バインド変数;
sql*plus |
名前(引数,…)
名前(引数名=>値,…) |
(名前 引数 …)
(apply #'名前 引数 …)
(funcall 名前 引数 …) |
引数の既定値 |
|
Function 名前 (Optional ByVal 引数 As Variant
= 省略時値)
〜
End Function 引数の型がVariantで省略時値を指定しない場合は、IsMissing(引数) で
呼び出し時に省略されたかどうかを判断できる |
|
Function 名前 (Optional ByVal 引数 As 型 = 省略時値)
〜
End Function |
|
|
|
なし |
戻り型 名前(型 必須引数,…,引数=既定値){
〜
} |
なし |
なし |
|
|
CREATE OR REPLACE FUNCTION 名前(必須引数,…,引数:=既定値) 〜 |
(defun 名前 (必須引数 … &optional (引数 既定値)) 本体) |
可変引数 |
なし |
|
|
|
|
|
そもそもが可変引数しか無い |
戻り型 名前(型 先頭引数,...){
va_list ap;
va_start(ap,先頭引数);
va_arg(ap,型)で使用
va_end();
} |
戻り型 名前(型 先頭引数,...){
va_list ap;
va_start(ap,先頭引数);
va_arg(ap,型)で使用
va_end();
} |
戻り型 名前(型 先頭引数,型... 変数){
変数が配列として扱える
} |
function 名前(引数,〜){
argumentsを使用
} |
戻り型 名前(〜, params 型[] 変数)
{
〜
}
paramsを付けた最後の変数だけ可変引数になる |
|
|
(defun 名前 (引数 … &rest リスト変数) 本体) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
静的初期化 |
|
|
|
Shared Sub New()
〜
End Sub |
|
|
|
|
|
static{
〜
} |
|
|
|
|
|
コンストラクタ |
|
|
|
Sub New(引数…)
MyBase.New(引数…)
〜
End Sub |
|
|
sub new {
my $class = shift;
my $self = {〜};
〜
return bless $self, $class;
} |
|
クラス名(引数…) : 上位クラス名(引数), …{
〜
} |
クラス名(引数…){
super(引数…);
〜
} |
|
|
|
|
|
デストラクタ |
|
|
|
|
|
|
sub DESTROY {
my $self = shift;
〜
} |
|
~クラス名()
{
〜
} |
なし |
|
|
|
|
|
ファイナライザー |
|
|
|
Sub Finalize()
〜
End Sub |
|
|
|
|
|
protected void
finalize(){
〜
} |
|
~クラス名()
{
〜
} |
|
|
|
最初に呼ばれるPG |
RUN →最も若い行番号から実行
RUN 行番号 →その行から実行 |
イベントや、指定したマクロが実行される |
ソースの先頭 |
|
programの本体 |
OPTIONS(MAIN)が指定されているPROC |
ソースの先頭 |
main関数 |
(C++はmain関数だがMFCでは隠蔽されている) |
javaコマンドで指定したクラスのmain関数 |
ソースの先頭 |
|
|
|
ソースの一番外側の関数 |
終了命令 |
END |
|
WScript.Quit |
Environment.Exit(値)
Application.Exit()…ウィンドウアプリの終了 |
|
|
die; |
exit(値); |
|
System.exit(値); |
|
Environment.Exit(値);
Application.Exit();…ウィンドウアプリの終了 |
EXIT
〔戻り値 〕 〔COMMIT | ROLLBACK 〕 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
エラー(例外)処理定義 |
ON ERROR GOTO 行番号
エラーが起きたらその行へ飛べ、という宣言。
ON ERROR GOTO 0
→エラー処理へ飛ぶのを無効にする。(0は行番号のようにも見えるが、通常のプログラムは最も若い行番号から実行されるので、行番号0がエラー処理であるのはおかしいとの考えにより0は特別扱い) |
On Error GoTo ラベル
On Error GoTo 0 |
On Error Resume Next
On Error GoTo 0 |
Try
〜
Catch e As 型
〜
Finally
〜
End Try |
|
ON エラー種類名 BEGIN;
〜
END;
→PL/Iに用意されているエラーに対して1つずつハンドラを作れる |
|
なし |
try{
〜
}catch(型 e){
〜
}
型は、intであろうがchar*であろうが何でもよい |
try{
〜
}catch(例外クラス e){
〜
}finally{
〜
}
この例外クラスはThrowableから派生している必要がある |
try{
〜
}catch(e){
〜
}finally{
〜
} |
try{
〜
}catch(例外クラス名 e){
〜
}finally{
〜
}
catchは色々省略可能
catch(例外クラス名){〜}
catch{〜} |
WHENEVER OSERROR EXIT OS.SQLCODE ROLLBACK;
WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK; |
DECLARE
例外名 EXCEPTION;
BEGIN
〜
EXCEPTION
WHEN 例外名 OR 例外名… THEN 〜;
WHEN OTHERS THEN 〜;
END;
例外を宣言しておき、例外処理部に処理を列挙する。 |
(catch 'タグ 〜) |
ERR →エラー番号が入っている |
Err.Number →エラー番号が入っている
Err.Description →エラーメッセージ |
Err.Source
Err.Number
Err.Description
|
|
|
|
|
|
|
e.getCause() →原因となった例外を取得
e.getMessage() →エラーメッセージを取得 |
eがErrorクラスの場合、
e.name →名前
(e.number>>16)&0x1fff →機能識別符号
e.number&0xffff →エラーコード
e.description →description
e.message →descriptionと同じっぽい |
|
SQLCODE →エラー番号が入っている
SQLERRM →エラーメッセージが入っている
SQLERRM(エラーコード) →コードに該当するエラーメッセージを取得 |
|
RESUME NEXT
→エラーが起きた次の命令へ戻る
RESUME 行番号
→エラーを無かったことにして、その行へ飛ぶ
RESUME 0
→エラーが起きた命令を再実行 |
Resume Next
→エラーが起きた次の命令へ戻る
Resume ラベル
→エラーを無かったことにして、そのラベルへ飛ぶ
Resume
→エラーが起きた命令を再実行 |
|
Throw e |
|
|
|
|
|
throw e;
→上位ルーチンへ例外を渡す |
throw e;
→上位ルーチンへ例外を渡す |
throw e;
→上位ルーチンへ例外を渡す
throw;
→上位ルーチンへcatchした例外を渡す |
|
catchの戻り値は、throwの値 |
エラー(例外)発生 |
ERROR エラー番号 |
Error エラー番号
Err.Raise エラー番号,,"エラーメッセージ" |
Err.Raise エラー番号 |
|
|
|
|
なし |
throw 値;
catchの型に合致する値であれば何でもよい。return文と同様 |
throw 例外;
例外クラスのインスタンス「new 例外クラス名()」等 |
throw 文字列;
throw new Error((機能識別符号<<16)+エラーコード, メッセージ文字列); |
throw 例外; |
|
RAISE 例外名;
RAISE_APPLICATION_EXCEPTION(番号, 'メッセージ'); …番号は-20000〜-20999の範囲。SQLCODEは1(ユーザー定義例外)になる |
(throw 'タグ 値)
(error "メッセージ")
(cerror "継続メッセージ" "エラーメッセージ") |
アサート |
|
Debug.Assert 正常条件 |
|
Debug.Assert(正常条件)
Debug.Assert(正常条件, "メッセージ", "詳細") |
|
|
|
|
|
assert 正常条件
式:メッセージ; |
|
|
|
|
(assert 条件 "メッセージ") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
外部プログラム実行 |
|
Dim p As Double
p = Shell("実行PG", vbNomralFocus)
pはタスクID |
|
|
|
|
|
pid_t pid = fork();
if (pid < 0) {
//fork失敗
return -1;
} else if (pid == 0) {
//子プロセス
execl("実行PG", "arg0(実行PG)", "arg1"…, NULL);
または execv("実行PG", 引数の配列);
//exec系は、ここに来たらエラー
perror("exec");
return -2;
}
//親プロセスは、子プロセスの終了を待つ
int status;
wait(pid, &status, 0);
system("シェルコマンド名 引数…"); |
ShellExecute |
Process p = Runtime.getRuntime().exec("実行PG
arg1…");
p.waitFor(); //子プロセスの終了待ち
int r = p.exitValue(); //プロセスが終了していないと例外が発生する |
|
|
|
|
|