ホームページ > データベース > Oracle > Oracleデータベースのストアドプロシージャとは何ですか?

Oracleデータベースのストアドプロシージャとは何ですか?

青灯夜游
リリース: 2020-08-22 15:19:54
オリジナル
5134 人が閲覧しました

Oracle データベース ストアド プロシージャ: 特定の機能を実行するための SQL ステートメントのセット。コンパイルされてデータベースに保存されます。ストアド プロシージャは、フロー制御と SQL ステートメントによって記述されたプロシージャです。このプロシージャはコンパイルおよび最適化されてデータベース サーバーに格納され、アプリケーション プログラムが使用するときにのみ呼び出す必要があります。

Oracleデータベースのストアドプロシージャとは何ですか?

ストアド プロシージャ (ストアド プロシージャ) は、特定の関数を完了するための一連の SQL ステートメントであり、コンパイルされてデータベースに保存されます。ユーザーは、ストアド プロシージャの名前を指定し、パラメーターを指定することによって (ストアド プロシージャにパラメーターがある場合)、ストアド プロシージャを実行します。ストアド プロシージャはデータベース内の重要なオブジェクトであり、適切に設計されたデータベース アプリケーションではストアド プロシージャを使用する必要があります。

ストアド プロシージャは、フロー制御と SQL ステートメントによって記述されたプロシージャです。このプロシージャはコンパイルおよび最適化され、データベース サーバーに保存されます。アプリケーション プログラムが使用する場合にのみ呼び出す必要があります。 ORACLE では、いくつかの関連プロシージャを組み合わせてプログラム パッケージを形成できます。

利点:

1. ストアド プロシージャは作成時にのみコンパイルされます。今後ストアド プロシージャを実行するたびに再コンパイルする必要はありません。一般に、SQL ステートメントはコンパイルされます。実行されるたびに 1 回だけ実行されるため、ストアド プロシージャを使用してデータベースの実行速度を向上させます。

2. データベースに対して複雑な操作 (複数のテーブルに対する更新、挿入、クエリ、削除など) を実行する場合、この複雑な操作をストアド プロシージャにカプセル化し、ストアド プロシージャによって提供されるトランザクション処理と組み合わせることができます。データベースを使用します。

3. ストアド プロシージャは再利用できるため、データベース開発者の作業負荷を軽減できます。

4. セキュリティが高く、指定したストアドプロセスを特定のユーザーのみが使用できるように設定できます。

簡単に言うと、マシン上にストアド プロシージャを作成します。このストアド プロシージャは、テーブル内のデータと同様にリモート データベース サーバーに配置されますが、実行可能なコードです。データベース サーバーは、作成したストアド プロシージャを呼び出すことができます。

その機能は詳細を隠すことです。つまり、作成したストアド プロシージャ コードは非常に複雑かもしれませんが、他の人がそれを呼び出すのは非常に簡単です。具体的にどのように実行されるかを知る必要はなく、複数の命令を一度に完了できます。

基本構文

CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)] 
{AS|IS} 
[说明部分] 
BEGIN 
可执行部分 
[EXCEPTION 
错误处理部分] 
END [过程名];
ログイン後にコピー

1。オプションのキーワード OR REPLACE は、ストアド プロシージャが既に存在する場合、新しいストアド プロシージャ (通常はユーザー ストアド プロシージャの再構築) で上書きすることを意味します。

2. パラメータ部分は複数のパラメータを定義するために使用されます(パラメータがない場合は省略できます)。パラメータには、IN、OUT、IN OUT の 3 つの形式があります。パラメータ形式が指定されていない場合、デフォルトは IN です。

3. キーワード AS は、IS と書くこともでき、その後にプロセスの説明部分が続き、そこでプロセスのローカル変数を定義できます。

4. ストアド プロシージャを作成するには、任意のテキスト エディタを使用するか、SQLPLus 環境で直接使用できます。コンパイル済みコードを生成するには、作成したストアド プロシージャを SQLPLus 環境でコンパイルする必要があります。元のコードとコンパイル済みコードはコンパイルされます。プロセス中にデータベースに保存されます。正常にコンパイルされたストアド プロシージャは、Oracle 環境で呼び出すことができます。

