【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
v_sql:= 'update realtime_imeilogin set ' || v_column ||'='||v_column||'+1 where daytime='''||v_date||''' AND gameid='||in_gameid||' AND channelid='||in_channelid; execute immediate v_sql;
现在,在我的OLTP系统中,这个语句是经常调用到的,但是效率有点低,由于这语句的列名需要根据时间来进行动态变化,所以这样的语句没有使用绑定变量。
现在我想请问下,怎么修改这个语句,或者用什么语句来改进这个,能让这个应用绑定变量
DBMS_SQL可以么
v_sql:='update realtime_imeilogin set ' || v_column ||'=:v_column+1 where daytime=:v_date AND gameid=:in_gameid AND channelid=:in_channelid'; cursor1 := dbms_sql.open_cursor; --创建游标 dbms_sql.parse(cursor1, v_sql, dbms_sql.native); --解析动态sql语句,取两个字段,时间及价格,其中时间以14位的varchar2表示 dbms_sql.bind_variable(cursor1, ':v_column', v_column); dbms_sql.bind_variable(cursor1, ':v_date', v_date); dbms_sql.bind_variable(cursor1, ':in_gameid', in_gameid); dbms_sql.bind_variable(cursor1, ':in_channelid', in_channelid); dbms_sql.close_cursor(cursor1); commit;
用那么麻烦么?
execute immediate 'update xxx ...' using v_column,...;
在有 检查Oracle 参数配置
show parameter cursor_sharing改成force