oracle存储函数

oracle存储函数

SET SERVEROUTPUT ON;
--//可以没有参数 , 必须有return
--//参数和返回类型不用指明精度
CREATE OR REPLACE FUNCTION hello
(p_name VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
 RETURN p_name || '你好!';
END;
--//作为表达式调用
SELECT hello('ACCP') FROM dual;
--//作为表达式调用
SET SERVEROUTPUT ON;

DECLARE
  l_Str VARCHAR2(100);
BEGIN
 l_Str := hello('ACCP');
 DBMS_OUTPUT.PUT_LINE(l_Str);
END;


--//运输单据确认。只有已经有名细信息,和非航空主单费用信息的单据才可以确认
CREATE OR REPLACE  FUNCTION OT_LB_CONFIRM
  (PV_LBNO OT_LBHEAD.V_LBNO%TYPE,
  PV_LOGINNAME OT_LBHEAD.V_LBNO%TYPE
  )
RETURN INTEGER AS

ln_count integer;

BEGIN
   select count(*) into ln_count from ot_lbdetail where v_lbno=pv_lbno;      --no detail
   if ln_count=0 THEN
   RETURN 0;
   END IF;
   select count(*) into ln_count from ot_lbcost where v_lbno=pv_lbno;        --no cost
   if ln_count=0 and substr(PV_LBNO,0,2)<>'MA' THEN
   RETURN 0;
   END IF;

   UPDATE OT_LBHEAD
      SET V_DESIGNATION=PV_LOGINNAME,
         D_DESIGNATIONDATE=SYSDATE,
        V_STEP=4
  WHERE v_lbno=PV_LBNO;
   COMMIT;
   RETURN 1;
EXCEPTION
 WHEN others THEN
   ROLLBACK;
      sp_ExceptionLog('OT_LB_CONFIRM');
   RETURN -1;
END;
--//==========返回游标的函数
Create or REPLACE FUNCTION getAge (
    stu_Age IN  VARCHAR2             --接收输入参数
 )
RETURN   SYS_REFCURSOR
AS
    P_RESULT_SET_O         SYS_REFCURSOR; --返回游标
    X_SQL VARCHAR2(200);
BEGIN
     X_SQL :='select * FROM stuInfo WHERE stuAge = '''||stu_Age||'''';
     OPEN P_RESULT_SET_O FOR X_SQL;
     RETURN P_RESULT_SET_O;   --返回游标
END getAge;

--//JDBC调用
CallableStatement cstmt = null;
ResultSet rs = null;
try {
String callSql = "{? = call getAge(?)}";
cstmt = conn.prepareCall(callSql);
   
cstmt.setString(2, "userName");

cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs = (ResultSet) cstmt.getObject(1);
if (rs != null) {
       System.out.print("usercd");
       System.out.print("userName");               
       System.out.println("EMAIL");
       while (rs.next()) {       
    System.out.print(rs.getString(1)+"   ");
    System.out.print(rs.getString(2)+"   ");               
    System.out.println(rs.getString(3));
       }   
}

http://shuanhe1999.blog.163.com/blog/#m=0&t=1&c=fks_095068080084088067080084074071084085087066093081094

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值