oracle存储过程语法
1.根本结构
createORREPLACEPROCEDURE存储进程[文]名字
(
参数1INNUMBER,[章]
参数2INNUMBER
)IS
变量1INTEGER:=0;
变量2DATE;
BEGIN
END存储进程名字
2.selectINTOSTATEMENT&nbs[来]p;
将select查询的结果存[自]入到变量中,能够一起将多个[红]列存储多个变量中,必须有一[色]条记载,不然抛出反常(如果[火]没有记载抛出NO_DATA[线]_FOUND)[自]
比如:
BEGIN
selectcol1,col2into变量1,变量2FROMtypestructwherexxx;
EXCEPTION&nbs[媒]p;
WHENNO_DATA_FOUND[体]THEN
xxxx;
END;
…
3.IF判别
IFV_TEST=1THEN
BEGIN
dosomething&nbs[博]p;
END;
ENDIF;
4.while循环
WHILEV_TEST=1LOOP
BEGIN
XXXX
END;
ENDLOOP;
5.变量赋值
V_TEST:=123;
6.用forin运用cursor[客];
…
IS
CURSORcurISselect*FROMxxx;
BEGIN
FORcur_resultincurLOOP
BEGIN
V_SUM:=cur_result.[文]列名1+cur_resul[章]t.列名2
END;
ENDLOOP;
END;
7.带参数的cursor&[来]nbsp;
CURSORC_USER(C_IDNUMBER)ISselectNAMEFROMUSERwhereTYPEID=C_ID;&[自]nbsp;
OPENC_USER(变量值);&[红]nbsp;
LOOP
FETCHC_USERINTOV_NAME;[色]
EXITFETCHC_USER%NOTFOU[火]ND;
dosomething&nbs[线]p;
ENDLOOP;
CLOSEC_USER;[自]
8.用pl/sqldeveloperdebug
连接数据库后建立一个TestWINDOW
在窗口输入调用SP的代码,F9开端debug,CTRL+N单步调试
oracle存储过程实例详解
php访问oracle存储进程实例详解
比方我的本地Oracle数据库有一个package,里面有一个存储进程:
createorreplacepackagePKG_TRANS_RELis–Author:test–Created:–Purpose:test–PublictypedeclarationsPKG_NAMEvarchar2(20):=’PKG_TRANS_REL’;
–存储进程,测试用procedurepro_GC_withdraw(in_merch_noinvarchar2,
in_withdraw_amtinnumber,
out_resultoutnumber,
out_errmsgoutvarchar2);endPKG_TRANS_REL;
包名是PKG_TRANS_REL,存储进程是pro_GC_withdraw,这个存储进程有四个参数,两个入参,两个出参。
在PHP中经过pdo调用示例:
$this->_pdo=newPDO(PDO_DB_DNS,PDO_DB_USER,PDO_DB_PASSWORD);
$call=”CALLPKG_TRANS_REL.pro_GC_withdraw(?,?,?,?)”;
try{
$stmt=$this->_pdo->prepare($call);
$stmt->bindParam(1,$merch_no);
$stmt->bindParam(2,$amount,PDO::PARAM_INT);
$stmt->bindParam(3,$result,PDO::PARAM_INT,4);
$stmt->bindParam(4,$error_msg,PDO::PARAM_STR,64);
$stmt->execute();
}catch(PDOException$e)
{
$msg=’SQL:’.$e->getMessage();
$msg=iconv(‘GBK’,’UTF-8′,$msg);
user_dump(‘SQL:’.$msg);
returnfalse;
}
…
bindParam第三个参数默许是PDO::PARAM_STR,如果是其它类型就要指明
入参传值比较简单,出参略微杂乱些,要指明长度。
评论前必须登录!
注册