Fork me on GitHub
drqblog


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

  • 站点地图

  • 公益404

  • 有料

计算机网络(三)

发表于 2018-12-14 | 分类于 计算机网络
字数统计: 3.1k | 阅读时长 ≈ 10

1、物理层Physical Layer:

  • 物理层单位是比特,bit,任务是透明的传输比特流

  • 功能:物理媒体上为数据端设备透明的传输原始比特流

  • 物理层主要定义数据终端设备DTE,数据通信设备DCE,他们的逻辑连接方法。所有的物理层协议就走物理层接口标准

  • 物理层研究内容:规定接口的一些参数,机械的形状和尺寸,交换电路的数量和排列等。比如笔记本上的网线接口,就是物理层规定的内容。

  • 物理层还规定通信链路上的传输信号的意义和电气特征,比如物理层规定信号A代表数字0,那么当节点要传输数字0的时候就会发送信号A

  • 物理层的一些物理媒体:双绞线,光缆,无线通道。

2、数据链路层(Data Link Layer)

  • 数据链路层的传输单位是帧(Frame)

  • 任务就是:把网络层传下来的IP数据报,组装成帧

  • 数据链路层的功能:成帧,差错控制,流量控制,传输控制

  • 典型的数据链路层协议:SDLC,HDLC,PPP,STP,帧中继

3、网络层(Network Layer)

  • 网络层的传输单位:数据报(package)

  • 重点:通信子网的运行控制

  • 主要任务:把网络层的协议数据单元(分组)从源端传送到目的端。为分组交换网上的不同主机提供通信服务。

  • 关键问题:对分组进行路由选择,实现流量控制,拥塞控制,差错控制,网际互联,节点A到节点B传输一个分组,有很多条可以选择路由。而网络层的作用就是根据网络的情况,利用相应的路由算法计算出一条合适的路径,让这个分组顺利的到达。

  • 流量控制:和数据链路层的流浪控制一样,都是协调A的发送速度和B的接收速度

  • 差错控制:通信的两个节点之间约定特定的检错规则,比如奇偶校验码,接收方根据这个规则检查接受的分组是否出现了差错,如果出现了差错,可以纠错就纠错,不能则丢弃。确保向上层提交的数据是无误的。

  • 拥塞控制:所有节点都处于来不来及接受分组,而要丢弃大量分组的情况的话,网络就处于拥塞状态。

  • 拥塞状态使得网络中两个节点无法正常通信,玩过曾采用一定的措施,缓解这种拥塞,就是拥塞控制。

  • 因特网是一个很大的互联网,由大量的异构网络通过路由器相互连接起来。

  • 因特网主要的网络层协议是无连接的网络协议IP,和许多路由选择协议,因此网络层也叫网际层,或者叫IP层

  • 网络层协议:IP,IPX,ICMP,ARP,IGMP,RARP,OSPF

4、传输层(Transport Layer)

也叫运输层,传输单位是报文段(TCP),用户数据段(UDP)

  • 主要任务:负责主机中两个进程之间的通信

  • 功能:为端到端连接提供可靠地传输服务,为端到端提供流量的控制,差错控制,服务质量,数据传输管理等。

  • 数据链路层提供的是点对点PPP的通信,传输层提供的是端到端的通信。

  • 使用传输层的服务,高层用户可以直接进行端到端的数据传输,从而忽略通信子网的存在。

  • 通过传输层的屏蔽,高层用户看不到子网的交替变化,由于要给主机可以同时运行多个进程。因此传输层具有复用和分用功能。

  • 复用:就是多个应用层的进程可以同时使用下面传输层的服务,多路复用

  • 分用:就是传输层把收到的信息分别交付给上面应用层的相应进程。

  • 传输层的协议:TCP/UDP

5、会话层(Session Layer)

  • 会话层允许不同主机上各种进程之间的会话。会话层利用传输层提供的端对端的服务,向表示层提供他的增值服务。

  • 这种服务主要是向表示层实体或者用户进程提供建立并在连接上有序的传输数据,这就是会话。也叫建立同步(SYN)

  • 会话层负责管理主机间的会话进程:建立,管理,终止进程间的会话。

  • 会话层使用校验点可以让通信会话在通信失效的时候从校验点继续恢复通信,实现数据同步。

6、表示层(Presentation Layer)

  • 主要用于处理两个通信系统中交换信息的表达方式。不同机器采用的编码和表示方式不同,使用的数据结构也不同。

  • 为了让不同的表示方法的数据和信息之间能相互交换,表示层采用抽象的数据压缩,加密和解密,是表示层可以提供数据表示变换功能。

7、应用层(Application Layer)

  • 应用层是OSI参考模型的最高层,是用户和网络的界面。

  • 应用层为特定类型的网络应用提供访问OSI的环境手段。所以用户的实际应用多种多样,就要求应用不同的应用协议来解决不同类型的应用请求。所以应用层也是最复杂的一层,使用的协议也是最多的。

  • 典型的协议:FTP,SMTP(电子邮件协议),HTTP(万维网协议)

二、TCP/IP模型

  • 网络接口层:对应OSI参考模型中的物理层和数据链路层

  • 网际层

  • 传输层

  • 应用层:对应OSI参考模型中的会话层,表示层和应用层

1、网络接口层:功能类似OSI的物理层和数据链路层

  • 表示与物理网络的接口,主机必须使用某种协议与网络连接,以便于在上面传递IP分组。

  • 具体的物理网络可以是各种类型的局域网:以太网,令牌环网,令牌总线网等

  • 还可以是:电话网,SDH,X.25,帧中继,ATM等公共数据网络。

  • 网络接口层的责任是:从主机后者节点接收IP分组,把他们发送到指定的物理网络上。

2、网际层(主机-主机):是TCP/IP体系的关键

和OSI网络层的功能非常相似,网际层是将分组发往任何网络,并为它独立的选择合适的路由

但是它不能保证各个分组有序的到达,各个分组的有序交付是由高层负责。

  • 网际层定义的标准分组格式和协议,也就是IP协议

  • 当前采用的IP协议是IPv4,下一个版本是IPv6

3、传输层(应用-应用,进程-进程)

功能和OSI的传输层类似,是让发送端和目的端主机上的对等实体可以进行会话。

传输层的主要协议:

  • 传输控制协议(Transmission Control Protocol,TCP):面向连接的,数据传输的单位是报文段,能够提供可靠的交付。

  • 用户数据报协议(User Datagram Protocol,UDP):无连接的,数据传输单位是用户数据报,不能保证提供可靠的交付,只能尽最大努力交付。

4、应用层(用户-用户):包含所有的高层协议

虚拟终端协议(Telnet),文件传输协议(FTP),域名解析服务(DNS),电子邮件协议(SMTP),超文本传输协议(HTTP)

