Oracle 动态SQL语句(1)之简单书写
对不存在的表或视图进行操作时,如果是静态SQL语句就会提示错误,这时必须用到动态SQL语句,特别是传入的参数为表名和表字段的情况。
注意:1、在调用函数时,注意其声明语句的书写。2、在调用过程语句时,只允许有一套begin……end
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 wylaok 1.创建此存储过程
1.0.1 2012-9-21 wylaok 2.修改表名称及变量名称,增加必要
注释
入参出参描述:
i_id 测点编号
i_realtime 更新时间
i_min00 最小值
i_agv00 平均值
i_max00 最大值
************************/
v_recordnum NUMBER:=0;--标识是否存在记录
v_tablename varchar2(30);--表名
v_sql_statement varchar2(100);--执行的SQL语句
begin
--此处的创建表的函数主体代码和上一个随笔中写的过程类似,不同的是把表名返回。
v_tablename:= fun_create_mnl(i_id);--获取表名,如果有直接获取,没有则创建表
--判断是否含有此时间下的列
v_sql_statement:='select count(DATETIME) from '||v_tablename||
' Where DATETIME='''||i_realtime||'''';
execute immediate v_sql_statement into v_recordnum ;
IF(v_recordnum=0) THEN
--没有则插入
execute immediate 'INSERT INTO '||v_tablename||'(DATETIME,MIN00,AGV00,MAX00)
VALUES ('''||i_realtime||''','||i_min00||','||i_agv00||','||i_max00||')';
ElSE
--有则更新
execute immediate 'UPDATE '||v_tablename||'
SET MIN00='||i_min00||',AGV00='||i_agv00||',MAX00='||i_max00||'
WHERE DATETIME='''||i_realtime||'''';
end if;
end ;
执行:
begin
sp_update_mnl00('12',to_date('2012-9-5 15:00:01','yyyy-mm-dd hh24:mi:ss'),1,1,1);
end;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)