-
-- 系统例外:too_many_rows set serveroutput on declare pename emp.ename%type; begin -- 查询所有10号部门的员工姓名 select ename into pename from emp where deptno=10; exception when too_many_rows then dbms_output.put_line("select into 匹配了多行"); when others then dbms_output.put_line("其他例外"); end; /查看全部
-
set serveroutput on declare pename emp.ename%type; begin -- 查询员工号是1234的员工姓名 select ename into pename from emp where empno=1234; exception when no_data_found then dbms_output.put_line("没有找到该员工"); when others then dbms_output.put_line("其他例外"); end; /查看全部
-
例外(Exception) 是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。 1. 系统例外 No_data_found (没有找到数据) Too_many_rows (select ...into 语句匹配多个行) Zero_Divide (被零除) Value_error (算术或转换错误) Timeout_on_resource (在等待资源时发生超时)查看全部
-
-- 查询某个部门中员工的姓名 set serveroutput on declare -- 定义带参数的光标,形参 cursor cemp(dno number) is select ename from emp where deptno=dno; pename emp.ename%type; begin open cemp(10); -- 传入实参 loop fetch cemp into pename; exit when cemp%nofound; dbms_output.put_line(pename); end loop; close cemp; end; /查看全部
-
/* 1. 光标的属性 %found %notfound %isopen; 判断光标是否打开 true / false %rowcount; 影响的行数 2. 光标数的限制:默认情况下,Oracle数据库只允许在同一个回话中,打开300个光标 -- 切换到管理员 show user conn sys/password@192.168.56.101:1521/orcl as sysdba show parameter -- 做的是模糊查询 show parameter cursor -- 修改光标数的限制 alter system set open_cursors=400 scope=both; scope的取值:both、memory(只更改当前实例,不更改参数文件)、spfile(只更改参数文件,不更改当前实例,数据库需要重启才会生效) */ set serveroutput on declare cursor cemp is select empno,empjob from emp; pempno emp.empno%type; pjob emp.empjob%type; begin open cemp; if cemp%isopen then dbms_output.put_line('光标已经打开'); else dbms_output.put_line('光标没有打开'); end if; loop fetch cemp into pempno,pjob; exit when cemp%nofound; dbms_output.put_line('rowcount:'||cemp%rowcount); end loop; close cemp; end; /查看全部
-
-- 给员工涨工资,总裁1000,经理800,其他400 set serveroutput on; declare -- 定义光标代表给哪些员工涨工资 -- alter table "SCOTT"."EMP" rename column "JOB" to empjob cursor cemp is select empno,empjob from emp; pempno emp.empno%type; pjob emp.empjob%type; begin rollback; -- 打开光标 open cemp; loop -- 取出一个员工 fetch cemp into pempno,pjob; exit while cemp%notfound; -- 判断员工的职位 if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pempno; elseif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno; else update emp set sal=sal+400 where empno=pempno; end if; end loop; -- 关闭光标 close cemp; -- 对于Oracle,默认的事务隔离级别是 read committed -- 事务的ACID:原子性、一致性、隔离性、持久性 commit; dbms_output.put_line("涨工资完成"); end; /查看全部
-
-- 一个具体的光标 /* 光标的属性 1. %found 2. %notfound */ cursor c1 is select ename from emp; -- 从光标中取值 open c1; (打开光标执行查询) -- 取一行光标的值: fetch c1 into pename; (取一行到变量中) fetch的作用: 1. 把当前指针指向的记录返回 2. 将指针指向下一条记录 -- 关闭光标 close c1; (关闭游标释放资源) -- 查询并打印员工的姓名和薪水 set serveroutput on declare -- 定义一个光标 cursor cemp is select ename,sal from emp; -- 为光标定义对应的变量 pename emp.ename%type; psal emp.sal%type; begin -- 打开光标 open cemp; loop -- 取一条记录 fetch cemp into pename,psal; -- into后面的顺序应与上面的select...一致 exit when cemp%notfound ; -- 打印结果 dbms_output.put_line(pename||'的薪水是'||psal); end loop; -- 关闭光标 close cemp; end; /查看全部
-
-- PL/SQL 对大小写不敏感 -- 使用while循环打印数字的1~10 set serveroutput on declare -- 定义循环变量 pnum number:= 1; begin while pnum <= 10 loop -- 循环体 dbms_output.put_line(pnum); -- 使该变量 +1 ,在PL/SQL中 不能使用 ++ pnum := pnum + 1; end loop; end; / -- 使用loop循环打印1~10 set serveroutput on declare -- 定义循环变量 pnum number := 1; begin loop -- 退出条件:循环变量大于10 exit when pnum > 10; -- 打印该变量的值 dbms_output.put_line(pnum); pnum := pnum + 1; end loop; end; / -- 循环区间: 1..100 --> 取值: 从 1 到 100 -- 使用for循环打印1~10 set serveroutput on declare -- 定义循环变量 pnum number := 1; begin for pnum in 1..10 loop dbms_ouput.put_line(pnum); end loop; end; /查看全部
-
/* 判断用户从键盘输入的数字 1. 如何使用if语句 2. 接受一个键盘输入(都是字符串) */ set serveroutput on -- 接受一个键盘输入 -- num: 是一个地址值:含义是:在该地址上保存了输入的值 accept num prompt '请输入一个数字'; declare -- 定义变量保存用户从键盘输入的数字 pnum number:=# begin -- 执行if语句进行条件判断 if pnum = 0 then dbms_output.put_line('您输入数字是0'); elseif pnum = 1 then dbms_output.put_line('您输入的是1'); elseif pnum = 2 then dbms_output.put_line('您输入的是2'); else dbms_output.put_line('其他数字'); end if; end; /查看全部
-
引用型变量: 举例: my_name emp.ename%type; --引用emp表中ename列的数据类型作为my_name的变量类型 -- 引用型变量 set serveroutput on declare -- 定义引用型变量:查询并打印7839的姓名和薪水 -- pename varchar2(20); -- psal number; pename emp.ename%type; psal emp.sal%type; begin -- 得到7839的姓名和薪水 select ename,sal into pename,psal from emp where empno=7839; -- select后的顺序 与 into 后面的应保持一致 dbms_output.put_line(pename||'的薪水是'||psal); end; / 记录型变量: -- 表中一行的类型,可以理解成数组 举例: emp_rec emp%rowtype; 记录型变量分量的引用: emp_rec.ename:='ADAMS'; -- 使用记录型变量,查询并打印7839的姓名和薪水 set serveroutput on declare -- 定义记录型变量:注意代表一行 emp_rec emp%rowtype; begin -- 得到7839一行的信息 select * into emp_rec from emp where empno=7839; -- 打印姓名和薪水 dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal); end; /查看全部
-
PL/SQL的程序结构 declare 说明部分 (变量说明、光标申明、例外说明) 定义基本变量或常量 类型:char,varchar2,date,number,boolean,long 例: pname varchar2(20); pdate date; married boolean := true; -- 赋值 := pnumber number(7,2); begin 语句序列 (DML语句) pnumber:=1; dbms_output.put_line(pnumber); pname:='Tom'; dbms_output.put_line(pname); pdate:=sysdate; dbms_output.put_line(pdate); exception 例外处理语句 end; /查看全部
-
1. PL/SQL 是S对QL语言的扩展 2. PL/SQL 是面向过程的语言(循环等) 不同数据库的SQL扩展 Orable:PL/SQL DB2:SQL/PL SQL Server:Transac-SQL(T-SQL)查看全部
-
-- 打印 Hello Word declare -- 说明部分(变量,光标或者例外)(如果没有说明部分,“declare”可以不写) begin -- 程序体 dbms_output.put_line('Hello World'); end; -- 表示结束 / -- 表示退出这个编辑环境并且执行这个PL/SQL程序(此程序没有语法错误) -- 打开输出开关 set serveroutput on / -- 查看程序包的结构 desc dbms_output查看全部
-
光标的属性 %found %notfound查看全部
-
fetch的作用查看全部
举报
0/150
提交
取消