三、OSI参考模型和TCP/IP模型的比较

  • OSI 参考模型:精确定义3个概念:服务,协议,接口和面向对象的程序设计思想吻合,TCP/IP模型并没有加以区分

  • OSI参考模型产生在协议发明之前,没有偏向于任何特定的协议,通用性良好。但是设计者在协议方面没有太多经验,不知道把哪些功能放到哪一层更好TCP/IP模型正好相反,首先出现的是协议,模型实际上是对已有的协议的描述。因此不会出现协议不能匹配模型的情况,但是模型不适合于其他任何非TCP/IP协议栈

  • TCP/IP模型在设计的时候就考虑到多种异构网的互联问题将网际协议IP作为一个单独的重要层次。

  • OSI参考模型在网络层支持无连接和面向连接的通信,但是在传输层仅有面向连接的通信。TCP/IP模型任务可靠性是端到端的问题,因此在网际层仅有一种无连接的通信模式,IP,但是在传输层支持无连接和面向连接的两种模式,TCP,UDP

四、通信协议栈进行通信的节点数据传输过程

  • 每个协议栈的最顶端都是一个面向用于的接口,下面各层是为通信服务的协议。

  • 用户要传输一个数据报的时候,通常是给用户能够理解的自然语言,然后通过应用层,自然语言会转化为用于通信的通信数据,通信数据到达传输层,作为传输层的数据部分也就是传输层的SDU,在加上运输层的控制信息,也就是运输层的PCI,然后组成运输层的PDU,然后交到网络层。

  • 运输层的PDU下放到网络层后,就成为了网络层的SDU,然后加上网络层的PCI,又组成了网络层的PDU.

  • 下放到数据链路层,就这样层层下方,层层包裹,最后形成的数据报通过通信线路传输,到达接收方节点协议栈。

  • 接收方然后逆向的一层一层的把包裹拆开,然后把收到的数据提交给用户。

注:

  • 在OSI模型中,网络层支持,无连接和面向连接的通信。传输层只支持面向连接的通信。

    • TCP/IP模型:网络只有无连接的通信,也就是IP。传输层支持无连接和面向连接,TCP,UDP

    • 流量控制:限制发送方发出数据流量让它发送速率不能超过接收方速率的一种技术

    • 流量控制功能可以在数据链路层以及以上各层使用。

    • 目前提供的流量控制功能主要是:数据链路层,网络层,传输层

  • 集线器是一个多端口的中继器,工作在物理层。以太网交换机是一个多端口的网桥,工作在数据链路层

  • 协议是水平的,服务是垂直的,协议是控制两个对等实体的通信规则,服务是下层建立接口向上层提供服务。

计算机网络和分布式计算机系统的区别?
  • 分布式系统:整个系统中的各个计算机对用户都是透明的,用户铜鼓哦输入命令就可以运行程序。但是用户并不知道是哪一台在为他运行程序。

  • 计算机网络:用户必须在想要运行程序的计算机上进行登录,然后按照计算机的地址,将程序通过计算机网络传送给计算机上去运行。最后,根据用户的命令将结果传送到指定的计算机。

主要的区别还是软件不同。
  • Internet使用的IP协议是无连接的,也就是传输的时候是不可靠的

  • 端到端通信和点到点通信的区别

    • 本质上:物理层,数据链路层和网络层组成的通信子网为网络环境中的主机提供点到点服务

    • 传输层为网络层的主机提供端到端的通信

  • 端:用户程序的端口,端口号标识了应用层不同的进程

计算机网络(二)

发表于 2018-12-14 | 分类于 计算机网络
字数统计: 1.1k | 阅读时长 ≈ 3

通信子网:对于OSI参考模型的下三层,包括物理层,数据链路层,网络层。

  • 集线器(Hub):物理层

  • 交换机(Switch):数据链路层

  • 路由器(Route):网络层

  • 资源子网:对网络用户提供可共享资源的硬件,软件和信息资源。

  • 中继器和桥连接器(网桥):用在局域网的物理层和数据链路层的联网设备。

1、计算机网络的分层结构:

每一层都有自己传送的数据单位,名称,大小,含义不同。

计算机网络的各个层次中,每一个报文都是由两部分组成,一个是数据部分,也就是SDU,一个控制信息部分,PCI,他们共同组成PDU.

  • SDU:服务数据单元

  • PCI:协议控制信息

  • PDU:协议数据单元

2、协议:规则的集合

为了在网络中有条不紊的交换数据,必须遵循事先约定好的规则,Network protocol协议是控制两个或者多个对等的实体进行通信的规则集合。不对等的实体之间是没有协议的,比如TCP/IP协议栈

节点A的传输层和节点B的传输层之间存在协议。但是节点A的传输层和节点B的网络层不存在协议。

  • 协议:语法+语义+同步

  • 语法规定传输数据格式,语义规定要完成的功能,同步规定执行各种操作的条件和时序。

  • 完整的协议:具有线路管理(建立连接,释放连接),差错控制,数据转换,功能。

3、接口

  • 同一节点内相邻两层间交换信息的连接点。每一层只能为紧邻的层次之间定义接口,不能跨层定义接口

  • 同一节点相邻两层的实体通过服务访问点(Service Access Point,SAP)进行交换。而局域网接入到广域网是通过路由器的互连设备实现。

4、服务

也就是下层为紧相邻的上层提供的功能调用。

上层使用下层所提供的的服务,必须通过与下层交换一些命令。

这些命令在OSI中成为服务原语。

  • 请求Request:由服务用户发往服务提供者,请求完成某个工作

  • 指示Indication:由服务提供者发往服务使用者,指示用户做某个工作

  • 响应Response:由服务用户发送服务提供者,作为对指示的响应

  • 正式Conformation:由服务提供者发往服务用户,作为对请求的证实

5、计算机网络提供的服务分类

面向连接服务和无连接服务

  • 面向连接服务:通信前双方必须建立连接,分配相应的资源(缓冲区),为了保证通信能正常运行。

传输结束后释放连接和所占用的资源。

面向连接服务的过程:建立连接,数据传输,释放连接,三个阶段,TCP就是面向连接服务的协议。

  • 无连接服务:通信前双方不需要先建立,需要发送数据的时候就直接发送,把每个带有目的地址的包传送到

线路上,由系统选定线路进行传输,一种不可靠的服务。IP,UDP一种无连接的服务协议。

6、可靠服务和不可靠服务

  • 可靠服务:网络具有纠错,检错,应答机制,能够保证数据的正确,可靠地传送目的地

  • 不可靠服务:网络只是尽量正确,可靠地传送,但是不能保证数据正确,可靠地到达目的地。

