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的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
PL/SQL变量的声明和使用是编程的基础,涉及到变量的声明、初始化、数据类型、%type属性等。变量的赋值和使用也是需要掌握的内容。 此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型...
在本教程中,我们将深入探讨PL/SQL的基础知识,包括其与SQL的关系、程序设计的基本结构和组成元素。 ### SQL与PL/SQL SQL(Structured Query Language)是用于管理关系数据库的标准语言,主要负责数据查询、更新和...
### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL...通过以上内容的学习,初学者可以从基础语法入手,逐步掌握PL/SQL的核心概念和技术细节,并通过实践应用不断提升自己的技能水平。
在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...
这些知识点涵盖了PL/SQL的基础和进阶概念,是理解并使用PL/SQL进行数据库编程的关键。通过深入学习和实践,你可以创建高效、可靠的数据库应用程序。如果你对“PLSQL”标签下的笔记内容感兴趣,可以深入研究这两个...
Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...
在PL/SQL编程中,存储过程和函数是关键的组件,它们允许我们将可重用的代码逻辑存储在数据库中,以便于管理和调用。本文主要探讨了存储过程、函数以及程序包的概念,特点,创建方法,执行方式,权限管理以及参数处理...
以下是对PL/SQL的基础知识进行的详细阐述: 1. **匿名块与命名块**: - **匿名块**:在PL/SQL中,匿名块是一段未命名的代码块,它不能被其他程序调用,常用于临时的测试和调试。声明局部变量后,可以在BEGIN和END...
这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于指定需要选取的列,如`SELECT ename, sal, job FROM emp;`。字段顺序可以自由调整,例如`...
1. **PL/SQL基础知识**:介绍PL/SQL的基本语法,包括变量声明、常量定义、数据类型、运算符、控制结构(如IF-THEN-ELSIF、CASE、循环)以及异常处理机制。 2. **PL/SQL块结构**:讲解如何构建声明部分、执行部分和...