先申明我不是牛X,所有有错的地方,希望广大读友能提醒俺一下!
1.两个常用异常处理
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
BEGIN
v_empno:=&请输入工号
SELECT ename INTO v_ename
FROM emp e WHERE e.empno!=v_empno;
dbms_output.put_line(v_ename);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('没有数据!');
WHEN too_many_rows THEN
dbms_output.put_line('行太多!');
END;
2.return使用,隐式游标。自动,用于返回单行结果集
注意:经俺亲手测试,boolean不能打印输出!
DECLARE
v_new_sal emp.sal%TYPE;
BEGIN
UPDATE emp e SET sal=sal+1000
WHERE e.empno=7788
RETURN sal INTO v_new_sal;
IF(v_new_sal>=8888)THEN
ROLLBACK;
raise_application_error(-20009,'需要请示!');
END IF;
COMMIT;
IF(SQL%ISOPEN)THEN
dbms_output.put_line('ok!');
ELSE
dbms_output.put_line('not ok!');
END IF;
END;
3.获取指定员工信息(是通过先做判断数据是否存在,后在查询)
DECLARE
v_empno emp.empno%TYPE;
v_row emp%ROWTYPE;
v_count NUMBER(1);
BEGIN
v_empno:=&请输入工号;
SELECT COUNT(*) INTO v_count
FROM emp WHERE empno=v_empno;
IF(v_count=1)THEN --先判断
SELECT * INTO v_row FROM emp e
WHERE e.empno=v_empno;
dbms_output.put_line(v_row.ename||','||v_row.sal);
ELSE
NULL;
END IF;
END;
4.游标for循环(重点)需要对查询中的每条记录逐一处理时
例子:输出员工不为7566的信息
BEGIN
FOR s IN (SELECT * FROM emp WHERE empno!=7566)
LOOP
dbms_output.put_line(s.empno||','||s.ename||','||s.sal);
END LOOP;
END;
5.显示游标,使用cursor游标对象
技巧:dofw [declare-open-fetch-while] (重点)
1)使用cursor游标对象步骤:
①定义游标 declare cursor游标对象名 is (SQL); •
②定义行变量 行变量游标对象名%ROWTYPE;
③打开游标 open游标对象名;
④循环游标 fetch 游标对象名 into 行变量;
while(游标对象名%found)
loop...end loop;
⑤关闭游标 close;
2)示例:打印各部门信息
DECLARE
CURSOR my_cur IS (SELECT * FROM dept);
my_row my_cur%ROWTYPE;
BEGIN
OPEN my_cur;
FETCH my_cur INTO my_row; --先获取数据后游标下移
WHILE(my_cur%FOUND)
LOOP
dbms_output.put_line(my_row.deptno||','||my_row.dname);
FETCH my_cur INTO my_row;
END LOOP;
CLOSE my_cur;
END;
6.在PL/SQL里执行字符串操作
1)execute语句 execute immediate'DDL语句'/ 'select语句'into变量
示例:创建一张表t_53
DECLARE
v_sql varchar2(4000); --在PL/SQL操作列时,数值的长度<=4000byte
BEGIN
v_sql:='create table t_53 (t_id number(2))';
EXECUTE IMMEDIATE v_sql;
END;
2)执行多行查询(open..for)
①游标变量(游标变量也是变量)
②变量需要定义类型
③类型需要自定义
示例:查询工资大于3000的所有员工编号与名字
DECLARE
TYPE my_cur_type IS REF CURSOR; --类型需要自定义,这里的类型是引用游标
my_cur_var my_cur_type; --变量需要类型
my_row emp%ROWTYPE;
BEGIN
OPEN my_cur_var FOR 'select * from emp where sal>=3000'; --游标变量也是变量
FETCH my_cur_var INTO my_row; --后面与显示游标相同
WHILE(my_cur_var%FOUND)
LOOP
dbms_output.put_line(my_row.empno||','||my_row.ename);
FETCH my_cur_var INTO my_row;
END LOOP;
CLOSE my_cur_var;
END;
分享到:
相关推荐
手册会介绍如何在PL/SQL块中使用DML语句,并处理事务管理。 5. **游标**:游标是PL/SQL中处理单行结果集的关键工具。手册将说明如何声明、打开、读取和关闭游标,以及如何在循环中使用它们。 6. **复合类型**:PL/...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
- 视图(VIEW):在PL/SQL中使用视图进行数据抽象。 -索引组织表(IOT)、物化视图(Materialized View):与PL/SQL结合使用的高级表结构。 9. **PL/SQL在实际项目中的应用**: - 应用服务器和客户端交互:理解...
以下示例演示了如何在INSERT语句中使用RETURNING子句来检索刚插入的记录的ROWID和相关信息: ```sql DECLARE Row_id ROWID; info VARCHAR2(40); BEGIN INSERT INTO scott.dept VALUES (90, '财务室', '海口') ...
教材会介绍如何声明、打开、提取和关闭游标,以及如何在循环中使用游标遍历结果集。 5. **记录和表操作**:PL/SQL提供了内置的DML(数据操纵语言)语句,如INSERT、UPDATE、DELETE,可以直接在PL/SQL块中操作数据库...
7. **数据库操作**:PL/SQL可以直接与Oracle数据库交互,执行DML(插入、更新、删除)和DDL(创建、修改、删除表等)操作,还可以调用存储过程和函数。 8. **包(PACKAGE)**:是PL/SQL中一种高级组织形式,它可以...
PL/SQL中的DML包括INSERT、UPDATE、DELETE等语句,用于对数据表进行增删改操作。 9. **TCL(Transaction Control Language)操作** PL/SQL支持事务控制,如COMMIT、ROLLBACK等,确保数据的一致性和完整性。 10. ...
4. **游标**:游标是PL/SQL中处理单行或多行结果集的关键工具。通过游标,程序员可以逐行处理查询结果,进行更新、插入或删除操作。 5. **异常处理**:Oracle PL/SQL提供了丰富的异常处理机制,使得程序能够优雅地...
PL/SQL还支持匿名块游标,也称为块内游标,它是在没有声明游标变量的情况下直接在PL/SQL块中使用的。例如: ```sql BEGIN FOR emp_rec IN (SELECT first_name, last_name FROM employees WHERE department_id = ...
在PL/SQL中使用SQL语句时,分为DML语句(如INSERT、UPDATE、DELETE)和DDL语句(如CREATE、ALTER、DROP),以及事务控制语句(如COMMIT和ROLLBACK)。这些语句用于操作数据库的数据和结构。 PL/SQL中的SELECT语句...
3. **数据库操作**:PL/SQL可以直接在SQL语句中执行DML(数据操纵语言)操作,如INSERT、UPDATE、DELETE,以及DDL(数据定义语言)操作,如CREATE、ALTER和DROP。 4. **存储过程和函数**:PL/SQL允许创建在数据库...
在PL/SQL中使用SELECT时,语法略有不同,通常需要指定变量接收查询结果,如`SELECT ... INTO ... FROM ... WHERE ...`。 总之,PL/SQL是Oracle数据库开发中的核心组件,它扩展了SQL的能力,提供了更强大的数据库...
在文件内容中,对于单行记录的插入操作,PL/SQL会提供语法结构,允许用户直接在DML语句中使用变量。对于多行结果的处理,必须使用游标来逐条获取数据。这在文件内容中也有体现,例如在SELECT INTO语句中如果存在多行...
在这个实例精讲中,你将学习如何使用PL/SQL进行数据操作,创建存储过程和函数,以及如何有效地处理错误和事务。通过对"student"数据库模式的实践,你将掌握Oracle数据库管理和应用程序开发的核心技能。通过不断练习...
当执行DML语句时,PL/SQL会打开一个内建游标,通过游标,程序可以逐行处理查询结果,控制流程并检查状态。游标对于迭代处理和基于条件的处理非常有效。 异常处理是PL/SQL的一个独特之处。它采用预定义的异常和...
游标变量是PL/SQL中的一个特殊变量,可以直接绑定到一个SQL查询,用于在程序中遍历查询结果。REF CURSOR是引用类型,通常用在存储过程和函数中,返回一个可迭代的结果集。 学习PL/SQL开发,不仅需要掌握上述基础...
1. **声明部分**:在PL/SQL块的开始,你可以声明变量、常量、游标、记录类型等。例如: ```sql DECLARE var1 NUMBER; var2 VARCHAR2(20); ``` 2. **执行部分**:这是PL/SQL的主要部分,包含一系列的SQL语句和...
显式游标提供了更高级的功能,比如在循环中使用FOR游标,可以简化遍历结果集的代码。此外,我们还可以使用游标更新数据,这意味着在获取某行记录后,可以直接对该行进行修改,然后通过UPDATE语句将更改提交回数据库...
标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...
6. **游标**:在PL/SQL中,游标用于处理查询结果集,允许你逐行处理数据,这对于迭代处理大数据集非常有用。 7. **异常处理**:了解如何使用BEGIN...EXCEPTION...END结构捕获和处理运行时错误,提升程序的健壮性。 ...