SQL练习语句 下载本文

内容发布更新时间 : 2024/12/25 9:32:25星期一 下面是文章的全部内容请认真阅读。

PL/SQL(Procedural Language/SQL)是Oracle在标准SQL语言上的过程性扩展。 SQL(Structure Query Language) 结构化查询语言,是应用程序与数据库进行交互操作的接口。将数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能集于一体。

SQL的特点:字符值和日期值区分大小写。当在SQL语句中引用字符值和日期值时,需要给出正确的大小写数据,否则不能返回正确的信息。

PL/SQL的例子,如果应用程序需要取得雇员的工资,那么可以建立函数实现改功能。Eg:

CREATE FUNCTION get_sal(no NUMBER) RETRUN NUMBER IS

Salary NUMBER(6,2) BEGIN

SELECT sal INTO salary FROM emp WHERE empno=no; RETURN salary; END; /

DECLARE

name varchar2(10); BEGIN

SELECT ename INTO name FROM emp WHERE empno=&no; Dbms_output.put_line(name); EXCEPTION

WHEN NO_DATA_FOUND THEN

dbms_output.put_line(‘该雇员不存在’); END; /

PL/SQL三种使用工具的介绍 第一种:sqlplus工具

Sqlplus [username]/[password][@server]

其中username用于指定数据库用户名,password用于指定用户口令,而server则用于指定主机字符串(网络服务名)。当链接到本地数据库时,不需要提供网络服务名。 PL/SQL块由三部分组成:定义部分、执行部分、例外处理部分。其中定义部分用于定义常量、变量、游标、例外、复杂数据类型等;执行部分用于实现应用模块功能,该部分包含了要执行的PL/SQL语句和SQL语句;例外处理部分用于处理执行部分可能出现的运行错误。

DECLARE 该部分是可选的; /* */

BEGIN 该部分是必须的; /* */

EXCEPTION 该部分是可选的 /* */ END;

实例一:只包含执行部分的PL/SQL块; Set serveroutput on

BEGIN

Dbms_output.putline(‘Hello,everyone!’); END;

其中dbms_output是Oracle所提供的系统包。Put_line是该包中所包含的过程,用于输出字符串信息。

实例二:包含定义部分和执行部分的PL/SQL块; DECLARE

V_ename VARCHAR2(5); BEGIN

SELECT ename INTO v_ename FROM emp

WHERE empno=&no;

Dbms_output.putline(‘雇员名:’||v_ename); END;

/

----------- DECLARE

V_ename VARCHAR2(5); BEGIN

SELECT ename INTO v_ename FROM emp

WHERE empno=&no;

Dbms_output.putline(‘雇员名:’||v_ename); EXCEPTION

WHEN NO_DATA_FOUND THEN

Dbms_output.putline(‘请输入正确的雇员号!’) END;

/

其中NO_DATA_FOUND 是系统PLSQL中的预定义的例外! 命名块 《outer》 《inner》两个层次

过程

可以使用CREATE PROCEDURE命令建立过程。

CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER) IS

BEGIN

UPDATE emp SET sal=newsal

WHERE lower(ename)=lower(name); END; /

函数

函数用于返回特定数据。当建立函数时,在函数头部必须包含RETURN子句,而在函数体内必须要包含RETURN语句返回数据。

CREATE FUNCTION annual_income(name VARCHAR2) RETURN NUMBER IS

Annual_salary NUMBER(7,2); BEGIN

SELECT sal*12+nvl(comn,0) INTO annual_salary FROM emp WHERE lower(ename)=lower(name); RETURN annual_salary; END; /

包是函数和过程的一个打包过程,可以分为包规范和包体两部分所组成的。

CERATE PACKAGE 命令建立包规范;使用CREATE PACKAGE BODY 命令建立包体。

触发器

触发器是指隐含执行的存储过程。当定义触发器时,必须要指定触发事件以及触发操纵,常用的触发事件包括INSERT,UPDATE,DELETE,而触发操纵实际上是一个PLSQL块。

建立触发器可以使用CREATE TRIGGER命令来完成的。 CREATE TRIGGER update_cascade AFTER UPDATA OF deptno no dep FOR EACH ROW BEGIN

UPDATA emp SET deptno=:new.deptno WHERE deptno=:old.deptno; END; / (过程)

过程用于执行特定操纵,当建立过程时,既可以指定输入参数(IN),也可以指定输出参数(OUT)。通过在过程中使用输入参数,可以将应用环境的数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。可以使用CREATE PROCEDURE命令建立过程。

CREATE PROCERURE update_sal(name VARCHAR2,newsal NUMBER) IS BEGIN

UPDATE emp SET sal=newsal

WHERE lower(ename)=lower(name); END; /

上述的例子中,用于修改更新雇员的工资,在使用的过程中可以使用execute命令或者call命令来执行。

Exec update_sal(‘scott’,2000) Call update_sal(‘scott’,2000); 函数

函数用于返回特定的数据,当建立函数时,在函数头部必须包含RETURN子句,而在函数体内必须要包含RETURN语句返回数据。

CREATE RUNCTION annual_income(name VARCHAR2) RETURN NUMBER IS

Annual_salary NUMBER(7,2);