7、有应答服务和无应答服务

  • 有应答服务:接收方在收到数据后向发送方给出相应的应答,这个应答是传输系统内部自动实现。并不是用户实现。例如文件传输服务FTP,是一种有应答服务。

  • 无应答服务:接收方收到数据后不自动的给出应答,如果要应答,则由高层实现。比如WWW服务,客户端收到服务器发送的页面文件后不给出应答。

计算机网络(一)

发表于 2018-12-14 | 分类于 计算机网络
字数统计: 2.1k | 阅读时长 ≈ 7

1、计算机网络

一些互连得,自治的计算机系统的集合。也就是说能够以相互共享资源的方式来互联起来的自治的计算机系统的集合。

  • 计算机网络的目的:资源共享

  • 组成部分:分布在不同地理位置的多台独立的自治计算机

  • 遵循的规则:网络协议

2、计算机网络的组成

  • 组成部分:硬件,软件,协议

  • 硬件:主机(端系统),通信链路(双绞线,光纤),交换设备(交换机,路由器),通信处理机(网卡)

  • 软件:各种实现资源共享的软件,比如网络操作系统,邮件收发程序,FTP,聊天程序等。软件多属于应用层

  • 协议:计算机网络的核心,如同交通规则一样。协议规定了网络传输数据的规范。

3、计算机网络的功能

  • 数据通信:比如,文件传输,电子邮件等,离开了网络无法实现

  • 资源共享:软件共享,数据共享,硬件共享等。计算机网络中的资源互通是否分工协作,大大的提高资源利用率

  • 分布式处理:计算机网络中的某个计算机系统负荷过重,可以将它处理的某个复杂任务分配给网络中的其他计算机系统,也就是利用了空闲计算机资源来提高整个系统的资源利用率

  • 提高可靠性:计算机网络中的各台计算机可以通过网络互为替代机

  • 负载均衡:将工作任何均衡的分配给计算机网络中的各台计算机

4、计算机网络的分类

4.1、按照分布范围:

  • 广域网WAN:提供长距离通信,运送主机发送的数据,覆盖范围常是几十到几千公里的区域。

广域网是Internet的核心部分。连接广域网的各个节点交换机的链路一般都是高速链路,而且还有较大的通信容量。

  • 城域网MAN:城域网覆盖范围是几个街区或者整个城市。城域网大多采用以太网技术

  • 局域网LAN:局域网一般用于微机或者工作站,通过高速线路相连,覆盖范围小。一般是几十米到几千米的区域。

  • 局域网在计算机配置的数量上没有太多的限制,少的可以两台,多的可以达到几百台。传统上,局域网使用广播技术,广域网则采用交换技术

  • 个人区域网PAN:个人区域网也及时在个人工作的地方,就是WLAN,WIFI吧。

4.2、按照传播技术:

  • 广播式网络:所有联网计算机都共享一个公共通信信道

  • 点对点网络PPP:每条物理线路连接一对计算机。如果同性能的两台主机之间没有直接连接的线路,那么

他们之间的分组传输就要通过中间节点的接收,存储和转发,直到目的节点,基本广域网都是采用点对点网络

4.3、按照拓扑结构:

  • 网络拓扑结构:通过网络中节点与通信线路之间的几何关系,表示的网络结构。通常是通信子网的拓扑结构

  • 拓扑结构中的节点:路由器,交换机

  • 通信线路:网线

  • 几何关系:环形,总线型,星型,网状型

  • 环形,星型,总线型常用语局域网。网状型用于广域网

4.4、按照使用者分类:

  • 公用网:Public Network,电信公司出资建造的大型网络

  • 专用网:Private Network,某个部门为本单位的特殊业务的需要建造的网络,比如铁路,军队,电力等。

4.5、按照交换技术分类:

  • 交换技术:主机之间,通信设备之间,主机和通信设备之间,交换信息的时候采用的数据格式和交换装置的方式

  • 电路交换:典型的电路交换是传统的电话网线。数据直接传送,延迟小,线路利用率低,不能充分利用线路容量。

  • 报文交换:将用户数据加上源地址,目的地址,校验码等信息,然后封装成报文。整个报文传送到相邻节点,全部存储下来后,在转发个下一个节点。

  • 优点:充分利用线路容量,实现了不同链路之间不同数据率的转换。可以实现格式转换,可以实现一对多,多对一的访问,可以实现差错控制。

  • 缺点:增加了资源开销,辅助信息导致处理时间和资源存储开销,增加了缓冲延迟。额外的控制机制保证多个报文的顺序不会乱序。而且缓冲区难以管理,因为报文的大小不确定,接收方在接收报文之前不能预知报文的大小。

  • 分组交换网络(包交换网络):将数据分成较短的固定长度的数据块,在每个数据块上加上目的地址,源地址等辅助信息,组成分组(包),然后用存储-转发方式传输

  • 分组交换网络:缓冲便于管理,包的平均延迟更小,网络中占用的平均缓冲区更小。而且容易标准化,更容易应用。

  • 现在的主流网络基本都是分组交换网络,也就是包交换。

4.6、按照传输介质分类: 

  • 传输介质可以分为有线和无线

  • 因此分为有线网络和无线网络

  • 有线网络:双绞线网络,同轴电缆网络

  • 无线网络:蓝牙,微波,无线电等

4.7、计算机网络标准化:

RFC(Request For Comments):并非每个RFC都是因特网的标准

4.8、计算机网络的性能指标:

  • 带宽(BandWidth):表示通信线路允许通过的信号频带范围,单位是Hz

计算机网络中的带宽表示:通信线路所能传送数据的能力,是数字信道所传送的最高数据率,单位是b/s,比特每秒

  • 时延(Delay):数据(报文,分组)从网络的一端传送到另一端所需要的总时间。

  • 时延:发送时延,传播时延,处理时延,排队时延

  • 发送时延=分组长度/信道宽度

  • 传播时延=信道长度/电磁波在信道上的速度

  • 处理时延:数据在交换节点为存储转化而进行的一些必要的处理事件,比如分析分组的首部,从分组中提取数据部分,进行差错校验,查找适当的路由等操作时间。

  • 排队时延:分组在进入路由器后要现在输入队列中等待处理。在路由器确定了准发端口后,还要在输出队列中排队等待转发,产生了排队时延。

  • 总时延=发送时延+传播时延+处理时延+排队时延

  • 一般来说,排队时延和处理时延都可以忽略不计。对于高速链路,提高的仅是数据发送速度而不是比特在链路上的传播速度。提高数据的发送速度只是为了减少数据的发送时延。

  • 时延带宽积=传播时延*信道宽度

  • 往返时延RTT(Round-Trip Time):从发送端发送数据开始,到发送端收到了来自接收端的确认总共经历的时延

  • 吞吐量(ThroughPut):表示单位时间内通过某个网络(比如信道或者接口)的数据量,吞吐量受网络或者网络的额定速度限制。

  • 速率Speed:网络中的速率指的是计算机网络中的主机在数字信道上传送数据的速率。也叫比特率,单位是b/s,bit/s,bps。Kb/s(K=1000),Mb/s(M=10^6),Gb/s(G=10^9),计算机网络中,通常把这些数据率叫做带宽。