5. ストアド プロシージャは、不要になった場合は削除できます。ストアド プロシージャを削除する人は、プロシージャの作成者、または DROP ANY PROCEDURE システム権限を持つ人です。ストアド プロシージャを削除するための構文は次のとおりです:

DROP PROCEDURE 存储过程名;
ログイン後にコピー

6. ストアド プロシージャを再コンパイルする場合は、プロシージャの作成者、または ALTER ANY PROCEDURE システム権限を持つユーザーのみが実行できます。構文は次のとおりです:

ALTER PROCEDURE 存储过程名 COMPILE;
ログイン後にコピー

7. ストアド プロシージャを実行 (または呼び出し) する人は、プロセスの作成者、EXECUTE ANY PROCEDURE システム権限を持つ人、または付与された人です。所有者による実行権限。実行メソッドは次のとおりです:

メソッド 1:

EXECUTE 模式名.存储过程名[(参数...)];
ログイン後にコピー

メソッド 2:

BEGIN 
模式名.存储过程名[(参数...)]; 
END;
ログイン後にコピー

8. 渡されるパラメーターは、定義されたパラメーターのタイプ、番号、順序と一致している必要があります。 (パラメータがデフォルト値を定義している場合、呼び出し時にパラメータを省略できます)。パラメータには、変数、定数、または式を使用できます。

9. as と is の違い: どちらもストアド プロシージャ (プロシージャ) と関数 (関数) で使用できますが、IS を使用すると、デバッグ モードを使用してストアド関数をデバッグできなくなります。ビューでは AS のみを使用できますが、IS は使用できません。カーソル (CURSOR) では、IS のみを使用できますが、AS は使用できません。

10. oracle のデコード関数

意味の説明:

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
ログイン後にコピー

この関数の意味は次のとおりです:

IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
ログイン後にコピー
decode(字段或字段的运算,值1,值2,值3)
ログイン後にコピー

この関数の結果フィールドの値またはフィールド演算が値 1 に等しい場合、関数は値 2 を返し、それ以外の場合は値 3 を返します。

もちろん、値 1、値 2、および値 3 を次の値にすることもできます。この関数は特定の SQL ステートメントを作成します 非常に単純です

例:

select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
ログイン後にコピー

sign() 関数は、値が 0、正の数、または正の数であるかどうかに応じて、それぞれ 0、1、および -1 を返します。または負の数

例:

変数 1=10、変数 2=20

この場合、sign(変数 1-変数 2) は -1 を返します。デコードのデコード結果は「変数 1」となり、小さな値の比較の目的が達成されます。

11. nvl 関数

NVL 関数の形式は次のとおりです: NVL(expr1,expr2)

意味は次のとおりです。 : oracle が最初の場合 1 つのパラメータが空の場合は 2 番目のパラメータの値が表示され、最初のパラメータの値が空でない場合は、最初のパラメータの元の値が表示されます。

NVL2函数的格式如下:NVL2(expr1,expr2, expr3)

含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。

Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。

格式如下:

Coalesce(expr1, expr2, expr3….. exprn)
ログイン後にコピー

表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。

返回表达式中第一个非空表达式,如有以下语句:   

SELECT COALESCE(NULL,NULL,3,4,5) FROM dual
ログイン後にコピー

其返回结果为:3

如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值

12、max函数

对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。

13、随机抽取N条记录

https://blog.csdn.net/bbliutao/article/details/7727322

14、untion all

union all,解释为联合所有。

Union解释为联合。union或者Union all实现把前后两个select集合的数据联合起来,组成一个结果集查询输出。这就要求联合前后的结果集,需要分别有相同的输出字段的数目,并且对应的字段类型要相同。
SELECT column1, column2 from table1 union (all) select column1, column2 from table2

以上语句要求量表的column1字段类型相同,column2类型相同。而且每个查询的数目都是一样的。UNION ALL和UNION的差别就在ALL上面,第一个叫联合所有,说明会显示前后两个查询所有的数据,而UNION没有ALL(所有)这个单词,实现将前后两个查询的数据联合到一起后,去掉重复的数据显示

推荐教程:《Oracle教程

以上がOracleデータベースのストアドプロシージャとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート