大佬教程收集整理的这篇文章主要介绍了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@R_772_9579@ctCountStr||' '||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,..]
说明:
1. v_sql为varchar2类型或clob(11g才支持),可以为DDL、DML等动态拼接的sql字符串。用在pl/sql代码中时,如果是varchar2类型,则长度不能大于32767(32K)。
v_sql为DML动态语句时,执行后不会提交,需要使用COR_578_11845@mit显式提交。如果为DDL命令,执行后则会提交所有之前改变的。
如果需要从动态sql返回值,则可以定义返回值变量,BulK ColLECT INTO返回多行值,此时定义的变量需是组变量的列数表或记录表类型;INTO返回单行,此时定义的变量可以使多个pl/sql变量的列表或记录类型。
如果动态sql中需要绑定变量,则使用USING,通常绑定的变量为输入入参,此时变量的in可以省略;如果需要绑定输出变量(如调用过程时可能需要输出),则在变量前用out显示指明。
参考博客,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;
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;
}
以上是大佬教程为你收集整理的Oracle存储过程表名称列名称做参数,动态SQL全部内容,希望文章能够帮你解决Oracle存储过程表名称列名称做参数,动态SQL所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。