设为首页 加入收藏

TOP

PL/SQL编程基础(一)
2015-07-24 11:30:14 来源: 作者: 【 】 浏览:7
Tags:PL/SQL 编程 基础

PL/SQL程序块的模板

DECLARE

--变量、常量、游标、用户定义异常的声明

BEGIN

--SQL语句和 PL/SQL语句构成的执行程序

EXCEPTION

--程序出现异常时,捕捉异常并处理异常

END;

注意:DECLARE,BEGIN,和EXCEPTION后面没有分号而END以及所有SQL语句,和PL/SQL语句必须以分号结尾。

实现上述示例的PL/SQL代码块

DECLARE

 v_stock_count NUMBER;                 --声明部分

 v_idNUMBER:=&ID;                     

BEGIN

       SELECTstockcount INTO v_stock_count

       FROMes_product

       WHEREID = v_id;

       DBMS_OUTPUT.PUT_LINE(v_stock_count);

EXCEPTION

       WHEREOTHERS THEN

       DBMS_OUTPUT.PUT_LINE(‘该商品不存在’);

END;

变量定义语法:DECLARE variable_name type ;变量需要声明在DECLARE和BEGIN之间,variable_name代表的是变量的名称。type表示变量的数据类型。注意:给变量赋值的时候用的是:=。

变量命名规则:1、变量名首字母必须是英文字母,其后可以是字母、数字或者特殊字符$、#号和下划线。2、变量名厂部不超过30个字符。3、变量名中不能有空格。4、变量名不能使用关键字命名。

PL/SQL除了使用:=给变量赋值以外,对于已经声明的变量还可以使用SELECT INTO的方法给变量赋值

select into语法:

select select_list into {variable_name[,variable_name,……]} from table_name [wherecondition];

select_list是检索出来的结果集字段。variable_name是表示想要赋值的变量名。

注意:1、查询只能返回一条记录,多条或0条都会产生异常。2、INTO语句必须放在SELECT和FROM子句之间。3、INTO后需要赋值的变量的数据类型必须和SELECT子句中检索出的数据类型一致。4、INTO后需要赋值的变量个数需要和SELECT查询出的字段数一致。 使用命令窗口使用set serveroutput on用于显示结果。

声明变量还可以以列名或变量名作为前缀来声明变量:变量名表名.列名%TYPE; 变量名其他变量名%TYPE;

示例:根据商品id查询商品名称、商品价格、上架时间、库存,并进行连接输出

declare

 v_name       es_product.name%TYPE;

 v_price      es_product.price%type;

 v_saledate   es_product.saledate%type;

 v_stock_count  es_product.stockcount%type;

 v_id          number := &id;

begin

 select name, price, saledate, stockcount

   into v_name, v_price, v_saledate, v_stock_count

   from es_product

  where id = v_id;

 dbms_output.put_line('商品名称:' || v_name || '商品价格:' || v_price || '上架时间:' ||

                       v_saledate || '库存:' || v_stock_count);

end;

以某张表的完整行来声明变量,语法:变量名表名%ROWTYPE;

declare

 v_es_pro      es_product%rowtype;                   
 v_id          number := &id;

begin

 select name, price, saledate, stockcount

   into v_es_pro.name,v_es_pro.price,v_es_pro.saledate,v_es_pro.stockcount
   from es_product

  where id = v_id;

 dbms_output.put_line('商品名称:' || v_es_pro.name || '商品价格:' || v_es_pro.price || '上架时间:' ||

                       v_es_pro.saledate || '库存:' || v_es_pro.stock_count);

end;

if控制,语法:IF条件 THEN –代码块 END IF;

这里的THEN以及后面的代码块代表如果条件满足以后要做什么。

示例:使用if then实现购买商品时更新库存量

declare

 v_id          es_product.id%type := &id;

 v_stock_count es_product.stockcount%type;

begin

 select stockcount into v_stock_count from es_product where id = v_id;

  ifv_stock_count > 0 then

   update es_product set stockcount = stockcount - 1 where id = v_id;

    commit;

   dbms_output.put_line('id:' || v_id || '库存已更新');

  endif;

end;

IF THEN ELSE 结构语法:IF 条件 THEN –代码块1;ELSE –代码块2; END IF;

declare

 v_id          es_product.id%type:= &id;

 v_stock_count es_product.stockcount%type;

begin

 select stockcount into v_stock_count from es_product where id = v_id;

  ifv_stock_count > 0 then

   update es_product set stockcount = stockcount - 1 where id = v_id;

   commit;

   dbms_output.put_line('id:' || v_id || '库存已更新');

 else

   dbms_output.put_line('id:'||v_id||'已经没有库存!');

  endif;

end;

IF THEN ELSIF语法:if条件1 then –代码块1; elsif条件2 then –代码块2; else –代码3 end if;

declare

 v_id          es_product.id%type:= &id;

 v_stock_count es_product.stockcount%type;

begin

 select stockcount into v_stock_count from es_product where id = v_id;

  ifv_stock_count > 0 then
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlite学习笔记1:编译数据库 下一篇SQLserver语句练习

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)