初识PL/SQL

Procedure Language/SQL,是Oracle对sql语言的过程化扩展,在原有sql命令语言(增删改查)中增加了过程处理语句(分支、循环等),使sql语言具有过程处理能力。PL/SQL是面向过程语言,但是更简单、灵活、高效和实用,是操作Oracle数据库效率最高的语言。


PL/SQL 之Hello World

declare

    --说明部分(变量、光标、例外)

begin

   --程序体

dbms_output.put_line("Hello World!");

  -- 调用程序包中的方法,put_line方法是一个存储过程,可接收一个字符串参数。

end;

如果没有说明部分,declare可以不写。程序以begin开头,以endl;结束。注意程序体中每一句后面的分号以及end后的分号。


PL/SQL完整程序结构

declare

    --说明部分(变量常量说明、光标申请、例外说明)

begin

    --语句序列(DML语句)

exception

    --例外处理语句

end;


一、声明部分


1、基本变量类型

char、varchar2、long、boolean、date、number

例如:  var1  char(15);--定义一个字符,名称是var1,长度是15

            married boolean:=true;--变量赋值的形式是:=

            psal number(7,2);--定义一个有两位小数的数字

注意:是名字在前,类型在后。

例如:

declare

    pdate date;    --    定义一个date类型的变量

begin

    pdate := sysdate;    --获取当前日期

    dbms_output.put_line(pdate );    --打印当前日期

    dbms_output.put_line(pdate + 1 );    --打印明天的日期

end;

2、引用型变量:

my_name emp.ename%type;

定义一个引用型变量,名称是my_name,类型是emp表中enamel列的数据类型。

例如:

declare
customer_no  t_credit_agreement.customerno%type;
pdate t_credit_agreement.submitdate%type;
begin

select customerno,submitdate into customer_no,pdate from t_credit_agreement where agreementno='ZX-8143-2012-000009';

--into是另一种赋值方式,注意查询的字段顺序与赋值的字段要相匹配,这句就是将查询结果赋值给两个定义的引用型变量

dbms_output.put_line(customer_no||'    '||pdate);

--||是字符串连接符

end;

但是!!!

select customerno,submitdate into customer_no,pdate from t_credit_agreement;

如果这么写就会报错,因为一个变量无法被赋值很多行的数据。

3、记录型变量

emp_rec emp%rowtype

记录表中行的类型作为这个字段的类型,可以将记录型变量理解成一个数组,而数组中的每个元素的类型,与表中相对应顺序列的类型一致

例如:

declare
--定义纪录型变量,代表一行数据
agreemnt_row  t_credit_agreement%rowtype;
begin
--获取一行信息,并赋值
select * into agreemnt_row from t_credit_agreement where agreementno='ZX-8143-2012-000009';
--打印customerno和submitdate字段的值
dbms_output.put_line(agreemnt_row.customerno||'  '||agreemnt_row.submitdate);

end;


二、语句序列

1、IF语句

(1)IF 条件 THEN 语句一;

            语句二;

        END IF;

(2)IF 条件 THEN 语句序列一;

        ELSE 语句序列二;

        END IF;

(3IF 条件 THEN 语句序列一;

        ELSIF  语句序列二;

        ELSE 语句序列三;

        END IF;

注意:ELSIF并不是常见的ELSEIF(少了一个E),以END IF结束(中间有空格)

例如:

declare
  pnum number := 1;
begin
if pnum = 0 then dbms_output.put_line('0');
elsif pnum = 1 then dbms_output.put_line('1');
else dbms_output.put_line('2');
end if;

end;

2、循环语句

(1)WHILE 条件 LOOP

……

END LOOP;

例如:

(2)LOOP

EXIT WHEN 条件;

……

END LOOP;

当条件满足时,跳出循环;

例如:

declare
  pnum number := 1;

begin
  loop
  exit when pnum > 10;
    dbms_output.put_line(pnum);
    pnum := pnum+1;  --改变循环变量
  end loop;
end;

(3)FOR I IN 1..3 LOOP  --连续的数字区间,首..尾(中间是两点)

……

END LOOP;

例如:

declare
  pnum number := 1;

begin
  for pnum in 1..10 loop
    dbms_output.put_line(pnum);
  end loop;

end;

注意:在FOR循环中,循环变量自动累加,默认每执行一次循环体,变量累加1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值