读了本PL/SQL,抄了点代码。
1.根据姓名查询作家,如果是女滴,就查询发表文章的数量。
DECLARE v_Sex NUMBER; v_AuthorCode CHAR(6); v_Arcount NUMBER; BEGIN select author_code,sex into v_AuthorCode, v_Sex from auths where name='王达琳'; IF v_Sex = 0 THEN select count(article_code) into v_Arcount from article where author_code = v_AuthorCode; END IF; END;
2.声明PLSQL变量
DECLARE v_Name varchar2(10); v_CurrentDate DATE; v_Salary NUMBER(8,2); v_LoopCounter BINARY_INTEGER; v_CurrentlyRegistered BOOLEAN;
3.创建PL/SQL用户自定义类型(例如:PL/SQL表和记录)
DECLARE --创建一个记录类型 TYPE Au_Record IS RECORD( Author_code char(6), Name varchar2(10), sex NUMBER(1) ); --声明一个Au_Record记录类型的变量 v_Author Au_Record;
4.创建对象类型,可以存储在数据库表中
create or replace type AuthorOb as object( --创建一个对象类型 Author_code char(6), Name varchar2(10), Sex number(1), birthdate date, address varchar2(30) ),
5.定义常量
常量定义与变量的定义类似,只是在定义时必须增加一个关键字constant, 并同时给它一个值,这民后就不能再给常量进行赋值了。
declare sex_male constant int := 1; sex_female constant int := 0;
6.循环
有数据表结构为:
create table Table_A( num_col number, char_col varchar2(60) );
循环将数字1到100插入到table_a表中
declare v_LoopCounter binary_integer := 1; begin loop insert into table_a(num_col) values (v_LoopCounter); v_Loopcounter := v_LoopCounter + 1; exit when v_LoopCounter > 100; end loop; end;
For循环实现相同的功能
declare v_LoopCounter binary_integer := 1; begin for v_LoopCounter in 1..50 loop insert into table_a(num_col) values (v_LoopCounter); end loop; end;
7.游标
游标用来查询数据库中的数据(例如select语句返回的记录),并对查询结果进行处理。游标分“显示”和“隐式”。通过游标,可对查询结果中的数据一条条进行处理。
下例中,通过游标查询数据库表auths中所有作家的姓名和工资,并将每条记录的值依次传给变量v_Name和v_Salary
declare v_Name varchar2(10); v_Salary number(8,2); --游标定义 cursor c_auths is select name, salary from auths; begin open c_auths; loop --检索一条记录 fetch c_auths into v_Name, v_Salary; --当所有的记录都被检索出后退出循环 exit when c_auths%notfound; /*对检索出的数据进行处理*/ end loop; --结束处理,关闭游标 close c_auths; end;
8.块
组成PL/SQL程序的基本单元,一个块可嵌套多个子块。一般一个块用来解决一个问题或一个子问题。
标准的块由如下三个独立部分组成:
定义部分(可有可无):声明块中所用到的变量,游标,类型。也可声明局部的存储过程和函数。这些过程和函数只在定义它的块中有效。
执行部分(必须):由SQL语句和过程性语句构成。
异常处理部分(可有可无):处理程序中的错误。错误发生时执行。在PLSQL中,警告或错误信息被称为异常。
结构一: declare 定义部分 begin 可执行部分,在块中必不可少 exception 异常部分 end; 结构二: begin 可执行部分 end; 结构三: declare 定义部分 begin 可执行部分 end; 结构四: begin 可执行部分 exception 异常处理部分 end;
9.变量标识符
字母开头,不超过30字符,不能有空格。
带引号的标识符可以有空格,引号不算在30个字符内。
declare "author's age" number; begin "author's age" := 21; DBMS_OUTPUT.PUT_LINE("author's age"); end;
变量名不能是保留字。
如果使用带绰号的标识符,则可以使用保留字。
declare "LOOP" number;
10.变量命名习惯
v_variableName 程序变量 e_exceptionName 用户自定义异常 t_typeName 用户自定义类型变量 p_parameterName 存储过程或函数参数变量 c_constantValue 用constant关键字限制的变量