SQL应用

发表于 2018-12-14 | 分类于 数据库
字数统计: 845 | 阅读时长 ≈ 4

一、工作总结: 

  今天工作中遇到了这样一个需求,具体是根据某张表的某一列值得不同,进行不同关联操作。起初自己的想法是采用UNION操作,把两种情况连接起来,但是会出现一个问题,当进行动态传值SQL拼接的时候,只能给最后面加,而不能给两种情况的结果集都动态拼接,导致查询结果和预期不一样。  

自己的SQL语句如下,自己使用UNION进行结果集连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DISTINCT C.TUUSERNA,C.TUCLASID,C.TUUSERID,C.TUEMAIL,C.TUPHONE,C.TUACEMAIL,C.TUACMOBILE,C.TUCOMP,C.TUACTIVE,
C.TUENNAME,B.UJPAPARV AS TUUSERNA,A.UJPAPARV AS OFFCCODE,D.TBDTL2 FROM
FROM WEBNFLIB.URUSERPF C
INNER JOIN WEBNFLIB.URUSOBNOPF B ON B.TUUSERID=C.TUUSERID
INNER JOIN WEBNFLIB.URUSOBNOPF A ON A.TUUSERID=C.TUUSERID
INNER JOIN CDFLIB.CDTABDPF D ON D.TBCODE=A.UJPAPARV
WHERE B.UJPAPARN = 'FWD_FRTP' AND A.UJPAPARN = 'FWD_OFFC' AND C.TUACTIVE=1 AND C.TUCLASID IN('A','B') AND D.TBTYPE='OFFC'
UNION
SELECT DISTINCT C.TUUSERNA,C.TUCLASID,C.TUUSERID,C.TUEMAIL,C.TUPHONE,C.TUACEMAIL,C.TUACMOBILE,C.TUCOMP,C.TUACTIVE,
C.TUENNAME,B.UJPAPARV AS TUUSERNA,A.UJPAPARV AS OFFCCODE,D.TBDTL2 FROM
FROM WEBNFLIB.URUSERPF C
INNER JOIN WEBNFLIB.URUSOBNOPF B ON B.TUUSERID=C.TUFUSRID
INNER JOIN WEBNFLIB.URUSOBNOPF A ON A.TUUSERID=C.TUFUSRID
INNER JOIN CDFLIB.CDTABDPF D ON D.TBCODE=A.UJPAPARV
WHERE B.UJPAPARN = 'FWD_FRTP' AND A.UJPAPARN = 'FWD_OFFC' AND C.TUACTIVE=1 AND C.TUCLASID IN('A','B') AND D.TBTYPE='OFFC'

底层方法进行动态传值,进行SQL拼接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public bool GetOffcInfo(IBaseDataAccess baseReadOnlyDataAccess, DataSet ds,ParmArray parmArray)
{
//TBDTL2=中文名,TBDTL1=英文名,TBCODE=代码
string sql = @" SELECT DISTINCT C.TUUSERNA,C.TUCLASID,C.TUUSERID,C.TUEMAIL,C.TUPHONE,C.TUACEMAIL,C.TUACMOBILE,C.TUCOMP,C.TUACTIVE,
C.TUENNAME,B.UJPAPARV AS TUUSERNA,A.UJPAPARV AS OFFCCODE,D.TBDTL2 FROM
FROM WEBNFLIB.URUSERPF C
INNER JOIN WEBNFLIB.URUSOBNOPF B ON B.TUUSERID=C.TUUSERID
INNER JOIN WEBNFLIB.URUSOBNOPF A ON A.TUUSERID=C.TUUSERID
INNER JOIN CDFLIB.CDTABDPF D ON D.TBCODE=A.UJPAPARV
WHERE B.UJPAPARN = 'FWD_FRTP' AND A.UJPAPARN = 'FWD_OFFC' AND C.TUACTIVE=1 AND C.TUCLASID IN('A','B') AND D.TBTYPE='OFFC'
UNION
SELECT DISTINCT C.TUUSERNA,C.TUCLASID,C.TUUSERID,C.TUEMAIL,C.TUPHONE,C.TUACEMAIL,C.TUACMOBILE,C.TUCOMP,C.TUACTIVE,
C.TUENNAME,B.UJPAPARV AS TUUSERNA,A.UJPAPARV AS OFFCCODE,D.TBDTL2 FROM
FROM WEBNFLIB.URUSERPF C
INNER JOIN WEBNFLIB.URUSOBNOPF B ON B.TUUSERID=C.TUFUSRID
INNER JOIN WEBNFLIB.URUSOBNOPF A ON A.TUUSERID=C.TUFUSRID
INNER JOIN CDFLIB.CDTABDPF D ON D.TBCODE=A.UJPAPARV
WHERE B.UJPAPARN = 'FWD_FRTP' AND A.UJPAPARN = 'FWD_OFFC' AND C.TUACTIVE=1 AND C.TUCLASID IN('A','B') AND D.TBTYPE='OFFC' ";
ParmArray keyArray = new ParmArray();
if (parmArray.parmNameList.Contains("TBDTL2"))
{
string strTBDTL2 = parmArray.GetParmValue("TBDTL2").ToString().Trim();
keyArray.Add("TBDTL2", "%"+strTBDTL2+"%");
sql += " AND D.TBDTL2 LIKE ? ";
}

if (parmArray.parmNameList.Contains("OFFCCODE"))
{
keyArray.Add("OFFCCODE", parmArray.GetParmValue("OFFCCODE").ToString().Trim()+"%");
sql += " AND A.UJPAPARV LIKE ? ";
}

if (parmArray.parmNameList.Contains("TUUSERNA"))
{
keyArray.Add("TUUSERNA",parmArray.GetParmValue("TUUSERNA").ToString().Trim());
sql += " AND C.TUUSERNA = ? ";
}
return baseReadOnlyDataAccess.FillDataSetByCondition(sql, ds, keyArray);
}

这样sql,除了大量重复,臃肿,而且,传值只能加载最后面。不可行。

  改进方法:采用oracle的case when方法进行操作。

Case….When的用法:

CASE 列名

WHEN 条件1 THEN 选项1

WHEN 条件2 THEN 选项2

ELSE 默认值 END

SQL语句如下:

