`
121059457
  • 浏览: 23274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习笔记:11pl/sql基础

阅读更多
11-1:只包含执行部分的pl/sql块
	set serveroutput on
	BEGIN
	  dbms_output.put_line('Hello,everyone!');
	END;
	/
11-2:包含定义部分和执行部分的pl/sql块
	set verify off
	DECLARE
	  v_ename VARCHAR2(5);
	BEGIN
	  SELECT ename INTO v_ename FROM emp
	  WHERE empno=&no;
	  dbms_output.put_line('雇员名:'||v_ename);
	END;
	/

11-3:包含定义部分,执行部分和异常处理部分的pl/sql块
	DECLARE
	  v_ename VARCHAR2(5);
	BEGIN
	  SELECT ename INTO v_ename FROM emp
	  WHERE empno=&no;
	  dbms_output.put_line('雇员名:'||v_ename);
	EXCEPTION
	  WHEN NO_DATA_FOUND THEN
	    dbms_output.put_line('请输入正确的雇员号!');
	END;
	/
11-5:命名块
	<<outer>>
	DECLARE
	  v_deptno NUMBER(2);
	  v_dname  VARCHAR2(10);
	BEGIN
	  <<inner>>
	  BEGIN
	    SELECT deptno INTO v_deptno FROM emp
	    WHERE lower(ename)=lower('&name');
	  END;--<<inner>>
	  SELECT dname INTO v_dname FROM dept
	  WHERE deptno=v_deptno;
	  dbms_output.put_line('部门名:'||v_dname);
	END; -- <<outer>>
	/


11-6:过程
	CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)
	IS
	BEGIN
	  UPDATE emp SET sal=newsal
	  WHERE lower(ename)=lower(name);
	END;
	/
	exec update_sal('scott',2000)
11-7:函数
	CREATE FUNCTION annual_income(name VARCHAR2)
	RETURN NUMBER IS
	  annual_salary NUMBER(7,2);
	BEGIN
	  SELECT sal*12+nvl(comm,0) INTO annual_salary
	  FROM emp WHERE lower(ename)=lower(name);
	  RETURN annual_salary;
	END;
	/
	SELECT annual_income('scott') 年收入 FROM dual;

11-8:包
	CREATE PACKAGE emp_pkg IS
	  PROCEDURE update_sal(name VARCHAR2,newsal NUMBER);
	  FUNCTION annual_income(name VARCHAR2) RETURN NUMBER;
	END;
	/
	CREATE PACKAGE BODY emp_pkg IS
	  PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)
	  IS
	  BEGIN
	    UPDATE emp SET sal=newsal
	    WHERE lower(ename)=lower(name);
	  END;
	  FUNCTION annual_income(name VARCHAR2) RETURN NUMBER
	  IS
	    annual_salary NUMBER(7,2);
	  BEGIN
	    SELECT sal*12+nvl(comm,0) INTO annual_salary
	    FROM emp WHERE lower(ename)=lower(name);
	    RETURN annual_salary;
	  END;
	END;
	/
	exec emp_pkg.update_sal('scott',1500)
	SELECT emp_pkg.annual_income('scott') 年收入 FROM dual;
11-9:触发器
	SELECT ename FROM emp WHERE deptno=10;
	CREATE TRIGGER update_cascade
	AFTER UPDATE OF deptno ON dept
	FOR EACH ROW
	BEGIN
	  UPDATE emp SET deptno=:new.deptno
	  WHERE deptno=:old.deptno;
	END;
	/


11-10:使用标量变量
	DECLARE
	  v_ename VARCHAR2(5);
	  v_sal   NUMBER(6,2);
	  c_tax_rate CONSTANT NUMBER(3,2):=0.03;
	  v_tax_sal NUMBER(6,2);
	BEGIN
	  SELECT ename,sal INTO v_ename,v_sal
	  FROM emp WHERE empno=&eno;
	  v_tax_sal:=v_sal*c_tax_rate;
	  dbms_output.put_line('雇员名:'||v_ename);
	  dbms_output.put_line('雇员工资:'||v_sal);
	  dbms_output.put_line('所得税:'||v_tax_sal);
	END;
	/



11-11:使用%type属性
	DECLARE
	  v_ename emp.ename%TYPE;
	  v_sal  emp.sal%TYPE;
	  c_tax_rate CONSTANT NUMBER(3,2):=0.03;
	  v_tax_sal v_sal%TYPE;
	BEGIN
	  SELECT ename,sal INTO v_ename,v_sal
	  FROM emp WHERE empno=&eno;
	  v_tax_sal:=v_sal*c_tax_rate;
	  dbms_output.put_line('雇员名:'||v_ename);
	  dbms_output.put_line('雇员工资:'||v_sal);
	  dbms_output.put_line('所得税:'||v_tax_sal);
	END;
	/



11-12:pl/sql纪录
	DECLARE
	  TYPE emp_record_type IS RECORD (
	    name   emp.ename%TYPE,
	    salary emp.sal%TYPE,
	    title  emp.job%TYPE);
	  emp_record emp_record_type;
	BEGIN
	  SELECT ename,sal,job INTO emp_record
	  FROM emp WHERE empno=&eno;
	  dbms_output.put_line('姓名:'||emp_record.name);
	  dbms_output.put_line('工资:'||emp_record.salary);
	  dbms_output.put_line('岗位:'||emp_record.title);
	END;
	/
11-13:pl/sql表
	DECLARE
	  TYPE ename_table_type IS TABLE OF emp.ename%TYPE
	    INDEX BY BINARY_INTEGER;
	  ename_table ename_table_type;
	BEGIN
	  SELECT ename INTO ename_table(-1) FROM emp
	  WHERE empno=&eno;
	  dbms_output.put_line('雇员名:'||ename_table(-1));
	END;
	/
11-14:嵌套表
	CREATE OR REPLACE TYPE emp_type AS OBJECT(
	  name VARCHAR2(10),salary NUMBER(6,2),hiredate DATE);
	/
	 CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;
	/
	CREATE TABLE department(
	  deptno NUMBER(2),dname VARCHAR2(10),employee emp_array
	) NESTED TABLE employee STORE AS employee;
11-15:varray
	CREATE TYPE article_type AS OBJECT (
	  title VARCHAR2(30),pubdate DATE);
	/
	CREATE TYPE article_array IS VARRAY(20) OF article_type;
	/
	CREATE TABLE author(
	  id NUMBER(6),name VARCHAR2(10),article article_array
	);





11-16:ref cursor
	DECLARE
	  TYPE c1 IS REF CURSOR;
	  dyn_cursor c1;
	  col1 VARCHAR2(20);
	  col2 VARCHAR2(20);
	BEGIN
	  OPEN dyn_cursor FOR SELECT &col1,&col2 FROM &tab WHERE &con;
	  FETCH dyn_cursor INTO col1,col2;
	  dbms_output.put_line('col1:  '||col1);
	  dbms_output.put_line('col2:  '||col2);
	  CLOSE dyn_cursor;
	END;
	/


11-18:使用之类型定义标量
	DECLARE
	  SUBTYPE my_type IS VARCHAR2(20);
	  v_name my_type(10);
	BEGIN
	  SELECT ename INTO v_name FROM emp
	  WHERE empno=&eno;
	  dbms_output.put_line('姓名:'||v_name);
	END;
	/


11-20:在pl/sql表达式中使用序列
DECLARE
  v1 INT;
  v2 INT;
BEGIN
  v1:=empno_seq.currval;
  v2:=empno_seq.nextval;
  DBMS_OUTPUT.PUT_LINE('v1='||v1);
  DBMS_OUTPUT.PUT_LINE('v2='||v2);
END;
/















































分享到:
评论

相关推荐

    pl/sql学习笔记

    以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。

    pl/sql数据库学习笔记

    PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...

    PL/SQL学习教程,附笔记

    在本教程中,我们将深入探讨PL/SQL的基础知识,包括其与SQL的关系、程序设计的基本结构和组成元素。 ### SQL与PL/SQL SQL(Structured Query Language)是用于管理关系数据库的标准语言,主要负责数据查询、更新和...

    ORACLE PL/SQL从入门到精通

    PL/SQL变量的声明和使用是编程的基础,涉及到变量的声明、初始化、数据类型、%type属性等。变量的赋值和使用也是需要掌握的内容。 此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型...

    PL/SQL学习笔记4

    ### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...

    我的PL/SQL学习笔记(一)

    在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...

    PL/SQl超级笔记

    总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...

    PL/SQL听课笔记

    ### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL...通过以上内容的学习,初学者可以从基础语法入手,逐步掌握PL/SQL的核心概念和技术细节,并通过实践应用不断提升自己的技能水平。

    PL/SQL学习笔记6

    在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...

    PL/SQL文本文档

    这些知识点涵盖了PL/SQL的基础和进阶概念,是理解并使用PL/SQL进行数据库编程的关键。通过深入学习和实践,你可以创建高效、可靠的数据库应用程序。如果你对“PLSQL”标签下的笔记内容感兴趣,可以深入研究这两个...

    oracle笔记 (PL-SQL)

    Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...

    PL/SQL学习笔记7

    在PL/SQL编程中,存储过程和函数是关键的组件,它们允许我们将可重用的代码逻辑存储在数据库中,以便于管理和调用。本文主要探讨了存储过程、函数以及程序包的概念,特点,创建方法,执行方式,权限管理以及参数处理...

    pl/sql学习小结笔记

    以下是对PL/SQL的基础知识进行的详细阐述: 1. **匿名块与命名块**: - **匿名块**:在PL/SQL中,匿名块是一段未命名的代码块,它不能被其他程序调用,常用于临时的测试和调试。声明局部变量后,可以在BEGIN和END...

    oracle/SQL和PL/SQL课堂笔记

    这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于指定需要选取的列,如`SELECT ename, sal, job FROM emp;`。字段顺序可以自由调整,例如`...

    Oracle PL SQL Programming 第五版-带书签目录超清文字版

    1. **PL/SQL基础知识**:介绍PL/SQL的基本语法,包括变量声明、常量定义、数据类型、运算符、控制结构(如IF-THEN-ELSIF、CASE、循环)以及异常处理机制。 2. **PL/SQL块结构**:讲解如何构建声明部分、执行部分和...

Global site tag (gtag.js) - Google Analytics