Oracle存储过程表名称列名称做参数,动态SQL
发布时间:2020-12-12 15:06:12 所属栏目:百科 来源:网络整理
导读:Oracle存储过程表名称列名称做参数,动态SQL 背景 当前的系统中有几种日志信息做了分表处理,每个月插入到一个表中,一个表的分表有12个。这样的这种表有四个左右。 有个定时器,每天晚上的时候去执行满足条件的表去删除日志的信息,可以配置保存日志的时间
Oracle存储过程表名称列名称做参数,动态SQL背景
实践
代码CREATE OR REPLACE PROCEDURE ALARM_LOG_CLEAR( table_name IN VARCHAR,//表名称 rowname IN VARCHAR,//列名称 actiontime IN VARCHAR//产生时间 ) AS MAX_ROWS NUMBER (10) ;
DELETE_COUNT NUMBER ;
selectCountStr VARCHAR2 (500) := '' ;//作为动态SQL的选择数量
deleteStr VARCHAR2(500):='';
startTime DATE;
BEGIN MAX_ROWS := 1000 ;
DELETE_COUNT := 0 ;
startTime :=TO_DATE(actiontime,'yyyy-mm-dd');
selectCountStr := 'select count(*) from ' ||table_name || ' where '|| rowname ||' <=:1 '; //使用动态SQL语法将count的值放置到DELETE_COUNT中去 //必须using startTime,直接拼接会错误的 ||这种错误的! EXECUTE IMMEDIATE selectCountStr into DELETE_COUNT using startTime; COMMIT; --DBMS_OUTPUT.PUT_LINE(selectCountStr||' '||DELETE_COUNT); deleteStr :='delete from ' || table_name || ' WHERE ' || rowname || ' <=:1 AND ROWNUM <=:2 '; if DELETE_COUNT = 0 THEN return; end if; //这里就是一个for巡回的删除信息,动态SQL和这个一样的 FOR i IN 1..TRUNC (DELETE_COUNT / MAX_ROWS) + 1 LOOP EXECUTE IMMEDIATE deleteStr using startTime,MAX_ROWS; COMMIT; END LOOP ; END;
语法EXECUTE IMMEDIATE v_sql [BULK COLLECT INTO 或INTO 返回值变量 ][INTO 入参 1,..,out 出参1,..]
说明:
oracle 存储过程的基本语法参考博客,orcle基本的语法 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER,参数2 IN NUMBER ) IS/AS 变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
IF V_TEST=1 THEN
BEGIN do something END;
END IF;
V_TEST := 123;
Java调用储存过程public int executeUpdate(Connection conn,String tableName,String columeName,String actionTime){
CallableStatement cs = null;
try {
cs = conn.prepareCall("{call ALARM_LOG_CLEAR(?,?,?)}");
cs.setString(1,tableName);
cs.setString(2,columeName);
cs.setString(3,actionTime);
cs.execute();
return 1;
} catch (SQLException e) {
return 0;
} finally {
//关闭资源
}
return 0;
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |