oracle 带有变量的语句_Oracle 动态SQL语句(2)之含变量的WHERE语句与日期变量
在 Oracle 動態SQL語句(1)中提到基本動態SQL語句書寫,但在寫動態SQL語句時特別要注意日期型變量和WHERE語句的編寫。
如下代碼:
1、注意在執行動態SQL語句時,execute immediate ***關鍵語句,在調試過程中,最好把動態SQL語句即一個字符串賦值給一個字符變量,
并用Dbms_output.put_line(SQL語句字符串)把SQL語句輸出,方便查看SQL語句是否有誤;
2、因動態SQL語句相對靜態SQL語句的執行效率低,建議用靜態SQL語句。如果一定要用,一定要注意變量的使用!!!
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
功能描述:更新模擬量歷史數據表中含00的列表項
修訂記錄:
版本號 編輯時間 編輯人 修改描述
1.0.0 2012-9-22 wy_laok 1.創建此存儲過程
1.0.1 2012-9-21 wy_laok 2.修改表名稱及變量名稱,增加必要注釋
入參出參描述:
i_id 測點編號
i_realtime 更新時間
i_min00 最小值
i_agv00 平均值
i_max00 最大值
************************/
v_recordnum NUMBER:=0;--標識是否存在記錄
v_tablename varchar2(30);--表名
v_sql_statement varchar2(200);--執行的SQL語句
v_time varchar2(30);--時間
--v_datetime date;
begin
insert into mnl(datetime) values (i_realtime) ;
v_tablename:= fun_create_mnl(i_id);--獲取表名,如果有直接獲取,沒有則創建表
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');
--判斷是否含有此時間下的列
v_sql_statement:='select count(DATETIME) from '||v_tablename||
' Where DATETIME=to_date('''||v_time||''',''yyyy-mm-dd hh24-mi-ss'')';--WHERE語句三個引號***
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
--沒有則插入
--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;--執行SQL語句
Dbms_output.put_line(v_sql_statement);--輸出SQL語句
end if;
commit;--數據更新
end ;
總結
以上是生活随笔為你收集整理的oracle 带有变量的语句_Oracle 动态SQL语句(2)之含变量的WHERE语句与日期变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: endnote中科大版区别_研究生科研入
- 下一篇: mysql插10万条数据_MySQL数据