您的位置:首页 > 百科 > 正文

plsql

PL/S来自QL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Or值读油苗acle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单360百科元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。

  • 中文名称 PL/SQL
  • 外文名称 Procedural Language/SQL
  • 应用领域 数据库
  • 具体 集成开发环境
  • 类型 过程化SQL语言

语言简

  PL/SQL(Procedural Language/SQL)是一种过输据注征程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。在甲骨文数据库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合数据库语言和过程语省饭粉民气言。PL/SQL的基本单位叫做块,由三个部分组成:一个声明部分,一个执行部分和异常处理部分。

  因为PL/SQL允许混合SQL声明和过程结构,因此可以在将声明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQ就命轻缩L声明,没有PL/SQL,甲骨文需要就每加蛋诗绍真次处理SQL声明,在网络环境中,这将影响交通流量,而且增加响应时间。PL/SQL区段只被编译一次并且以可运行的形式储存,以降低响应时间。

语言背景

  结构化查询语(Structu来自red Query Lan360百科guage,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特换宗列溶干点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利。然而,有些复杂的业务流程要求相应的程序来描述,这种情况下4GL就有些无能为力了。PL/SQL的出现正是为了解决这一问题,它是一种过程化青货握深血苏语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。

编程足别报织均基础

  程序结构

  PL/S来自QL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。

  模板如下:

  decl360百科are

  /* 声明区(可选):定义类型和变量、声明资慢鸡变量、声明函数、游标 */

  b父办克元积音egin

  /* 执行区(必须的):执行pl/sql语句或者sql语句 */

  exception

  /* 异常处理区(可选):处理错误的 */

  end;

  如下所示为一段完整友社讨设何宽染配促的PL/SQL块:

  /*声明部分,以decla配普还挥教部改反理re开头*/

  declare v_id integer;

  v_name 鸡青是varchar(20);

  cursor c_emp is select * from employee where emp_id=3;

  /*执行部分,以begin开头*/

  begin open c_emp; //打开游

  loop

  fetch c_emp into v_id,v_name; //从游标取数据

  exit when 烧置倒转千征章染c_emp%notfound ;

  end loop ;

  close c_emp; //关闭游

  dbms_output.PUT_LINE专威者务(v_name);

  /*孙富规组异常处理部分,以exception开始*/

  exception

  when no_data_found then

  后雷促球振回次缺dbms_output整态余.PUT_LINE('没有数据');

  end ;

  控制结构

  PL/SQL程序段中有三种程谈福剂式固序结构:条件结构、循环结构和顺序结构。

  1) 条件结项小任

  与其它语言完全类似,语法结构如下:

  if condition then

  statement1

  else

  statement2

  end if ;

  2)循环结构

  这一结构与其他语言不太一样,在PL/SQL程刚功适表序中有三种循环结构:

  a胡科沉突跳. loop … end loop;

  b. while condition loop … end loop;

  c. for variable in low_bound . .upper_bound loop … end loop;

  其中的"…"代表循环体。

  3)顺序结构

  实际就是goto的运用,不过从程序控制的角度来看,尽量少用goto可以使得程序结构更加的清晰。

  变量声明与赋值

  PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用数据类型:number、varchar2。

  number

  用来存储整数和浮点数。范围为1e130~10e125,其使用语法为:

  number[(precision, scale)]

  其中(precision, scale)是可选的,precision表示所有数字的个数,scale表示小数点右边数字的个数。

  varchar2

  用来存储变长的字符串,其使用语法为:

  varchar2[(size)]

  其中size为可选,表示该字符串所能存储的最大长度。

  在PL/SQL中声明变量与其他语言不太一样,它采用从右往左的方式声明,比如声明一个number类型的变量v_id,那其形式应为:

  v_id number;

  如果给上面的v_id变量赋值,不能用"=",应该用":=",即形式为:

  v_id :=5;

  基本命令

  PL/SQL使用的数据库操作语言还是基于SQL的,所以熟悉SQL是进行PL/SQL编程的基础。SQL语言的分类情况大致如下:

  1.数据定义语言(DDL),包括CREATE(创建)命令、ALTER(修改)命令、DROP(删除)命令等。

  2. 数据操纵语言(DML),包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)命令、SELECT …FOR UPDATE(查询)等。

  3. 数据查询语言(DQL),包括基本查询语句、Order By子句、Group By子句等。

  4. 事务控制语言(TCL),包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。

  5. 数据控制语言(DCL),GRANT(授权)命令、REVOKE(撤销)命令。

  具体的语法结构可以参阅其他关于SQL语言的资料,这里不再赘述。

过程与函数

  PL/SQL中的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。其语法结构为:

  过程:Create or replace procedure procname(参数列表) as PL/SQL语句块

  函数:Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块

  为便于理解,举例如下:

  问题:假设有一张表t1,有f1和f2两个字段,f1为number类型,f2为varchar2类型,要往t1里写两条记录,内容自定。

  Create or replace procedure test_procedure as

  V_f11 number :=1; /*声明变量并赋初值*/

  V_f12 number :=2;

  V_f21 varchar2(20) :='first';

  V_f22 varchar2(20) :='second';

  Begin

  Insert into t1 values (V_f11, V_f21);

  Insert into t1 values (V_f12, V_f22);

  End test_procedure; /*test_procedure可以省略*/

  至此,test_procedure存储过程已经完成,经过编译后就可以在其他PL/SQL块或者过程中调用了。函数与过程具有很大的相似性,此处不再详述。

游标介绍

  游标的定义为:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。这里特别提出游标的概念,是因为它在PL/SQL的编程中非常的重要。定义游标的语法结构如下:

  cursor cursor_name is SQL语句;

  在本文第一段代码中有一句话如下:

  cursor c_emp is select * from employee where emp_id=3;

  其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开游标、使用fetch语句将游标里的数据取出、关闭游标。

  游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。

  为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。

显式游标

  显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。

  在PL/SQL中处理显示游标所必需的四个步骤:

  1)声明游标;CURSOR cursor_name IS select_statement

  2)为查询打开游标;OPEN cursor_name

  3)取得结果放入PL/SQL变量中;

  FETCH cursor_name INTO list_of_variables;

  FETCH cursor_name INTO PL/SQL_record;

  4)关闭游标。CLOSE cursor_name

  注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。

隐式游标

  所有的隐式游标都被假设为只返回一条记录。

  使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。

  例如:

  SELECT studentNo,studentName

  INTO curStudentNo,curStudentName

  FROM StudentRecord

  WHERE name='gg';

  上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值。

发表评论

评论列表