`
Vksnail
  • 浏览: 43512 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

PL/SQL中使用DML、游标、动态SQL

SQL 
阅读更多

先申明我不是牛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最新中文手册

    手册会介绍如何在PL/SQL块中使用DML语句,并处理事务管理。 5. **游标**:游标是PL/SQL中处理单行结果集的关键工具。手册将说明如何声明、打开、读取和关闭游标,以及如何在循环中使用它们。 6. **复合类型**:PL/...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

    pl/sql 学习资料

    - 视图(VIEW):在PL/SQL中使用视图进行数据抽象。 -索引组织表(IOT)、物化视图(Materialized View):与PL/SQL结合使用的高级表结构。 9. **PL/SQL在实际项目中的应用**: - 应用服务器和客户端交互:理解...

    PL/SQL编程基础知识

    以下示例演示了如何在INSERT语句中使用RETURNING子句来检索刚插入的记录的ROWID和相关信息: ```sql DECLARE Row_id ROWID; info VARCHAR2(40); BEGIN INSERT INTO scott.dept VALUES (90, '财务室', '海口') ...

    Oracle PL/SQL学习官方教材

    教材会介绍如何声明、打开、提取和关闭游标,以及如何在循环中使用游标遍历结果集。 5. **记录和表操作**:PL/SQL提供了内置的DML(数据操纵语言)语句,如INSERT、UPDATE、DELETE,可以直接在PL/SQL块中操作数据库...

    PL/SQL中文帮助手册

    7. **数据库操作**:PL/SQL可以直接与Oracle数据库交互,执行DML(插入、更新、删除)和DDL(创建、修改、删除表等)操作,还可以调用存储过程和函数。 8. **包(PACKAGE)**:是PL/SQL中一种高级组织形式,它可以...

    PL/SQL教程 总共6个ppt

    PL/SQL中的DML包括INSERT、UPDATE、DELETE等语句,用于对数据表进行增删改操作。 9. **TCL(Transaction Control Language)操作** PL/SQL支持事务控制,如COMMIT、ROLLBACK等,确保数据的一致性和完整性。 10. ...

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    4. **游标**:游标是PL/SQL中处理单行或多行结果集的关键工具。通过游标,程序员可以逐行处理查询结果,进行更新、插入或删除操作。 5. **异常处理**:Oracle PL/SQL提供了丰富的异常处理机制,使得程序能够优雅地...

    PL/SQL中用到的几种不同类型的游标写法(转)

    PL/SQL还支持匿名块游标,也称为块内游标,它是在没有声明游标变量的情况下直接在PL/SQL块中使用的。例如: ```sql BEGIN FOR emp_rec IN (SELECT first_name, last_name FROM employees WHERE department_id = ...

    PL/SQL学习笔记

    在PL/SQL中使用SQL语句时,分为DML语句(如INSERT、UPDATE、DELETE)和DDL语句(如CREATE、ALTER、DROP),以及事务控制语句(如COMMIT和ROLLBACK)。这些语句用于操作数据库的数据和结构。 PL/SQL中的SELECT语句...

    PL/SQL免安装版

    3. **数据库操作**:PL/SQL可以直接在SQL语句中执行DML(数据操纵语言)操作,如INSERT、UPDATE、DELETE,以及DDL(数据定义语言)操作,如CREATE、ALTER和DROP。 4. **存储过程和函数**:PL/SQL允许创建在数据库...

    PL/SQL教学课件PPT,非常详细

    在PL/SQL中使用SELECT时,语法略有不同,通常需要指定变量接收查询结果,如`SELECT ... INTO ... FROM ... WHERE ...`。 总之,PL/SQL是Oracle数据库开发中的核心组件,它扩展了SQL的能力,提供了更强大的数据库...

    第九讲 PL/SQL语言对数据库的交互作用.pdf

    在文件内容中,对于单行记录的插入操作,PL/SQL会提供语法结构,允许用户直接在DML语句中使用变量。对于多行结果的处理,必须使用游标来逐条获取数据。这在文件内容中也有体现,例如在SELECT INTO语句中如果存在多行...

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    在这个实例精讲中,你将学习如何使用PL/SQL进行数据操作,创建存储过程和函数,以及如何有效地处理错误和事务。通过对"student"数据库模式的实践,你将掌握Oracle数据库管理和应用程序开发的核心技能。通过不断练习...

    Oracle PL/SQL语言初级教程

    当执行DML语句时,PL/SQL会打开一个内建游标,通过游标,程序可以逐行处理查询结果,控制流程并检查状态。游标对于迭代处理和基于条件的处理非常有效。 异常处理是PL/SQL的一个独特之处。它采用预定义的异常和...

    pl/sql开发

    游标变量是PL/SQL中的一个特殊变量,可以直接绑定到一个SQL查询,用于在程序中遍历查询结果。REF CURSOR是引用类型,通常用在存储过程和函数中,返回一个可迭代的结果集。 学习PL/SQL开发,不仅需要掌握上述基础...

    PL/SQL语法帮助

    1. **声明部分**:在PL/SQL块的开始,你可以声明变量、常量、游标、记录类型等。例如: ```sql DECLARE var1 NUMBER; var2 VARCHAR2(20); ``` 2. **执行部分**:这是PL/SQL的主要部分,包含一系列的SQL语句和...

    PL/SQL教程2 总共6个ppt

    显式游标提供了更高级的功能,比如在循环中使用FOR游标,可以简化遍历结果集的代码。此外,我们还可以使用游标更新数据,这意味着在获取某行记录后,可以直接对该行进行修改,然后通过UPDATE语句将更改提交回数据库...

    基本SQL语句及PL/SQL语句

    标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...

    oracle数据库 sql 和pl/sql实例教程

    6. **游标**:在PL/SQL中,游标用于处理查询结果集,允许你逐行处理数据,这对于迭代处理大数据集非常有用。 7. **异常处理**:了解如何使用BEGIN...EXCEPTION...END结构捕获和处理运行时错误,提升程序的健壮性。 ...

Global site tag (gtag.js) - Google Analytics