PL/SQL学习二

PL/SQL中异常的处理

DECLARE
  …;
BEGIN
  …;
EXCEPTION
  WHEN 异常情况1 [OR 异常情况2…] THEN
   …;
  WHEN异常情况3 [OR 异常情况4…] THEN
  …;
  WHEN OTHERS THEN
   …;
END;

 

DECLARE
TMP_NAME VARCHAR(10);
BEGIN
SELECT ENAME INTO TMP_NAME FROM EMP;
DBMS_OUTPUT.PUT_LINE(TMP_NAME) ;
EXCEPTION
WHEN TOO_MANY_ROWS THEN 
DBMS_OUTPUT.PUT_LINE('返回了太多行') ;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常') ;
END;

 用户自定义异常处理

DECLARE
OUT_OF_STOCK EXCEPTION;
NUMBER_ON_HAND NUMBER;
BEGIN
…
IF NUMBER_ON_HAND < 1 THEN
RAISE OUT_OF_STOCK;
END IF;
…
EXCEPTION
WHEN OUT_OF_STOCK THEN
--HANDLE THE ERROR
END;

 

DECLARE
TMP_NAME VARCHAR(10);
MY_EXCEPTION EXCEPTION ;
BEGIN
SELECT ENAME INTO TMP_NAME FROM EMP WHERE EMPNO=7369;
DBMS_OUTPUT.PUT_LINE(TMP_NAME) ;
IF TMP_NAME <> 'LYF' THEN
RAISE MY_EXCEPTION ;
END IF ;
EXCEPTION
WHEN TOO_MANY_ROWS THEN 
DBMS_OUTPUT.PUT_LINE('返回了太多行') ;
WHEN MY_EXCEPTION THEN
DBMS_OUTPUT.PUT_LINE('该用户不是lyf') ;
END;

 变量类型的声明

DECLARE
MY_NAME VARCHAR(10);
TMP_NAME MY_NAME%TYPE;
--TMP_NAME EMP.ENAME%TYPE;
BEGIN
SELECT ENAME INTO TMP_NAME FROM EMP WHERE EMPNO=7369;
DBMS_OUTPUT.PUT_LINE(TMP_NAME) ;
END;

 组合变量record:

  • record可以同时存储不同的数据类型,这有点像javabean

    DECLARE
     type test_record is record(
        a number(2),
        b varchar2(10)
     );
     
     firstRecord  test_record;
     
    BEGIN
        firstRecord.a:=12;
        firstRecord.b:='lbx';
       DBMS_OUTPUT.put_line (firstRecord.b);
    END;
    
     

 

组合变量%rowtype

DECLARE
    v_emp emp%rowtype;
 
BEGIN
    v_emp.empno:=1111;
    v_emp.enam
  DBMS_OUTPUT.put_line (v_emp.empno);
  DBMS_OUTPUT.put_line (v_emp.ename);
  DBMS_OUTPUT.put_line (v_emp.sal);
e:=’lbx’;
    v_emp.sal:=10000; 
END;

 

PL/SQL中的SQL语句:

n  Select语句:

q  必须与into结合使用

q  只能返回一条记录,不能多,也不能少。

q  示例:

n  select ename,sal into v_ename,v_sal from emp  where empno = 7369;

 

n  DML语句:

q  可以直接使用,与SQL中完全一样

q  如果想让DML语句起作用或者回退的话,需要显式的调用commit或者rollback

n  DDL语句

q  需要使用execute immediate语句

q  示例:

n  execute immediate ‘create table test (a varchar2(20), b number(3))’;

测试select语句:

DECLARE

    v_ename emp.ename%type;

    v_sal   emp.sal%type;

BEGIN

    select ename,sal into v_ename,v_sal from emp

           where empno = 7369;

  DBMS_OUTPUT.put_line (v_ename);

  DBMS_OUTPUT.put_line (v_sal);

END;

 

测试DML语句:

DECLARE

    v_ename emp.ename%type;

    v_sal   emp.sal%type;

BEGIN

    insert into emp (empno,ename,sal) values ('1','aa','11');

  DBMS_OUTPUT.put_line (v_ename);

  DBMS_OUTPUT.put_line (v_sal);

-- commit;

 --rollback;

 

END;

 

select * from emp;

rollback;

 

测试DDL语句:

DECLARE

 

BEGIN

    execute immediate 'create table test2 (a varchar2(20), b number(3))';

END;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值