资讯动态

plsql笔记(判断)

发布时间:2026/8/25 12:08:13 来源:尧图企业网站定制
---------------------------------------------------------------------------程序块中使用 DML 语句可以再加一个关键词returning 列名1,列名2.... into 变量1,变量2......--将 DML 语句 影响的列的值 返回交给变量--------还是只能处理单行数据---------returning 就是能得到返回值 可以不写语法declarebeginDML语句 returning 列名1,列名2.... into 变量1,变量2...... ;end;应用在 insert 语句中例题 向emp表中插入一行数据declareV_ename emp.ename%type;begininsert into emp(empno,ename)values(9999,秦月) returning ename into V_ename;dbms_output.put_line(V_ename);end;select * from emp----在 insert 语句中 returning 是 将 插入的值交给变量declareV_ename emp.ename%type;v_empno number;begininsert into emp(empno,ename)values(9999,秦月) returning ename,empno into V_ename,v_empno;dbms_output.put_line(V_ename||v_empno);end;declareV_ename emp.ename%type;v_empno number;v_sal number;V_job varchar2(20);begininsert into emp(empno,ename)values(9999,秦月)returning ename,empno,sal,job into V_ename,v_empno,V_sal,V_job;dbms_output.put_line(V_ename||v_empno||V_sal||V_job);end;delete 语句 使用 returning intodeclareV_ename varchar2(20);begindelete from emp where empno8888 returning ename into V_ename;dbms_output.put_line(V_ename);end;select * from emp---- 当 delete 的时候 returning 是将删除的数据 交给变量update ----- 注意 只能修改一行数据declareV_sal number;beginupdate emp set sal2 where empno6666 returning sal into V_sal;dbms_output.put_line(V_sal);end;----update returning 得到的是修改后的值-----------------------------------------------------------DDL 语句在程序块中的使用-----可以通过 动态 sql 来实现 DDL 语句动态 sql 是将 sql语句用 单引号包裹 交给变量语法declare变量名 varchar2(300); ------------------1. 声明变量.....begin变量名 : sql语句; --------------------2. 给变量赋值 --定义动态sql------------sql语句 必须是能执行的sql语句交给变量execute immediate 变量名 --------------------3. 立即执行 动态sql[ into 变量1,变量2 .... ]; ----将执行的结果 交给变量end;例题 利用 动态sql 实现 drop 删除表declarev_sql varchar2(400); ------------------1. 声明变量beginV_sql : drop table emp2; -------------2. 定义动态sqlexecute immediate V_sql ; --------------3. 立即执行动态sqlend;select * from emp2练习 用动态sql 实现创建 表declareV_sql varchar2(500);beginV_sql :create table zy972(zno number,zname varchar2(30));execute immediate V_sql;end;create table zy972(zno number,zname varchar2(30))select * from zy972declareV_sql varchar2(500);beginV_sql :c||reate || table zy973(zno number,zname varchar2(30));execute immediate V_sql;end;create table zy973(zno number,zname varchar2(30))------------------------------------------------------------例题 传入一个表名 输出该表的记录数declareV_table varchar2(20):请输入;V_count number;V_sql varchar2(500); ---------------------1beginV_sql : select count(1) from ||v_table; ----------2dbms_output.put_line(V_sql);execute immediate V_sql into V_count; -------------3dbms_output.put_line(V_count);end;------------------------------------------------------------------------------*************************************************************************************************************************************************************************************判断----核心if判断 -----分支判断语法declarebeginif 条件1.............. ----判断的开始then 结果1 -----------------------------满足条件1 要执行的结果1elsif 条件2............then 结果2 -----------------------------满足条件2 要执行的结果2elsif 条件3............then 结果3 -----------------------------满足条件3 要执行的结果3elsif 条件4............then 结果4 -----------------------------满足条件4 要执行的结果4...............................................[else 其他结果] ----当没有满足以上所有条件 要执行的结果end if ; -----判断的结束end;-----注意 当满足了其中一个条件 就要执行对应的结果 然后执行 end if 结束判断例题 传入一个数值 判断数值的大小 如果 1-10 则输出 小于等于1011-20 小于等于20.......................declaren number:请输入;beginif n between 1 and 10thendbms_output.put_line(小于等于10);elsif n between 11 and 20thendbms_output.put_line(小于等于20);elsif n between 21 and 30thendbms_output.put_line(小于等于30);elsedbms_output.put_line(大于30);end if;end;练习 1. 传入一个员工编号 如果该员工的工资在 1-1000 则打印输出小于等于10001001-2000 小于等于20002001-3000.......................declareV_empno number:请输入;V_sal number;beginselect sal into V_sal from emp where empnoV_empno;if v_sal between 1 and 1000thendbms_output.put_line(小于等于1000);elsif v_sal between 1001 and 2000thendbms_output.put_line(小于等于2000);elsedbms_output.put_line(大于2000);end if ;end;declareV_sal emp.sal%type;V_empno emp.empno%type : 员工编号;beginselect sal into V_sal from emp where empnoV_empno;if V_sal between 1 and 1000then dbms_output.put_line(小于等于1000);elsif V_sal between 1001 and 2000then dbms_output.put_line(小于等于2000);elsedbms_output.put_line(大于2000);end if;end;练习传入一个员工编号 如果该员工的工资 高于所在部门的平均工资 则降薪 200 --update工资 小于所在部门的平均工资 则涨薪 200 --update否则 薪资 不变--update并且 打印输出 涨薪前 后的薪资declarev_empno number:请输入;V_sal number;V_deptno number;V_avg number;V_sal1 number;beginselect sal ,deptno into V_sal,V_deptno from emp where empnoV_empno;select avg(sal) into V_avg from emp where deptno v_deptno;if V_salv_avg thenupdate emp set sal sal-200 where empnoV_empno returning sal into V_sal1;elsif V_salv_avg thenupdate emp set salsal200 where empnoV_empno returning sal into V_sal1;elseupdate emp set salsal where empnov_empno returning sal into V_sal1;end if ;dbms_output.put_line(V_sal||V_sal1);end;------------------------------------------------------

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价