oracle 带有变量的语句_Oracle 动态SQL语句(2)之含变量的WHERE语句与日期变量
在 Oracle 動(dòng)態(tài)SQL語(yǔ)句(1)中提到基本動(dòng)態(tài)SQL語(yǔ)句書寫,但在寫動(dòng)態(tài)SQL語(yǔ)句時(shí)特別要注意日期型變量和WHERE語(yǔ)句的編寫。
如下代碼:
1、注意在執(zhí)行動(dòng)態(tài)SQL語(yǔ)句時(shí),execute immediate ***關(guān)鍵語(yǔ)句,在調(diào)試過(guò)程中,最好把動(dòng)態(tài)SQL語(yǔ)句即一個(gè)字符串賦值給一個(gè)字符變量,
并用Dbms_output.put_line(SQL語(yǔ)句字符串)把SQL語(yǔ)句輸出,方便查看SQL語(yǔ)句是否有誤;
2、因動(dòng)態(tài)SQL語(yǔ)句相對(duì)靜態(tài)SQL語(yǔ)句的執(zhí)行效率低,建議用靜態(tài)SQL語(yǔ)句。如果一定要用,一定要注意變量的使用!!!
create or replace procedure sp_update_mnl00(i_id varchar,i_realtime DATE,i_min00 float, i_agv00 float,i_max00 float )
authid current_user as
/***********************
名稱:sp_update_mnl00
功能描述:更新模擬量歷史數(shù)據(jù)表中含00的列表項(xiàng)
修訂記錄:
版本號(hào) 編輯時(shí)間 編輯人 修改描述
1.0.0 2012-9-22 wy_laok 1.創(chuàng)建此存儲(chǔ)過(guò)程
1.0.1 2012-9-21 wy_laok 2.修改表名稱及變量名稱,增加必要注釋
入?yún)⒊鰠⒚枋?#xff1a;
i_id 測(cè)點(diǎn)編號(hào)
i_realtime 更新時(shí)間
i_min00 最小值
i_agv00 平均值
i_max00 最大值
************************/
v_recordnum NUMBER:=0;--標(biāo)識(shí)是否存在記錄
v_tablename varchar2(30);--表名
v_sql_statement varchar2(200);--執(zhí)行的SQL語(yǔ)句
v_time varchar2(30);--時(shí)間
--v_datetime date;
begin
insert into mnl(datetime) values (i_realtime) ;
v_tablename:= fun_create_mnl(i_id);--獲取表名,如果有直接獲取,沒(méi)有則創(chuàng)建表
v_time:=to_char(i_realtime,'yyyy-mm-dd hh24:mi:ss');
-- v_datetime:=to_date(v_time,'yyyy-mm-dd hh24-mi-ss');
--i_realtime:=to_date(to_char(i_realtime,'yyyy-mm-dd hh24-mi-ss'),'yyyy-mm-dd hh24-mi-ss');
--判斷是否含有此時(shí)間下的列
v_sql_statement:='select count(DATETIME) from '||v_tablename||
' Where DATETIME=to_date('''||v_time||''',''yyyy-mm-dd hh24-mi-ss'')';--WHERE語(yǔ)句三個(gè)引號(hào)***
Dbms_output.put_line(v_sql_statement);
execute immediate v_sql_statement into v_recordnum ;
--Dbms_output.put_line(v_sql_statement);
IF v_recordnum=0 THEN
--沒(méi)有則插入
--execute immediate
v_sql_statement:= 'INSERT INTO '||v_tablename||'(DATETIME,MIN00,AGV00,MAX00)
VALUES (to_date('''||v_time||''',''yyyy-mm-dd hh24-mi-ss''),'||i_min00||','||i_agv00||','||i_max00||')';
execute immediate v_sql_statement;
Dbms_output.put_line(v_sql_statement);
ElSE
--有則更新
--execute immediate
v_sql_statement:= 'UPDATE '||v_tablename||'
SET MIN00='||i_min00||',AGV00='||i_agv00||',MAX00='||i_max00||'
WHERE DATETIME=to_date('''||v_time||''',''yyyy-mm-dd hh24-mi-ss'')';
execute immediate v_sql_statement;--執(zhí)行SQL語(yǔ)句
Dbms_output.put_line(v_sql_statement);--輸出SQL語(yǔ)句
end if;
commit;--數(shù)據(jù)更新
end ;
總結(jié)
以上是生活随笔為你收集整理的oracle 带有变量的语句_Oracle 动态SQL语句(2)之含变量的WHERE语句与日期变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: endnote中科大版区别_研究生科研入
- 下一篇: android 每隔2秒执行_Andro