1
2
3
4
5
6
7
SELECT DISTINCT C.TUUSERNA,C.TUCLASID,C.TUUSERID,C.TUEMAIL,C.TUPHONE,C.TUACEMAIL,C.TUACMOBILE,C.TUCOMP,C.TUACTIVE,
C.TUENNAME,B.UJPAPARV AS TUUSERNA,A.UJPAPARV AS OFFCCODE,D.TBDTL2 FROM
(SELECT (CASE WHEN A.TUFUSRID>0 THEN A.TUFUSRID ELSE A.TUUSERID END) AS CUSERID,A.* FROM WEBNFLIB.URUSERPF A) C
INNER JOIN WEBNFLIB.URUSOBNOPF B ON B.TUUSERID=C.CUSERID
INNER JOIN WEBNFLIB.URUSOBNOPF A ON A.TUUSERID=C.CUSERID
INNER JOIN CDFLIB.CDTABDPF D ON D.TBCODE=A.UJPAPARV
WHERE B.UJPAPARN = 'FWD_FRTP' AND A.UJPAPARN = 'FWD_OFFC' AND C.TUACTIVE=1 AND C.TUCLASID IN('A','B') AND D.TBTYPE='OFFC'

数据库范式

发表于 2018-12-14 | 分类于 数据库
字数统计: 627 | 阅读时长 ≈ 2

范式(Normal Form,NF)

设计关系型数据库时,需要遵从不同的规范要求,设计出合理的关系型数据库。越高的范式数据库冗余越小。

  • 范式的优点:消除重复数据,减少数据冗余,让数据库内的数据更好的组织,让磁盘空间得到更有效的利用。

  • 范式的缺点:范式使得查询变得相当复杂,在查询的时候需要更多的连接,一些复合索引的列由于范式化的需要被分割到不同的表中,导致索引策略不佳。

第一范式(1NF):每一个属性不可再分。

范式 特征 详解 举例
第一范式1NF 每一个属性不可再分 1NF,对域添加的一个规范要求,所有的域都应该是原子性的也就是数据表的每一列都是不可分割的原子数据项,而不能是集合,数组等。也就是某个属性有多个值,必须将它拆分为不同的属性。不满足1NF的不是关系数据库。满足1NF的表必须要有主键,每个属性不可再分。 比如说员工表,有员工号,姓名,电话号码组成。但是一个人可能有座机号码和移动号码。需要将它拆分为两个属性,也就是员工表(员工号,姓名,座机号码,移动号码)
第二范式2NF 符合1NF,并且非主属性完全依赖于码 在1NF的基础上,每一个非主属性必须完全依赖于码,消除非主属性的对主键的部分函数依赖也即是实体的属性完全依赖于主关键字。完全依赖是不能存在只依赖主关键字的一部分。 选课关系(学号,课程号,成绩,学分),码为组合关键字(课程号,学号)但是非主属性学分只依赖课程号,对关键字(学号,课程号)只是部份依赖。不是完全依赖。所以要拆分为两个关系模式:学生表(学号,课程号,分数)课程表(课程号,学分),新的关系通过学生表中的外键课程号联系,需要时通过两个表的连接获取数据
第三范式3NF 符合1NF,且每个非主属性既不部分依赖码,也不传递依赖码也就是在2NF的基础上消除传递依赖

電商推薦系統

发表于 2018-12-14 | 分类于 计算机
字数统计: 439 | 阅读时长 ≈ 1

电商网站用户行为分析及服务推荐

推荐系统和搜索引擎

  • 搜索引擎满足有明确目标用户的需求
  • 推荐系统能够帮助用户发现其感兴趣的内容

当用户访问网站页面时,系统会记录用户访问呢网站的日志,记录用户IP,用户访问的时间,访问内容等多项属性的记录。

  • 按地域研究用户访问呢时间,访问内容和访问次数等分析主题,深入了解用户对访问呢网站的行为和目的及关心的内容
  • 借助大量的用户的访问记录,发现用户的访问行为习惯,对不同需求的用户进行相关的服务页面的推荐。

为了更好的帮助用户从海量数据中快速的发现感兴趣的网页,在目前相对单一的推荐系统上进行补充,采用协同过滤算法进行推荐。

用于用户访问网站的数据记录很多,如果对数据不进行分类处理,对所有记录直接采用推荐系统给进行推荐。会出现问题:

  • 数据量太大意味着物品数与用户数很多,在模型构建用户与物品的系数矩阵的时候,出现设备内存空间不够的情况,并且模型计算需要消耗大量的时间
  • 用户区别很大,不同的用户关注的信息不一样,因此,即使能够得到推荐结果,其推荐效果也会不好。所以要进行分类处理与分析。
  • 需要对用户的兴趣爱好以及需求进行分类。

马克思哲学

发表于 2018-12-13 | 分类于 哲学
字数统计: 3.9k | 阅读时长 ≈ 12

一、马克思主义哲学核心

1、唯物主义和唯心主义

哲学是系统化,理论化的世界观,是世界观的理论体系。

  • 一切哲学都不能调和唯物主义和唯心主义两大基本派别,这是哲学的党性
  • 唯物主义主张物质第一,精神第二,按世界的本来面目来说世界,不附加外来成分
  • 唯心主义主张精神第一,物质第二。
    • 主观唯心主义:把人的感觉、观念作为唯一真实的存在和世界的本源
    • 客观唯心主义:把某种脱离个人的精神变为独立的存在,作为世界本源和万物的创造者
  • 唯心主义产生根源:感觉是屏障,不可知论,马克思和旧唯物最主要区别:唯物史观
    • 阶级根源:在阶级社会,唯心主义哲学受到反动没落的社会阶级的拥护和利用,所以得到保存和流传。根源不能说主观和客观相背离,因为它是认识错误的原因,可以是教条主义经验主义的错误
    • 社会根源:社会分工,脑体劳动分离,为片面夸大精神意识的作用提供了条件
    • 认识论根源:在认识过程中,将认识的某一特征,方面,部分加以夸大。将认识过程中的感性阶段夸大,绝对化,导致主观唯心主义。将认识过程中的理性阶段夸大,绝对化,导致客观唯心主义
  • 旧唯物主义的缺陷:机械性,形而上学,不彻底性,没有确立科学的实践观
  • 马克思主义的特点:马克思最伟大的贡献,创立唯物史观,旧唯物史因为自然观唯物,历史观唯心。
    • 阶级性:公开申明为谁服务,一切辩证法都认为世界是普遍联系的,发展变化的,没有认为世界统一
    • 实践性:强调理论对实践的依赖关系,理论发过来又指导实践。解决问题的出发点–实践
    • 革命性与科学性的统一,革命性建立在科学性基础之上,也就是正确认识事物的基础之上。
  • 马哲与具体科学的关系:一般与个别,抽象与具体,指导与被指导,普遍与特殊。

