建立存储过程的语法:
一、Informix
create procedure proc_name( [....in_parameter_list])
returning out_para_list / out_result_set;
二、Oracle
create [or replace] procedure procedue_name
[ (arg1 [ {in | out | in out }] type
(argn [ {in | out | in out }] type,)]
{is | as} --代替DECLARE关键字
[ 变量定义区]
begin
end procedure_name;
三、几个简单的例子
1、没有参数也没有返回值
1)Informix
create procedure pNoParam()
begin
on exception
rollback work;
return;
end exception
begin work;
delete from t1;
delete from t2;
commit work;
end;
end procedure;
2)Oracle
create or replace procedure pNoParam
as
begin
delete from t1;
delete from t2;
commit;
exception
when others then
begin
rollback;
end;
end pNoParam;
2、有输入输出
往t1表中插入一条记录,返回值表示插入是否成功。
1)Informix
create procedure pNormalParam(f1 integer, f2 varchar(10))
returning integer;
begin
on exception
rollback work;
return -1;
end exception
begin work;
insert into t1 values(f1, f2);
commit work;
return 0;
2)Oracle
create or replace procedure pNormalParam(f1 number,
f2 varchar2, v_Result out number)
as
begin
insert into t1 values(f1,f2);
commit;
v_Result = 0;
return;
exception
when others then
begin
rollback;
v_Result := -1;
end;
end pNormalParam;
需要注意的是,在oracle存储过程中,参数是不能加上size的,比如f1,在t1表中该字段是number(10,0),而这里只能写number,而不能写number(10,0)。
3、返回记录集
1)Informix
create procedure pReturnSet() returning integer, varchar(10);
define i integer;
define j varchar(10);
foreach
select f1, f2 into i, j from t1
return i, j with resume;
end foreach;
end procedure;
2)Oracle
create or replace package TestRefCursorPkg as type TestRefCursorTyp is ref cursor; procedure pReturnSet(RefCursor out TestRefCursorTyp); end TestRefCursorPkg;
create or replace package body TestRefCursorPkg as
procedure pReturnSet (RefCursor out TestRefCursorTyp)
as
localCursor TestRefCursorTyp;
begin
open localCursor for select f1, f2 from t1;
RefCursor := localCursor;
end pReturnSet;
end TestRefCursorPkg;
/
四、其他差异说明
1、错误捕捉
1)Informix使用
on exception
end exception
2)Oracle
使用
exception
when others then
2、对游标的处理
1)Informix
create procedure pHasCursor()
define v_f1 integer;
begin
on exception
rollback work;
return;
end exception
begin work;
foreach curt1 with hold for
select f1 into v_f1 from t1 -- 注意这里没有分号
if (v_f1 = 1) then
update t1 set f2 = 'one' where current of curt1;
elif (v_f1 = 2) then
update t1 set f2 = 'two' where current of curt1;
else
update t1 set f2 = 'others' where current of curt1;
end if;
end foreach;
commit work;
end;
end procedure;
2)Oracle
create or replace procedure pHasCursor
as
v_f1 number(10,0);
cursor curt1 is
select f1 from t1 for update;
begin
open curt1;
loop
fetch curt1 into v_f1;
exit when curt1%notfound;
if (v_f1 = 1) then
update t1 set f2 = 'one' where current of curt1;
elsif (v_f1 = 2) then
update t1 set f2 = 'two' where current of curt1;
else
update t1 set f2 = 'others' where current of curt1;
end if;
end loop;
commit;
return;
exception
when others then
begin
rollback;
end;
end pHasCursor;
3、在存储过程中调用另外一个存储过程
1)Informix
Call pNoParam();
Call pNormalParam(1, ‘a’) returning v_Result;
2)Oracle
pNoParam;
pNormalParam(1, ‘a’, v_Result);
4、日期操作
1)当前时间
① Informix
define cur_dtime_var datetime year to second;
当前日期时间: let cur_dtime_var = current; -- datetime
② Oracle
Currtime date;
Currtime := sysdate;
2)当前日期的增减
① Informix
let tmp_date = today + 3 UNITS day; -- 当前时间加三天
let tmp_datetime = current + 1 UNITS second; -- 当前时间加1秒种
② Oracle
Tmp_date := sysdate + 3; -- 当前时间加三天
Tmp_date := sysdate + 1/24/3600; --当前时间加1秒种
3)日期转换成字符串
① Informix
let v_PeriodEndTime = year(v_date)||extend(v_date,month to month)
||extend(v_date,day to day) ||extend(v_date,hour to hour)
||extend(v_date,minute to minute)|| extend(v_date,second to second);
② Oracle
v_PeriodEndTime := to_char(v_date, 'yyyymmddhh24miss');
4)字符串转换成日期
假设字符串的形式是yyyymmddhhmiss形式的
① Informix
-- 直接转换成日期
let v_BeginDate = substr(v_BeginTime,1,4)||'-'||substr(v_BeginTime,5,2)
||'-'||substr(v_BeginTime,7,2)||' '||substr(v_BeginTime,9,2)
||':'||substr(v_BeginTime,11,2)||':'||substr(v_BeginTime,13,2);
-- 这个月的第一天
let v_date = substr(v_BeginTime,1,4)||'-'
||substr(v_BeginTime,5,2)||'-1 00:00:00';
-- 这个星期的第一天
let v_date = substr(v_BeginTime,1,4)||'-'||substr(v_BeginTime,5,2)
||'-'||substr(v_BeginTime,7,2)||' 00:00:00';
let v_week = weekday(v_date);
let v_date = v_date - v_week UNITS day;
② Oracle
-- 直接转换成日期
v_BeginDate := to_date(v_BeginTime, 'yyyymmddhh24miss');
-- 这个月的第一天
v_BeginDate := trunc(to_date(v_BeginTime, 'yyyymmddhh24miss'), ‘mm’);
-- 这个星期的第一天
v_BeginDate := trunc(to_date(v_BeginTime, 'yyyymmddhh24miss'), ‘day’);
5)事务
在oracle中缺省情况下,一个事务的结束就是下一个事务的开始,所以对于一个事务来说,我们只要写commit;即可,不需要明确标出什么时候开始一个事务,而informix需要。
6)打印调试信息
7)Informix
--设置跟踪模式
set debug file to "trace_check"; -- with append;
--说明“with append”表示以追加模式打开跟踪结果文件
trace '开始执行存储过程'
trace 'v_date='||v_date;
trace ‘存储过程执行完毕’
trace off;
执行完以后打开当前目录下的trace_check即可看到打印出来的信息。
8)Oracle
DBMS_OUTPUT.PUT_LINE(‘开始执行存储过程’);
DBMS_OUTPUT.PUT_LINE('v_date='||v_date);
DBMS_OUTPUT.PUT_LINE(‘存储过程执行完毕’);
先设置一下缓冲区的大小
set serveroutput on size 100000; -- 如果不执行该语句,会看不到调试信息
执行完毕以后,打印出来的信息就会直接显示在界面上。
5、关于参数的说明
如果存储过程想返回一个参数,在informix中是通过返回值的形式实现的,而在oracle是通过输出参数或者输入输出参数实现的。
举例:
1)Informix:
create procedure p1() returning integer;
return 0;
end procedure;
2)oracle:
create or replace procedure p1(x out number)
as
begin
x := 0;
end p1;
6、赋值
1)informix
let v_1 = 100;
2)oracle
v_1 := 100;
7、if语句
1)informix
if (v_1 =100) then
elif (v_1=200) then
Else
end if;
2)oracle
if (v_1 =100) then
elsif (v_1=200) then
Else
end if;

