博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PLSQL 常用编程
阅读量:7096 次
发布时间:2019-06-28

本文共 2118 字,大约阅读时间需要 7 分钟。

一、SQL 语句的高级用法

1.SQL语句字符串处理以及时间处理

1)TO_CHAR(TIMECOLUMN,'YYYYMMDDHH24MISS')

   TO_DATE('20090812162512','YYYYMMDDHH24MISS')

   非常的方便

    select lineid,vehicleid,TO_CHAR(GETONSTATIONTIME,'yyyymmdd'),count(*) from icdata group by lineid,vehicleid,TO_CHAR(getonstationtime,'yyyymmdd');

2)sql 语句中的字符串连接

   UPDATE GPSDATA SET VEHICLEID='000'||VEHICLEID WHERE SUBSTR(VEHICLEID,1,2)='X3';

3)数据查询中不重复数据的查询

   SELECT DISTINCT A1 FROM TABLE1;

2.分组查询与Having子句

WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。

GROUP BY 子句用来分组 WHERE 子句的输出。

HAVING 子句用来从分组的结果中筛选行。

如:SELECT ID, V_ID,COUNT(*),TO_CHAR(RECORDTIME,'YYYYMMDD') FROM TABLE GROUP BY V_ID ,ID ,TO_CHAR(RECORDTIME,'YYYYMMDD');

注意 ID,V_ID 必须出现在GROUP BY 后边

3.子查询的重要应用,最接近值查询,即查找线路中最接近某一特定值的记录

SELECT STATIONID FROM STATIONGPSDATA WHERE ABS(LONGTITUDE-PLONGTITUDE)+ABS(LATITUDE-PLATITUDE)=(SELECT MIN(AB(LONGTITUDE-PLONGTITUDE)+ABS(LATITUDE-PLATITUDE))FROM STATIONGPSDATA);

其中PLONGTITUDE、PLATITUDE 是给定的经度和纬度。选出与此经度和纬度最接近的值的站点的编号

首先最里面的SELECT是选出所有记录中与给定经纬度分别的绝对值的差的最小值,然后选出最小值其对应的ID。直接选择ID 是不允许的。

 

PL/SQL 编程基础

DECLARE                   -- 变量部分

CURSOR mycur IS           -- 游标相当于数组
SELECT * FROM GPSDATA WHERE LINEID='00417' AND VEHICLEID='73620' FOR UPDATE; 

-- FOR UPDATE 是锁定其不能被别的用户查询

MyRec GPSDATA%ROWTYPE;    -- 声明记录集,记录集相当于结构体
x number;                 -- 声明变量
id number;               
BEGIN                     -- 执行部分
OPEN mycur;               -- 打开游标
FETCH mycur INTO MyRec;   -- 将游标的值付给记录集
x:=0;                     -- 将x 赋值 千万不要忘了:
WHILE mycur%FOUND LOOP    -- 循环
x:=x+1;
FINDID(MyRec.LONGTITUDE,MyRec.LAITUDE,ID);  -- 存储过程 见下面的说明
UPDATE GPSDATA SET NEARBYSTATIONID = ID WHERE CURRENT OF mycur;

-- 更新数据,注意CURRENT OF mycur 的用法 非常的方便

FETCH mycur INTO MyRec;

END LOOP;
CLOSE mycur;
DBMS_OUTPUT.PUT_LINE('共计更改了'||x||'条数据');
END;
/

以上是匿名块,缺点是不能够存储在数据库中,而且每次运行都需要编译效率非常的低,

下面介绍的是存储过程,可以存储在数据库中,编译好了直接调用效率高。存储过程相当于函数

CREATE OR REPLACE PROCEDURE FINDID(PLONGTITUDE NUMBER,PLATITUDE NUMBER,PSTATIONID OUT NUMBER)

-- 创建过程 名称 参数(包括输入参数,输出参数)

IS
BEGIN
SELECT STATIONID FROM STATIONGPSDATA WHERE ABS(LONGTITUDE-PLONGTITUDE)+ABS(LATITUDE-PLATITUDE)=(SELECT MIN(ABS(LONGTITUDE-PLONGTITUDE)+ABS(LATITUDE-PLATITUDE)) FROM STATIONGPSDATA) AND ROWNUM<2;
END;
/

--  注意SQL语句中的INTO用法 INTO PSTATIONID

删除归档日志文件

DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';

转载地址:http://cbxql.baihongyu.com/

你可能感兴趣的文章
WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
查看>>
xinetd
查看>>
OTN&互换amp; P-OTN有效降低100G 网络成本 (两)
查看>>
Android硬件加速
查看>>
C语言字符串操作常用库函数
查看>>
div中央
查看>>
W5500 keep-alive的用途及使用
查看>>
解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
查看>>
str.format格式化用法(通过{}来替代%)
查看>>
[redis] session 保存到 redis 简单实现
查看>>
C++ 学习小程序之 map 的用法
查看>>
python之模块chunk,了解即可
查看>>
MulticastSocket绑定端口的问题
查看>>
Codeforces Beta Round #51 B. Smallest number dfs
查看>>
C# Remoting 简单实现
查看>>
视错觉:从一个看似简单的自定义控件说起
查看>>
半年的房子装修
查看>>
关于开发中 hosts 文件的修改
查看>>
WebView使用配置文件
查看>>
深入浅出的javascript的正则表达式学习教程
查看>>