函数调用

PL/SQL轻量版(四)——存储函数/存储过程与触发器

眉间皱痕 提交于 2020-02-11 11:56:34
概述   ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。 过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。 一、存储函数    1.创建函数        内嵌函数 CREATE [OR REPLACE] FUNCTION function_name [ (argment [ { IN | IN OUT }] Type, argment [ { IN | OUT | IN OUT } ] Type ] [ AUTHID DEFINER | CURRENT_USER ] RETURN return_type { IS | AS } <类型.变量的说明> BEGIN FUNCTION_body EXCEPTION 其它语句 END; 说明: 1) OR REPLACE 为可选. 有了它, 可以或者创建一个新函数或者替换相同名字的函数, 而不会出现冲突 2) 函数名后面是一个可选的参数列表, 其中包含 IN, OUT 或 IN OUT 标记. 参数之间用逗号隔开. IN 参数 标记表示传递给函数的值在该函数执行中不改变; OUT

c++ new 与malloc有什么区别

◇◆丶佛笑我妖孽 提交于 2020-02-11 09:26:03
转自:https://www.cnblogs.com/ywliao/articles/8116622.html new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。 那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。 特别的,new甚至可以不为对象分配内存!定位new的功能可以办到这一点: new (place_address) type place_address为一个指针,代表一块内存的地址。当使用上面这种仅以一个地址调用new操作符时,new操作符调用特殊的operator new,也就是下面这个版本: void * operator new (size_t,void *) //不允许重定义这个版本的operator new

c++ 面试整理

