比如我们的应用都是链接在MD—SAL上,所以必须依赖MD-SAL。 config subsystem在MD-SAL之外而且被用来提供把应用接入MD-SAL的功能。 我们其中依赖了一个MD-SAL的服务 binding-aware-broker,这个跟MD-SAL的数据存取的datastore有关,我后面会讲到如何去用。 比如我们的应用都是链接在MD—SAL上,所以必须依赖MD-SAL。 config subsystem在MD-SAL之外而且被用来提供把应用接入MD-SAL的功能。
从大的结构上来看,MD-SAL与AD-SAL并没有太多的差别,都是由一些南向/北向的Plugin(SB/NB-Plugin)以及中间的适配层(SAL)组成。 MD-SAL与AD-SAL设计结构上的差别主要如下: 1.不同于AD-SAL,MD-SAL引入了Data Store的概念,在其提供的Data Store中,存储由北向Application和南向Device 图2-1 MD-SAL与AD-SAL的架构设计差别示意 我们再以图2-1为例来具体说明AD-SAL与MD-SAL的差别,以更好地理解MD-SAL新引进的一些理念: 在图2-1中,NB-Plugin1通过静态绑定访问 AD-SAL中原有的消息路由功能在MD-SAL中依然存在。 三.MD-SAL架构 MD-SAL内部实现的抽象架构如图3-1所示。 图3-1 MD-SAL架构示意图 四.MD-SAL Plugin生命周期 MD-SAL本身不提供任何的Model,所有的Model都是由对应的Plugin来提供。
为了有个比较,我们先设想一下如果不利用MD-SAL框架,如何实现? 见上图的实现步骤: 1)所有的面包机厂商,按照MD-SAL中约定好的“面包机南向接口协议”,实现面包机和MD-SAL框架的交互。 2)面包机APP应用程序通过调用MD-SAL提供的北向接口,实现APP和MD-SAL框架的交互。 3)MD-SAL框架内部完成北向接口和南向接口之间的对接。 绿色部分是ODL的 MD-SAL框架内部提供的数据存储服务, Provider会向MD-SAL框架中注册可Provider Bundler可以提供的服务: ? 胖子@南京 不部署到控制器里面,单独的bundle可以吗 不可以,要依赖ODL的MD-SAL框架。需要调用ODL MD-SAL的数据服务,所以要部署在一起。
win7环境)、SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)和ODL源码编译生成发行版控制器之后,终于有时间写第4篇文章,本章主要讲如何开发一个基于MD-SAL
文章目录 一、add / sub / mul / div 数值运算指令 二、xor / not / sal / sar / shl / shr 位运算指令 总结 一、add / sub / mul / 减法运算指令 , 运算结果存储到操作数 1 中 ; mul : 乘法运算指令 , 运算结果存储到操作数 1 中 ; div : 除法运算指令 , 运算结果存储到操作数 1 中 ; 二、xor / not / sal / sar / shl / shr 位运算指令 ---- 位运算指令 : xor : 异或运算指令 ; not : 取反运算指令 ; sal : 算术左移指令 ; sar : 算术右移指令 ; shl pusha , popa ret , retn 返回指令 , set 设置目标值指令 add , sub , mul , div 数值运算指令 xor , not , shl , shr , sal
DECLARE v_empid emp.empno%TYPE; v_job emp.job%TYPE; v_old_sal emp.sal%TYPE; v_new_sal emp.sal%TYPE DECLARE v_empid emp.empno%TYPE; v_job emp.job%TYPE; v_old_sal emp.sal%TYPE; v_new_sal emp.sal%TYPE ='CLERK' THEN v_new_sal:=v_old_sal*1.1; ELSE v_new_sal:=v_old_sal*1.08; END IF; UPDATE emp SET sal DECLARE v_empid emp.empno%TYPE; v_job emp.job%TYPE; v_old_sal emp.sal%TYPE; v_new_sal emp.sal%TYPE :=v_old_sal*1.1; WHEN v_job='SALESMAN' THEN v_new_sal:=v_old_sal*1.08; ELSE v_new_sal:=v_old_sal*
定义和列的类型保持一致 v_sal emp.sal%type;-- 和emp表sal列的类型保持一致 2. %type,v_empsal EMP.SAL%type); --变量名是v_name_sal 类型是type_emp_name_sal v_name_sal case when v_temp_empno_sal.v_sal > 3000 then update emp set sal = sal * 0.6 where empno = v_temp_empno_sal.v_empno; when v_temp_empno_sal.v_sal > 2000 and v_temp_empno_sal.v_sal when v_temp_empno_sal.v_sal > 1500 and v_temp_empno_sal.v_sal <= 2000 then update emp set
显示平均工资为>2000的职位 select job,avg(sal) from emp group by job having avg(sal)>2500; 2. (sal)>3000; 3. 找每一个部门的最高和最低的工资 Select deptno,max(sal),min(sal) From emp group by deptno; 4. ,max(sal),min(sal) from emp where job is notnull group by job,deptno; 5. 最低工资及工资的和 select avg(sal),max(sal),min(sal),sum(sal) from emp where job like ‘%MAN%’; 6.
*12 as annual_sal from emp;与select ename,sal*12 "annual sal" from emp;区别,加双引号保持原大小写。 *12 annual_sal from emp where ename not like '_A%' and sal>800 order by sal desc; select sal from emp where sal>888.88 无错.但 select sal from emp where sal>$1,250,00; select ename,sal from emp where sal>(select avg(sal) from emp); 查找每个部门挣钱最多的那个人的名字. from emp where sal not in( select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal)
('factor = ' || factor); DBMS_OUTPUT.PUT_LINE('sal = ' || sal); DBMS_OUTPUT.PUT_LINE('sal_multiple = 12000 factor = 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 16000 2 使用sys_refcursor = 6000 sal_multiple = 12000 factor = 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 12000 factor = 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 16000 3 使用包定义的 = 6000 sal_multiple = 12000 factor = 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple
php class employee{ protected $sal=3000; public function getSal(){ $this->sal = $this->sal + 1200; return $this->sal ; } } class Manager extends employee $this->sal = $this->sal + 1500; return $this->sal ; } } $emp = new employee() > 程序运行结果: 1 PHP 5.2.9 2 5000 3 parent's $sal 3000 打开zend调试状态看看,内存中的情况。注意最下面,有两个$sal 。 > 程序运行结果: 1 PHP 5.2.9 2 3000 将父类的属性$sal 改成 protected ,子类重写了父类的属性。在内存中只有一个 $sal 。 <?
select ename,sal,comm,sal*12+ifnull(comm,0) 年薪 from emp order by 年薪 desc; 显示工资最高的员工的名字和工作岗位 select * from emp where sal=(select max(sal) from emp); 显示工资高于平均工资的员工信息 select * from emp where sal > (select avg(sal) from emp); 显示每个部门的平均工资和最高工资 select deptno, max(sal)最高,format(avg(sal),2) 平均 from emp group sal)<2000; -- select deptno,avg(sal) 平均工资 from emp group by deptno having 平均工资<2000; 显示每种岗位的雇员总数,平均工资 > (select max(sal) from emp where deptno=30); 第二种做法: select * from emp where sal>all(select distinct
‘low sal’))) FROM emp 输出结果 SMITH 800 low sal ALLEN 1600 low sal WARD 1250 low sal JONES 2975 low sal MARTIN 1250 low sal BLAKE 2850 low sal CLARK 2450 low sal SCOTT 3000 mid sal KING 5000 high sal TURNER 1500 low sal ADAMS 1100 low sal JAMES 950 low sal FORD 3000 mid sal MILLER 1300 low sal 4:利用decode实现表或者试图的行列转换 ,SAL,0)) ALLEN, SUM(DECODE(ENAME,’WARD’,SAL,0)) WARD, SUM(DECODE(ENAME,’JONES’,SAL
loop v_sum_sal := v_sum_sal + c.salary; end loop; --dbms_output.put_line ('sum salary: ' || v_sum_sal); return v_sum_sal; end; 执行函数 begin dbms_output.put_line(sum_sal = dept_id; v_sum_sal number(8) := 0; begin total_count := 0; for c in sal_cursor loop v_sum_sal := v_sum_sal + c.salary; total_count := total_count + 1; end loop; --dbms_output.put_line('sum salary: ' || v_sum_sal); return v_sum_sal
SQL>SELECT ename, sal13+nvl(comm,0) year_sal FROM emp; (year_sal为别名,可按别名排序) SQL>SELECT * FROM emp WHERE (sal) from emp; SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp)); SQL>SELEC COUNT(*) FROM BY deptno; SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000 5.3 使用ALL SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30); 或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查询工资比部门号为
(order by e.ename) 连续求和, 5 sum(sal) over() 总和, -- 此处sum(sal) over () 等同于sum(sal) 6 (sal / sum(sal) over(partition by deptno), 4) "部门份额(%)", sum(sal) over(order by deptno, ename) 连续求和, --所有部门的薪水"连续"求和 sum(sal) over() 总和, -- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和 order by sal) dept_sum, sum(sal) over(order by deptno, sal) sum from emp; ? , sal desc ) dept_sum, sum(sal) over(order by deptno desc, sal desc) sum from emp; ?
条件:比平均薪水高,部门号相同 select e.ename,e.sal,e.deptno from emp e join (select deptno,avg(sal) as avgsal ,e.sal from emp e join (select e.ename as ename,e.sal as sal from emp e order by e.sal desc limit 0,1 ) t on e.sal = t.sal; 方式二:使用表的自连接 (1)将emp表自连接,找出 emp a表中所有比 emp b表中薪资小的薪水生成一个结果 select distinct a.sal from emp a join emp b on a.sal < b.sal; (2)再将emp中薪水不在这个结果中薪水找出来就是最高薪资 select e.ename,e.sal from emp e where e.sal not in(select distinct a.sal from emp a join
EMP" set "SAL" = '0' where "EMPNO" = '7369' and "SAL" = '800' and ROWID = 'AAAR3xAAEAAAACXAAA'; update EMP" set "SAL" = '0' where "EMPNO" = '7499' and "SAL" = '1600' and ROWID = 'AAAR3xAAEAAAACXAAB'; update EMP" set "SAL" = '0' where "EMPNO" = '7900' and "SAL" = '950' and ROWID = 'AAAR3xAAEAAAACXAAL'; update EMP" set "SAL" = '800' where "EMPNO" = '7369' and "SAL" = '0' and ROWID = 'AAAR3xAAEAAAACXAAA'; update EMP" set "SAL" = '1300' where "EMPNO" = '7934' and "SAL" = '0' and ROWID = 'AAAR3xAAEAAAACXAAN'; 6.9、
包括1000和2000) select * from emp where sal>=1000 and sal<=2000; select * from emp where sal between 1000 ename,sal,sal*3 from emp; - 别名,可以对查询的字段起别名 select ename as '名字',sal as '工资',sal*3 as '年终奖' from emp; select ename '名字',sal '工资',sal*3 '年终奖' from emp; select ename 名字,sal 工资,sal*3 年终奖 from emp; 查询每个员工姓名 练习题 查询员工表中工资高于2000的员工姓名和工资,按照工资升序排序,查询第二页的2条数据 select ename,sal from emp where sal>2000 order by sal select * from emp where sal in(3000,1500,5000) order by sal; 查询3号部门的工资总和 select sum(sal) from emp
所以不管三七二十一,先写个select avg(sal) from emp再说;然后再分析条件:“部门的平均工资”,说明了条件是需要是哪一个部分的,所以把select avg(sal) from emp 号所代表的语句是:select deptno from emp where sal=(select max(sal) from emp)。 =(select deptno from emp where sal=(select min(sal) from emp)); 那么最终:select * from emp where sal>( where sal=(select max(sal) from emp)) + select avg(sal) from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp)) )/2 ); 由此,最终题便解了。