2、解放思想,实事求是,与时俱进

  • 实事求是:一切从实际出发,从中找出其固有额规律性,作为我们行动的向导
  • 解放思想:在马克思主义指导下,破除不符合实际的旧观念,研究新情况,解决新问题,使主观与客观相符合
  • 与时俱进:马克思主义理论及其指导下的实践要体现时代性,把握规律性,富于创造性。
  • 解放思想是前提,实事求是是核心,与时俱进,开拓创新是目的,三者相互依存,相互促进。

3、辩证唯物主义和历史唯物主义的作用

  • 揭示人类社会的本质和发展规律,为我们理解社会提供思想武器。唯心不是改造世界的思想武器
  • 为我们认识社会提供了辩证法原则,我们要用联系和发展的观点认识社会
  • 帮助人们树立正确的世界观,人生观和价值观
  • 提高人们对社会发展,社会管理规律的认识和运用能力

4、科学主义,人本主义

  • 科学主义:否定哲学世界观功能,推崇科学知识,放弃世界观的研究
  • 人本主义:反对科学和理性,强调人的存在的本质论,不是以人为本,具有非理性主义的特点

5、世界的物质性和人的实践活动

庸俗唯物主义的错误是抹杀了意识的主观特征

  • 物质是不依赖于人的意识所反映的客观实在。物质定义的意义:三个划清界限:

    同唯心主义和二元论,同不可知论,同旧唯物主义。正确理解物质范畴要把握自然物质的多样性,客观实在性

  • 客观实在:是物质的共同的一般本质,它通过运动表现出来

  • 运动是物质的存在方式和根本属性。运动和物质不可分离,设想没有运动的物质是机械唯物论。设想没有物质的运动是唯心论。运动和静止都是物质的固有属性,运动绝对,静止相对,它们互相包含。

  • 静止是运动的特殊状态。相对静止使事物呈现多样性,是区分事物基础,衡量事物运动尺度

  • 实践是人能动的改造物质世界的对象性活动。形式:生产,处理,变革社会关系和科学实验

  • 实践有三个基本特征:客观现实性,自觉能动性,社会历史性。实践目的、手段、结果的反馈调节。

  • 主体是指从事实践活动和认识活动的人,客体是主体活动对象的总和。实践活动就是以主体、中介和客体为基本骨架的动态系统,通过实践活动使客体主体化,使主体客体化

6、自在世界和人类世界及其人的实践活动的关系

  • 主观世界:人的意识、观念世界,是人的头脑反映和把我物质世界的精神活动、心理活动的总和存在主义所谓的存在是指个人的存在,主体和客体相互作用的实质是主体和客体之间的限定和超越的关系
  • 客观世界:物质的,可以感知的世界,人的意识之外的一切物质运动的总和,包含自然存在和社会存在。主体和客体的关系:目的和手段,创造者和被创造者,能动者和被动这
  • 自在世界:天然自然,是人类世界产生前的先在世界,是尚未被人化的自然界
  • 人类世界:属人世界,是在人类实践基础上形成的,人化自然,人类社会的统一体。

7、意识的产生,本质机器能动作用

  • 从起源看,意识是物质世界高度发展的产物,是自然界长期发展的产物,又是社会的直接产物。不能说意识创造物质,可以说意识可以转化为物质
  • 从意识的本质看,意识是物质在人脑的机能和属性,是对客观事物的主观映像
  • 从意识的作用看,意识对物质具有能动作用。计划性,主观创造性,生理机能调控
  • 本质:意识是人脑对物质的反映,意识在形式上是主观的,在内容上是客观的,是客观世界的主观映像。不能说意识是物质的东西,只能说意识依赖与物质,没有独立存在的意识和精神
  • 意识发挥的条件:遵循物质运动的客观规律;必须把正确的思想付诸实践;借助一定的物质条件和手段。对实践结果进行评价:对实践效能、实践效率和实践效果的评价

8、世界物质统一性原理:要求我们一切从实际出发,实事求是

  • 世界是统一的,世界的本源是一个,反对一元论,反对二元论
  • 世界的统一性在于它的物质性,物质是世界的本原,坚持唯物主义,反对唯心主义
  • 物质世界的统一性是多样性的统一,是在客观实在基础上的统一。坚持辩证唯物反对旧唯物

9、联系的客观性、普遍性、多样性

  • 联系是:事物内部诸要素之间以及事物之间的相互影响、相互作用和相互制约,是客观的普遍的。坚持用联系的观点,反对孤立片面的观点

  • 系统:是由相互联系,相互作用的若干要素组成的具有稳定结构和特定功能的有机整体

  • 系统的主要特征:整体性,结构性,层次性,开放性。最主要特征:整体性。

  • 科学的任务:揭示事物联系,科学的突破往往表现在把看来没有联系的事物联系起来

  • 整体由部分构成,但不等于部分之和。部分离不开整体,否则将失去原有的性质和功能

    整体决定部分,部分影响整体。整体和部分在一定条件下相互转化

10、发展的永恒性和普遍性,发展的实质,唯物辩证法过程轮的内容和意义

  • 运动时指宇宙间所发生的的一切变化和过程

  • 发展是具有前进性质的运动,发展的实质是新事物的产生和旧事物的灭亡,新陈代谢

  • 新事物必须战胜旧事物:发展的本质:新生旧灭。新事物代表事物发展的基本趋势

    新事物取代旧事物是辩证的否定过程。在社会领域新生事物符合人民大众的根本利益

  • 过程指一切事物都有其产生,发展和转化为其他事物的历史。都有它的过去,现在和未来。世界是过程的集合体。世界总过程的主导方向是前进。存在即过程,产生出来的东西都要灭亡

11、规律

  • 规律是事物内部的本质联系和反战的必然趋势,是本质的,必然的,稳定的,客观的联系

12、本质和现象

  • 本质:事物的内在联系和根本性质
  • 现象:事物的外部联系和表面特征,有真相和假象之分
  • 本质和现象的辩证关系:
    • 现象为感官直接感知,本质为抽象思维把我
    • 现象是个别,本质是一般
    • 现象是多变易逝,本质相对稳定
    • 任何事物都是现象和本质的统一体
    • 我们能够通过现象认识事物的本质,必须透过现象看本质

13、必然性和偶然性

  • 必然性:事物联系和发展过程中一定要发生,确定不移的趋势,偶然包含,表现必然,是必然的补充
  • 偶然性:可以出现,可以不出现,可以这样出现,可以那样出现的不确定趋势。必然制约偶然
  • 必然性产生于事物内部的根本矛盾,必然性存在于偶然性之中,偶然性背后隐藏着必然性

14、原因和结果

  • 原因:引起某种现象的现象
  • 结果:被某种现象引起的现象
  • 因果联系是有时间顺序的联系,总是原因在前,结果在后,但并不是任何前后相继的现象都存在着因果关系联系。原因和结果的界限是确定的