别说谁变了你拦得住时间么 提交于 2020-02-11 02:58:10
1. 继承方式 public   父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问 }; int main() { base a; a.printa(); //a.printhello(); //printhello是类derived的protected函数,不可访问。 } 2. sizeof 和 strlen 的区别 sizeof 是一个操作符,strlen 是库函数。

宏內核與微內核區別

99封情书 提交于 2020-02-10 20:33:32
操作系統內核-宏內核與微內核(轉載) 聲明:本文從CSDN轉載,原文鏈接為: https://blog.csdn.net/Silencegll/article/details/51496158 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。微内核:功能被划分成独立的过程,过程间通过IPC进行通信。模块化程度高,一个服务失效不会影响另外一个服务。Linux是一个单内核结构,同时又吸收了微内核的优点:模块化设计,支持动态装载内核模块。Linux还避免了微内核设计上的缺陷,让一切都运行在内核态,直接调用函数,无需消息传递。 Linux大部分都是单内核的。 微内核(Microkernel kernel)――在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。 在这些设计中,微内核部分经常只但是是个消息转发站:当系统调用模块要给文档系统模块发送消息时

Python3(九) 闭包

◇◆丶佛笑我妖孽 提交于 2020-02-10 20:26:16
一. 一切皆对象 函数式编程并没有标准定义,如果代码非常繁琐则考虑使用。 学习闭包的概念,不是python独有的。 其他大多数语言中的函数只是一段可执行的代码,并不是对象。 python中的函数是对象,一切皆对象。可以把函数赋值给变量: a = 1 a = '2' a = def 甚至可以把函数当作另外一个函数的参数传递或者当成返回值返回,而C#中要封装成委托。 二.什么是闭包:闭包=函数+函数定义时的环境变量 我们尝试从概念上去理解一下闭包。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。—— 维基百科 用比较容易懂的人话说,就是当某个 函数 被当成对象返回时, 夹带了外部变量 ,就形成了一个闭包。 1. code1 def curve_pre(): def curve(): pass curve() #找不到,因为curve()的作用域仅限于curve_pre()的内部 code2 def curve_pre(): def curve(): print('This is a function') pass return curve #函数可以作为结果返回 f = curve_pre() #函数可以赋值

学习matlab(四)——概率与数理统计

风格不统一 提交于 2020-02-10 20:21:36
概率和数理统计是大学数学的重要内容,无论是在科学研究还是在工程实际中都有着非常广泛的应用。在MATLAB中,提供了专门的统计工具箱Staticstics,该工具箱有几百个专用于求解概率和数理统计问题的函数。本章将详细的介绍随机数的产生,随机变量的概率密度函数和数字特征,以及假设检验、方差分析和统计绘图等。 0.随机数 随机数的产生是概率统计的基础,概率论和数理统计就是对各种样本数据进行分析。在MATLAB中,各种样本数据可以用一些经典的随机分布数来表示。下面对常用的二项分布、均匀分布、指数分布、正态分布等随机数据进行详细的介绍。 <1>二项分布随机分布 在MATLAB中,使用函数binornd()产生二项分布的随机数据。该函数的的调用方式如下:R=binornd(N,P):在该函数中N和P为二项分布的两个参数,返回服从参数为N和P的二项分布随机数。R=binornd(N,P,M):在该函数中参数M指定随机数的个数,与返回结果R同维数。 <2>泊松分布 在MATLAB中,使用函数poissrnd()产生泊松分布的随机数据。该函数的调用方式如下:R=poissrnd(LAMBDA):在该函数中LAMBDA为泊松分布的参数,返回服从参数为LAMBDA的泊松分布随机数,其中R与LAMBDA维数相同。R=poissrnd(LAMBDA,M,N):在该函数中LAMBDA为泊松分布的参数

python 学习笔记7 面向对象编程

你说的曾经没有我的故事 提交于 2020-02-10 15:56:12
一、概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 二、创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。   类就是一个模板,模板里可以包含多个函数,函数里实现一些功能   对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 #创建类 class Foo: #class 关键字,表示要创建类,Foo 类名称 #创建类中的函数 def Bar(self): #self 特殊参数,必填 #do something # 根据类Foo创建对象obj obj = Foo() class是关键字,表示类 创建对象,类名称后加括号即可 #创建类 class Dog(object): def __init__(self,name): #构造函数,构造方法 ==初始化方法 self.NAME = name def sayhi(self): #类的方法 print("hello , I am a dog. my name is", self.NAME ) def eat(self,food): print("%s is eating %s" %(self

c++之容器详解

十年热恋 提交于 2020-02-10 15:47:37
5. 类模板编程 有时候继承、包含并不能满足重用代码的需要,这一般在容器类里面体现的尤为突出。例如: 我们定义了一个容器类,Container, 这个Container类可以实现类似verctor一样的工作,能保存数据,能修改数据,并且 数据的类型不限制 ,但是 针对数据的操作都是一样 的。那么类模板编程就成了不二之选了。 1. 定义模板类 这里以栈作为参照对象,定义一个模板类,实现栈一样的功能。 原始代码 class Stack{ private : enum{MAX = 10}; //表示这个Stack容器最多只能装10个。 int top =0 ; //表示最顶上的索引位置 string items[MAX]; //定义一个数组,以便一会装10个元素 public: bool isempty(){ return top == 0; } bool isfull(){ return top == MAX; } //压栈 int push(string val){ if(isfull()){ return -1; } //没有满就可以往里面存 items[top++] = val; } //出栈 string pop(){ if (isempty()){ return ""; } //如果不是空 top 只是指向位置,而数组获取数据,索引从0开始,所以先-- return

以太坊之九智能合约

狂风中的少年 提交于 2020-02-10 13:51:15
正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。 文章目录 9.智能合约 9.1 智能合约的定义 9.2 类的结构 9.3 智能合约的创建和运行 9.4 智能合约的调用 9.4.1 外部账户调用合约 9.4.2 合约调用合约:直接调用 9.4.3 合约调用合约:address类型的call()函数 9.4.4 合约调用合约:代理调用 9.5 智能合约的工作过程 9.6 汽油费 9.7 错误处理 9.8 可重入攻击 9.9 著名的THE DAO事件 9.10 beauty chain(美链) 9.11 Q&A 9.智能合约 9.1 智能合约的定义 先说维基百科的吧,A smart contract is a computer protocol intended to digitally facilitate, verify, or enforce the negotiation or performance of a contract. Smart contracts allow the performance of credible transactions without third parties. These

Zookeeper 假死脑裂

烈酒焚心 提交于 2020-02-10 12:23:32
1、死信、延迟、重试队列 DLQ(Deal Letter Queue),死信队列。当一个消息在队列中变成死信之后,他能被重新发送到 DLQ 中,与 DLQ 绑定到队列就是死信队列。 什么情况下需要死信队列 消息被拒绝 消息过期 队列达到最大长度 生产者生产一条消息,存储到普通队列中;设置队列的过期时间为 10 秒,在 10 秒内没有消费者消费消息,那么判定消息过期;此时如果设置了死信队列,过期消息被丢给死信队列交换机,然后被存储在死信队列中。 延迟队列 顾名思义就是延迟执行消息,比如我们可以增加一个队列并设置其超时时间为 10 秒并且不设置任何消费者,等到消息超时,我们可以将消息放入死信队列,让消费者监听这个死信队列就达到了延迟队列的效果。 重试队列 重试的消息在延迟的某个时间点(业务可设置)后,再次投递给消费者。而如果一直这样重复消费都持续失败到一定次数,就会投递到死信队列,最后需要进行人工干预。 2、 双亲委派模型 Java类加载器(ClassLoader) 双亲委派模式要求 除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器 ,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是 采用组合关系来复用父类加载器的相关代码 ,类加载器间的关系如下: 双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求