zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    初识Python
    MySql的前戏
    abstract class 和 interface 有什么区别?(抽象类和接口的区别)
    java方法签名
    final
    OverLoad 和 Override 的区别
    WebService (什么是WebService ,有哪些优点? WebService由什么组成?分别对应的含义?)
    人民币
    快速排序
    动态反射
  • 原文地址:https://www.cnblogs.com/wylaok/p/2699834.html
Copyright © 2011-2022 走看看