mysql'sblobissuitable forstoringbinarydatawithinarationaldatabase、whileenosqloptionslikemongodb、redis、andcassandraofferferulesions forunstructureddata.blobissimplerbutcanslowdowdowd withwithdata

toaddauserinmysql、使用:createuser'username '@' host'identifidedby'password '; here'showtodoitsely:1)chosehostcarefilytoconを選択しますTrolaccess.2)setResourcelimitslikemax_queries_per_hour.3)usestrong、uniquasswords.4)endforcessl/tlsconnectionswith

toavoidcommonMonmistakeswithStringDatatypesinmysql、undultingStringTypenuste、choosetherightType、andManageEncodingandCollationsEttingtingive.1)Usecharforfixed-LengthStrings、Varcharforaible Length、AndText/Blobforlardata.2)setCurrectCherts

mysqloffersechar、varchar、Text、anddenumforstringdata.usecharforfixed-lengthstrings、varcharerforvariable-length、text forlarger text、andenumforenforcingdataantegritywithaetofvalues。

MySQLBlob要求の最適化は、次の戦略を通じて実行できます。1。ブロブクエリの頻度を減らす、独立した要求の使用、または読み込みの遅延。 2。適切なブロブタイプ(TinyBlobなど)を選択します。 3。ブロブデータを別々のテーブルに分離します。 4.アプリケーションレイヤーでBLOBデータを圧縮します。 5.ブロブメタデータをインデックスします。これらの方法は、実際のアプリケーションでの監視、キャッシュ、データシェルディングを組み合わせることにより、パフォーマンスを効果的に改善できます。

MySQLユーザーを追加する方法を習得することは、データベース管理者と開発者にとって重要です。これは、データベースのセキュリティとアクセス制御を保証するためです。 1)CreateUserコマンドを使用して新しいユーザーを作成し、2)付与コマンドを介してアクセス許可を割り当て、3)FlushPrivilegesを使用してアクセス許可を有効にすることを確認します。

choosecharforfixed-lengthdata、varcharforvariable-lengthdata、andtextforlargetextfields.1)chariseffienceforconsistent-lengthdatalikecodes.2)varcharsuitsvariaible-lengthdatalikenames、balancingflexibilityandperformance.3)Textisidealforforforforforforforforforforforidex

MySQLの文字列データ型とインデックスを処理するためのベストプラクティスには、次のものが含まれます。1)固定長のchar、可変長さのvarchar、大規模なテキストのテキストなどの適切な文字列タイプを選択します。 2)インデックス作成に慎重になり、インデックスを避け、一般的なクエリのインデックスを作成します。 3)プレフィックスインデックスとフルテキストインデックスを使用して、長い文字列検索を最適化します。 4)インデックスを定期的に監視および最適化して、インデックスを小さく効率的に保つ。これらの方法により、読み取りと書き込みのパフォーマンスをバランスさせ、データベースの効率を改善できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター
