create or replace procedure CHECK_ORDER_TIME_FLAG () AS last_date varchar2(8); begin
select to_char(add_months(to_date(ls_date,'YYYYMMDD'),i_add_months),'YYYYMMDD') into last_date from dual; select * into order_time from t_busi_order_dtl where process_flag='0' and process_deadline<>'' and process_deadline<last_date; end CHECK_ORDER_TIME_FLAG;研究半天还是写不来
select * into order_time from t_busi_order_dtl 看你的where条件!这张表存在多个列,要用游标。 另外就是查询结果如果是多于一行数据,select into会出错的。建议你用游标了。
i_add_months 应该是你的输入参数吧?create语句里面没看到
begin sys.dbms_job.submit(job => :job, what => 'addtoWEB_PAYREF_POLICY;', next_date => to_date('13-11-2009', 'dd-mm-yyyy'), interval => 'trunc(sysdate)+1'); commit; end;这个将会在每天的什么时候执行呢?是不是都是在每天的同一时间点执行呢? 另外这样改 begin sys.dbms_job.submit(job => :job, what => 'CHECK_ORDER_TIME_FLAG;', next_date => to_date('15-11-2009 00:00:30', 'dd-mm-yyyy hh24:mi:ss'), interval => 'sysdate+1/86400'); commit; end;是不是就每天0点30秒执行,都是固定这个点么?执行完一次,还能保持下一天也是这个时间点执行么?
begin sys.dbms_job.submit(job => :job, what => 'CHECK_ORDER_TIME_FLAG;', next_date => to_date('15-11-2009', 'dd-mm-yyyy'), interval => 'trunc(sysdate)+1'); commit; end;ORA-01008: 并非所有变量都已绑定 还要定义变量??
variable job number; begin sys.dbms_job.submit(job => :job, what => 'CHECK_ORDER_TIME_FLAG;', next_date => to_date('15-11-2009', 'dd-mm-yyyy'), interval => 'trunc(sysdate)+1'); commit; end;
sys.dbms_job.submit(job => :job,
what => 'addtoWEB_PAYREF_POLICY;',
next_date => to_date('13-11-2009', 'dd-mm-yyyy'),
interval => 'trunc(sysdate)+1');
commit;
end;
上面例子中的addtoWEB_PAYREF_POLICY就是要执行的过程名
在过程中可以调用函数,怎么调用..你把函数当个值来处理就行了
{
//运行存储过程
//procedure_name = p_test2 (param1,param2)
Connection conn = null;
if (ds != null)
{
is_use_ds = true;
conn = ds.getConnection();
}
else
{
is_use_ds = false;
if (conn_vec.size() > ds_vec_index)
conn = (Connection)conn_vec.get(ds_vec_index);
}
if (conn == null)
{
if (is_use_ds == true)
{
System.out.println(GlobalFun.getConvStr_SystemOut("无法通过JNDI和数据建立连接。"));
throw new SQLException("无法通过JNDI和数据建立连接。");
}
else
{
System.out.println(GlobalFun.getConvStr_SystemOut("无法通过JDBC和数据建立连接。"));
throw new SQLException("无法通过JDBC和数据建立连接。");
}
}
String procedure = "{call " + procedure_name + " }";
try
{
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.executeUpdate();
cstmt.close();
}catch (SQLException ex) { return false;}
return true;
}这个方法能调用oracle函数么?
要怎么写调用呢?
几个参数几个问号('?')。
CallableStatement cstmt = conn.prepareCall(procedure); 之后设置参数
cstmt.setString(1,param1); 注意序号从1开始!
cstmt.setInt(2,param2);
cstmt.executeUpdate();
cstmt.close();函数:String proc = "{ ? = call proc_name(?,?) }";
几个参数几个问号('?')。
CallableStatement cstmt = conn.prepareCall(procedure); 之后设置参数
cstmt.registerOutParameter(1,OracleTypes.INTEGER); 注意序号从1开始!
cstmt.setString(2,param1);
cstmt.setInt(3,param2);
cstmt.executeUpdate();
retVal = cstmt.getInt(1); //这里是获取返回值。
cstmt.close();就像楼上几位说的。你这个需求,用job再好不过了,根本不用写代码,全部丢给数据库去做。
()
AS
last_date varchar2(8);
begin
select to_char(add_months(to_date(ls_date,'YYYYMMDD'),i_add_months),'YYYYMMDD')
into last_date from dual;
select * into order_time from t_busi_order_dtl
where process_flag='0' and process_deadline<>'' and process_deadline<last_date;
end CHECK_ORDER_TIME_FLAG;研究半天还是写不来
看你的where条件!这张表存在多个列,要用游标。
另外就是查询结果如果是多于一行数据,select into会出错的。建议你用游标了。
sys.dbms_job.submit(job => :job,
what => 'addtoWEB_PAYREF_POLICY;',
next_date => to_date('13-11-2009', 'dd-mm-yyyy'),
interval => 'trunc(sysdate)+1');
commit;
end;这个将会在每天的什么时候执行呢?是不是都是在每天的同一时间点执行呢?
另外这样改
begin
sys.dbms_job.submit(job => :job,
what => 'CHECK_ORDER_TIME_FLAG;',
next_date => to_date('15-11-2009 00:00:30', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+1/86400');
commit;
end;是不是就每天0点30秒执行,都是固定这个点么?执行完一次,还能保持下一天也是这个时间点执行么?
sys.dbms_job.submit(job => :job,
what => 'CHECK_ORDER_TIME_FLAG;',
next_date => to_date('15-11-2009', 'dd-mm-yyyy'),
interval => 'trunc(sysdate)+1');
commit;
end;ORA-01008: 并非所有变量都已绑定
还要定义变量??
variable job number;
begin
sys.dbms_job.submit(job => :job,
what => 'CHECK_ORDER_TIME_FLAG;',
next_date => to_date('15-11-2009', 'dd-mm-yyyy'),
interval => 'trunc(sysdate)+1');
commit;
end;
那13楼的问题有人回答下么??
interval => ''TRUNC(SYSDATE + 1)+30/60/60/24'');
interval => 'TRUNC(SYSDATE + 1)+30/60/60/24');
似乎没见过这种用法~~~~
第二个'sysdate+1/86400'相当于每隔一秒执行一次。