15、事物发展过程中的量变和质变

  • 质是一事物成为它自身并区别于其他事物的规定性,质和事物的存在是直接同一的
  • 量是事物存在和发展的规模,程度,速度以及它的构成成分在空间的排列组合等可以用数量表示的规定性,量和事物的存在不是直接同一的,认识量是认识事物的深化和精确化
  • 度是事物保持自己质的量的范围,幅度和限度。认识度要掌握适度原则
  • 量变和质变既相互区别,又相互联系
    • 区别的标志:事物的变化是否超出度。把同质的事物泣别开来的依据是事物的属性和量
    • 联系是相互转化和相互渗透:量变向质变转化,量变是质变的必要准备,质变是量变的必然结果;质变向量变转化,质变体现和巩固量变的成果,并为新的量变开拓道路。量变中渗透质变,即在总的量变过程中包含部分质变;质变中渗透量变,即在质变中包含新质在量上的扩张。事物的发展就是由量变到质变,由部分质变到根本质变,在新质的基础上又开始新的量变,如此循环往复,相互交替,以致无穷

16、事物发展中的肯定和否定及其辩证关系,辩证的否定观及其方法论意义

  • 肯定是事物中保持其存在的因素
  • 否定是事物中促使其灭亡的因素
  • 辩证的否定:事物内在矛盾引起的自我否定,包含肯定的否定,既是发展的环节,又是联系的环节,否定规律是新生事物必然要战胜旧事物的哲学依据

17、矛盾同一性和斗争性辩证关系的原理及其方法论意义

  • 对立统一规律是唯物辩证法的实质和核心。因为,对立统一规律揭示了事物联系的实质内容和发展的内在动力。它是贯穿于唯物辩证法其他规律和范畴的中心线索。矛盾分析方法是最根本的认识方法。
  • 斗争性是指矛盾双方之间相互分离,相互排斥的性质和趋势,其形式多种多样。斗争性绝对
  • 同一性:指矛盾双方之间相互联系,相互吸引的性质和趋势。同一性是相对的
  • 斗争性和同一性的相互联结,相互制约的:同一性不能脱离斗争而存在,没有斗争性就没有同一性。斗争性也不能够脱离同一性而存在,斗争性寓于同一性之中。矛盾斗争性和同一性相互联结的原理,要求我们在分析和解决矛盾时,必须从对立中把握同一从同一中把握对立。

18、矛盾同一性和斗争性在事物发展中的作用

  • 同一性的作用:
    • 矛盾的一方可以利用另一方的发展使自己获得发展
    • 矛盾双方可以相互吸引有利于自身的因素而得到发展。提供矛盾双方得以存在和发展的条件
    • 矛盾双方向着自己的对立面转化而得到发展。规定事物向自己对立面转化的基本趋势
  • 斗争性的作用:
    • 斗争推动矛盾双方力量对比发生变化,造成事物的量变
    • 斗争促使矛盾双方地位或者性质转换,实现事物的质变
  • 矛盾推动事物的发展,说明事物发展的根本原因不在事物外部,而在事物内存的矛盾性
    • 内因是事物发展的根本原因,是变化的根据
    • 外因是事物发展的第二位的原因,是变化的条件,外因通过内因而起作用。

OGG的组件解析

发表于 2018-12-12 | 分类于 数据库
字数统计: 810 | 阅读时长 ≈ 2

Naruto

一、OGG的各个组件解析(Oracle GoldenGate)

1、Manager:

Manager进程是GoldenGate中进程的控制进程,用于管理Extract,Data Pump,Replicat等进程

在Extract,Data Pump,Replicat进程启动之前,Manager进程必须先要在

源端和目标端启动,在整个Golden Gate运行期间,它必须保持运行状态

  • 监控与启动Golden Gate的其他进程

  • 管理trail文件及Reporting

  • 在windows系统上,Manager进程是作为一个服务来启动的,在Unix系统下是一个进程

2、Extract

Extract进程运行在数据库源端上,他是Golden Gate的捕获机制,可以配置

Extract进程来做如下工作:

  • 初始数据装载:对于初始数据装载,Extract进程直接从源对象中提取数据

  • 同步变换捕获:保持源数据与其他数据集的同步,初始数据同事完成后

  • Extract进程捕获源数据的变换,比如DML变换(增删改),DDL变化(drop,create,alter)

3、Replicat

Replicat进程是运行在目标端系统的一个进程,负责读取Extract进程提取到的数据(变更的事务或者DDL变化)

然后应用到目标数据库

配置Replicat进程完成如下工作:

  • 初始化数据装载:对于初始化数据转载,Replicat进程应用数据到目标对象或者路由

它们一个高速的Bulk-load工具上

  • 数据同步,将Extract进程捕获到的提交了的事务应用到目标数据库中

4、Collector

Collector是一个运行在目标端的一个后台进程

接收从TCP/IP网路传输过来的数据变化,并写道Trail文件里

  • 动态Collector:由管理进程自动启动的collector叫做动态collector,用户不能

与动态collector交互

  • 静态Collector:可以配置成手工运行Collector,这个就是静态的

5、Trails

为了持续的提取与复制数据库变化,Golden Gate将捕获到的数据变化临时存放在磁盘上

的一系列文件中,这些文件叫做Trail 文件

这些文件可以在source DB上也可以在Target DB上,也可以在中间系统上,这依赖

于选择哪种配置情况

  • 在数据库源端上叫做Local Trail或者Extract Trail

  • 在目标端的叫做Remote Trail

6、Data Pumps

Data Pump是一个配置在源端的复制的Extract机制

Data Pump是一个可选组件,如果不配置Data Pump,那么由Extract主进程

将数据发送到目标端的Remote Trail中

如果配置了Data Pump,会由Data Pump将Extract主进程写好的本地Trail文件通过网络发送到

目标端的Remote Trail文件中

使用Data Pump的好处:

  • 如果目标端或者网络失败,源端的Extract进程不会意外终止

  • 需要在不同的阶段实现数据的过滤或者转换

  • 多个源数据复制到数据中心

  • 数据需要复制到多个目标数据库

7、ADG的解释

所谓的ADG,就是在备份库,应用redo log的同时,避免资源的浪费

OGG侧重于数据备份,ADG侧重于高可用

OGG可以异构,也就是不仅可以用在Oracle,ADG只有oracle可以用

Oracle数据库优化

发表于 2018-12-12 | 分类于 数据库
字数统计: 467 | 阅读时长 ≈ 1

除了给table建立索引之外,保持良好的SQL语句编写。

1、通过变量的方式来设置参数

  比如动态查询的时候,尽量这样写

1
2
好:string strSql=" SELECT * FROM PEOPLE P WHERE P.ID=? ";
坏:string strSql=" SELECT * FROMM PEOPLE P WHERE P.ID= "+ID;

