oracleとmysqlのカスタム関数の違い
3678 ワード
oracleとmysqlのカスタム関数の違い全体フォーマット mysql oracle 基礎操作 賦値 声明 サイクル 判断 内蔵関数 その他の注意 プロジェクトの必要性のため、私は主にmysqlのカスタム関数をoracleに移行します.だから、ここではoracleに重点を置きます.彼ら2人の違いは、主にいくつかの部分にあります:全体のフォーマット;基礎操作と組み込み関数、その他注意すべきことがあります.
全体の書式
mysql
create function functionName(param) returns datatType begin//more work to do return 【result】; end;
oracle
create [or replace ] function functionName([param]) return resultType as|is begin//more work to do return result; end; 実は大体フォーマットが悪くなくて、ネットも山ほどあって、ここは少しだけ言います!
ベースオペレーション
に値を付ける mysql:set、例えばset a='; oracle::=、例えばa:='; クエリー文を使用して値を割り当てます.カーソルとプロシージャでは にもよく使用されます.例えばselect sysdate into time from dual;
宣言 mysql:生命は関数体、すなわちbeginの後、DECLAREキーワード、例えばDECLARE sTemp VARCHAR(4000); oracle:DECLAREを使わずに直接書き、asまたはisの後、beginの前、例えば:sTemp VARCHAR(4000); ここでasとisに言及する以上、oracleのプロセスと関数では、asとisは他に行かない.
ループ mysql:while条件do...end while; oracle:while条件loop...end loop;
と判断
すべて:if条件then...end if;
ビルド関数
ここで約束します.まずmysqlの関数を話して、oracleがどの関数で対応しているかを説明します. ifnull()対応nvl():nullに何を表示するか、nullに何を表示しないかを意味するので、oracleのような万能なdecode()関数 を把握することをお勧めします. concatは、両方のデータベースにありますが、oracleに2つのパラメータが余分であれば、必ずエラーを報告し、|ハイフンで解決したり、concat関数でネストしたりすることができますが、mysqlにはこのような制限値はありません. group_concat(フィールド)、関数の意味、フィールドでグループ化され、‘,’番号で分割され、oracleで対応する関数、12 c前:vm_concat(フィールド)でいいです.12 c後、関数を変更して廃棄します.代替関数は: です. find_in_set(temp,src)はtemp文字列がsrc文字列にあるか否かを意味し、src文字列は‘,’で分割され、booleanタイプの数値が返されるので、それ自体が1つの判断であってもoracleではinstr(stc,temp)で代用できるが、instr関数はtempのsrcでの下付きを返すので、実際の業務に基づいて判断する必要がある. insert(src,indexstart,leng,replacesstr)は、src文字列においてindexstartビットから始まるlengビットを、replacesstr文字列で置き換える役割を果たす.これはoracleで完璧に代替できる関数ではありません.ここに例がありますが、 を参照してください. uuid()関数の役割はuuidを生成し、oracleはビットsysの代わりになります.guid()、Oracle公式sys_guid()が生成したuuidは世界で唯一、128ビットを占めているため、リソースが多くかかります.
その他の注意 oracleでは、パラメータは関数内で付与操作を行うことができません. oracleでは、空(’’)がnullテスト方法であり、局所変数を生命した後、空(’)に値を割り当て、その後、局所変数を変更して表示される値を表示したり、if...thenで判断したりすることができます. oracleの関数名関数名は、二重引用符で囲まれているかどうかに分けることができます.二重引用符で囲まれている場合は、oracleデータが文字列に厳密に一致し、大文字と小文字を区別していることを示します.二重引用符または単引用符で囲まれていない場合は、oracleが自分で認識するようにします.oracleは大文字の名前で処理することに同意します. 設計insertキーワードoracle関数で、設計insertキーワード挿入データ、最良のトランザクション、構造:
例:
全体の書式
mysql
create function functionName(param) returns datatType begin//more work to do return 【result】; end;
oracle
create [or replace ] function functionName([param]) return resultType as|is begin//more work to do return result; end; 実は大体フォーマットが悪くなくて、ネットも山ほどあって、ここは少しだけ言います!
ベースオペレーション
に値を付ける
宣言
ループ
と判断
すべて:if条件then...end if;
ビルド関数
ここで約束します.まずmysqlの関数を話して、oracleがどの関数で対応しているかを説明します.
listagg( , char) within group( order by ) -- 2 , `,char ,
# ‘’ , oracle
# set c1 = INSERT(c1,1,instr(c1,split1),'');
SELECT substr(temp, instr(temp, split1) + length(split1)) into temp from dual;
その他の注意
CREATE OR REPLACE
FUNCTION "getParentIds"(pid IN VARCHAR2)
RETURN VARCHAR2
IS
sTemp VARCHAR(4000);
BEGIN
sTemp:='$';
pid := sTemp; --
RETURN sTemp;
END;
PRAGMA AUTONOMOUS_TRANSACTION; ... commit;
例:
CREATE OR REPLACE
FUNCTION "fn_split" (c1 VARCHAR, split1 VARCHAR)
RETURN VARCHAR
AS
PRAGMA AUTONOMOUS_TRANSACTION; ####
uuid varchar(36);
temp VARCHAR2(36);
BEGIN
temp := c1;
select rawtohex(SYS_guid()) into uuid from dual;
while(instr(temp,split1)<>0) loop
insert into split_tab (id,col,dataTime) values (uuid,substr(temp,1,instr(temp,split1)-1),SYSDATE());
SELECT substr(temp, instr(temp, split1) + length(split1)) into temp from dual;
END loop;
insert INTO split_tab (id,col,dataTime) values (uuid,c1,SYSDATE());
commit; ###
return uuid;
END;