Oracleのストアドプロシージャと関数
保管時には、また、サブルーチンとして知られています
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,
一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
他には、そこにBaiduの百科事典上で導入されていません
構文およびプロセスの例を作成します
(パラメータで)平均化の例
--中括号就不用说了吧,可写可不写
/*注:“pro_avgSal”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/
CREATE [OR REPLACE] PROCEDURE pro_avgSal(t_job text.job%type)
AS
T_avg number(8);
BEGIN
SELECT avg(字段名)into T_avg FROM 表名 where job =t_job ;
DBMS_OUTPUT.put_line(T_avg);
END pro_avgSal;
语法:
create [OR REPLACE] procedure 储存过程名([参数名] [类型],[参数名] [类型])
IS|AS
[局部变量声明区]
begin
.........
end
ストアドプロシージャを呼び出します
SQL文のコール
CALL 储存过程名();--一定要加上小括号,这类似于java的方法
PL / SQLの呼び出し
BEGIN
储存过程名();--一定要加上小括号,这类似于java的方法
END;
プロセスパラメータの三つの方法
INは:呼び出し側プログラムに値を受けて、デフォルトモードのパラメータは
OUT:呼び出し元プログラムに値を返す
、IN OUT:呼び出し側プログラムに値を受け、更新呼び出しプログラムに戻り値
端的に、INは、入力パラメータであります出力アウトの入力パラメータのパラメータ、および戻り引数アウト
他のユーザーに実行権限を付与するプロセス
GRANT EXECUTE ON 过程名 TO 用户名;
除去プロセス
DROP PROCEDURE 过程名;
自律業務
サブプロセスの例としては、親プロセスに影響を与えます
これが私のテーブルです
--创建子过程
CREATE OR REPLACE PROCEDURE t1Pro
as
begin
update text set SALARY=(SALARY-1000) where id =6;--让id等于6的SALARY减少1000
rollback;--回滚事务
end;
--创建父过程
CREATE OR REPLACE PROCEDURE t2Pro
as
begin
update text set SALARY=(SALARY-2000) where id =5;--让id等于5的SALARY减少2000
t1Pro();
end;
親発見プロセスを呼び出して、テーブルが変更されていない、idが等しい6と5に等しい減少しませんでした。
その理由は、トランザクションのロールバックは、サブプロセス、カーディフプロセスの影響で発生したことです
変更後
--创建子过程
CREATE OR REPLACE PROCEDURE t1Pro
as
pragma autonomous_transaction;--自主事务定义的关键字,父过程事务互不影响
begin
update text set SALARY=(SALARY-1000) where id =6;
rollback;--回滚事务
end;
子プロセスのこの実現には、親プロセスには影響しませんが、IDが2000を削減する5 SALARYに等しいですが、idは6に等しいが変更されることはありません
フィーチャー自律業務
かかわらず、トランザクションの1ステータス
トランザクションが主に影響しない、コミットまたはロールバック2の
3つの独立したトランザクションの結果が他のトランザクションに表示される
別のトランザクションのカスタマイズを開始する4
機能
Oracle创建函数是通过PL/SQL自定义编写的,通过关键字function按照自己的需求把复
杂的业务逻辑封装进PL/SQL函数中,函数提供一个返回值,返回给使用者。这样使用者
就不需要去理解业务逻辑。
関数の構文を作成します
CREATE [OR REPLACE] FUNCTION 函数名称[参数名 参数类型]RETURN 返回类型
IS|AS
[局部变量声明]
BEGIN
.........
END;
機能の制限の定義
1は、パラメータPL / SQL型にすることはできません
データベースもの種類の関数でなければならない戻り値の型2
2つの方法でアクセス機能
PL / SQLブロックを使用して
DECLARE
BEGIN
函数名();
END;
SQL文を使用した作業
列:select 函数名(参数) from 表名;