关于ORACLE 在动态语句中的绑定变量问题

秋到尽头 发布于 2013/10/28 10:18
阅读 586
收藏 0

【开源中国 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;

 

加载中
0
秋到尽头
秋到尽头
最下面那段代码在数据库中执行不报错,但是不会成功插入语句
0
跳蚤
跳蚤

用那么麻烦么?

execute immediate 'update xxx ...' using v_column,...;

0
跳蚤
跳蚤

在有 检查Oracle 参数配置

show parameter cursor_sharing

改成force

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部