数据库的SQL解析和执行会保存在缓存中,SQL只要有变化,就要重新解析。而”where p.id=”+id的方式在id值发生改变得时候需要重新解析SQL,浪费时间。

2、尽量不要使用select *

1
2
好:string strSql=" select id,name from people ";
坏:string strSql=" slect I from people";

select * 会增加SQL解析的时间,而且把不需要的数据也查询了出来,数据传输很浪费时间。

3、谨慎使用模糊查询

1
2
好:string strSql=" select * from people p where p.id like 'parm%' ";
坏:string strSql=" select * from people p where p.id like '%parm%' ";

当模糊匹配以%开头,这一列的索引将彻底失效,导致全表扫描,如果不以%开头,则这一列的索引还是有效的。

4、优先使用UNION ALL,避免使用UNION

1
2
好:string strSql=" select name from people union all select name from teacher ";
坏:string strSql=" select name from people union select name from teacher ";

因为UNION会将各查询的子集记录进行比较,比起来UNION ALL,速度会慢很多。

5、在where语句或者order by语句中,避免对索引字段进行计算操作。

1
2
好:string strSql=" select name ,age from people where date=? ";
坏:string strSql=" select name,age from people wehre trunc(date)=? ";

6、永远为每张表设置一个ID

数据库的每一张表都应该设置一个ID作为主键,而且是int型,推荐使用UNSIGNED,并且设置上自动增加的AUTO_INCREMENT的标志。

即使你的people表有一个主键叫做name的字段,你也别让它成为主键,使用varchar类型作为主键会使得性能下降。

Oracle数据库之存储过程与游标

发表于 2018-12-12 | 分类于 数据库
字数统计: 1.2k | 阅读时长 ≈ 4

一、存储过程

  一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,来执行它。

在大型数据库中,存储过程和触发器具有重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。

存储过程的优点:

  1、存储过程只在创造时进行编译,以后每次执行存储过程都不需要重新编译,一般的SQL语句执行一次就要编译一次,所以使用存储过程可以提高数据库执行速度。

  2、当对数据库进行复杂操作时(比如对多个表进行CRUD时),可以将复杂的CRUD操作用存储过程封装起来与数据库提供的事务处理结合在一块使用。

  3、存储过程可以重复使用,可以减少数据库开发人员的工作量。

  4、存储过程安全性搞,可以设定只有某个用户才具有对指定存储过程的使用权。

Oracle的存储过程分为两种:系统存储过程和自定义存储过程。

系统存储过程:Oracle预先提供的一组完成特功能的存储过程,安装完Oracle 就有。

自定义存储过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
Create [Or Replace] Procedure 过程名[参数[in/out/in out]]

AS/IS

说明部分

BEGIN

可执行部分

[EXCEPTION 错误处理部分]

END [过程名];

注:可选的replace:表示如果存储过程已经存在,则用新的存储过程覆盖掉原来的,常用语存储过程的重建。

参数部分:用于定义多个参数(如果没有参数,可以不写),参数有三种形式:IN,OUT,INT OUT。一般没有指定参数形式的话,默认为IN。

关键字AS也可以写成IS,后面跟存储过程的说明部分,也可以在这块定义存储过程的局部变量。

  • 删除存储过程: DROP PROCEDURE 存储过程名;
1
2
3
--创建一个统计产品表总数的存储过程CREATE OR REPLACE PROCEDURE product_countAS PRODUCT_SUM NUMBER(10);BEGIN
SELECT COUNT(*) INTO PRODUCT_SUM FROM product_table;
DBMS_OUTPUT.PUT_LINE('产品数量是:'||PRODUCT_SUM);END;
  • 无参的存储过程:
1
2
3
4
5
6
7
8
--创建一个打印HelloWorld的无参存储过程
create or replace procedure printHelloWorldas --说明部分begin
dbms_output.put_line('Hello World');
end
printHelloWorld;--无参数存储过程的调用
方法1、exec printHelloWorld();
方法2、begin printHelloWorld();
end;

二、游标(Cursor)

游标:一种PL/SQL控制结构,对SQL语句的处理进行显示控制,便于对表的行数据逐条进行处理。,游标只存留在内存中。一般使用方法是:声明游标—>打开游标—>取出结果—>关闭游标。

一般使用for循环来操作游标

1
2
3
4
5
6
7
8
9
10
--利用for循环创建操作游标DELCARE --声明游标
CURSOR testCursor IS SELECT * FROM product_table where id=1;
productInfo product_table%ROWTYPE;--ROWTYPE类型:表示一行的数据
count NUMBER;BEGIN --开始操作游标
FOR productInfo IN testCursor
LOOP
count:=testCursor%ROWCOUT;--ROWCOUNT 对游标所操作的行数进行记录
DBMS_OUTPUT.put_line(count||'产品编号:'||productInfo.id);
DBMS_OUTPUT.put_line(count||'产品名称:'||productInfo.name);
END LOOP;END;

游标的作用:

1、指定结果集中特定行的位置

2、根据当前的结果接位置检索一行或者连续的几行

3、在结果集的当前位置修改行中的数据

4、对其他用户所做的数据更改定义不同的敏感级别

5、根据编程的方式访问数据库

因为游标的效率比较差,如果游标操作的数据超过一万行,那么就要改写。

  • 显式游标:用户显式的声明的游标,也就是指定的结果集,当查询返回结果超过一行,就需要一个显式游标。

  • 隐式游标:所有的CRUD记录为隐式游标,系统帮我们定义。

    • %Found:用于校验游标是否成功。
    • %NotFound:最后一条记录是否提取,到了游标的尾部,没有记录了就返回true
    • %ISOpen:游标是否打开,打开为true
    • %RowCount:游标当前提取的行数。

三、创建函数

语法:

1
2
3
4
5
6
7
8
  create [or replace] function 函数名(参数列表[in/out/in out])
  --参数列表的类型:in:输入的参数,out:返回的参数,in out:即是输入参数也是返回参数
  return datatype--返回值类型
  as/is
  说明部分
  begin
  --执行的SQL
  end;
1
2
3
4
5
6
--创建一个计算产品平均价格的函数
create or replace function avg_function_product(product_sum_price in number(10,2),product_count in out number(10,2)) return number(10,2)as
product_price number(10,2);begin
product_price:=product_sum_weight/product_count;
return product_price;
end;
1
2
3
4
5
6
7
--创建一个比较大小的自定义函数
create or replace function testCompare(args1 in number,args2 in number)return numberasbegin
if args1>args2 then return args1;
else return args2;
end if;
end testCompare;--测试调用
select testCompare(12,57) from product_table;
1…567
Victor Drq

Victor Drq

70 日志
8 分类
1 标签
RSS
GitHub E-Mail 博客园
© 2018 Victor Drq | Site words total count: 62k
本站访客数:
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4