<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    斷點

    每天進步一點點!
    posts - 174, comments - 56, trackbacks - 0, articles - 21

    PL/SQL語句

    Posted on 2010-07-24 16:03 斷點 閱讀(315) 評論(0)  編輯  收藏 所屬分類: Oracle DBA

    PLSql是SQL的補充,PL過程語言procedure language,SQL:Structured Query Language。
    PLSql    帶有分支、循環的語言,SQL沒有分支、循環的語言。

    set serveroutput on;

    -- 簡單的PL/SQL語句塊
    declare
     v_name varchar2(20);
    begin
      v_name :='myname';
      dbms_output.put_line(v_name);
    end;
    /


    --語句塊的組成
    declare
     v_num number := 0 ;
    begin
      v_num := 2/v_num;
      dbms_output.put_line(v_num);
    exception
      when others then
         dbms_output.put_line('error');

    end;
    /

    --變量聲明的規則
    1、變量名不能夠使用保留字,如from、select等
    2、第一個字符必須是字母
    3、變量名最多包含30個字符
    4、不要與數據庫的表或者列同名
    5、每一行只能聲明一個變量


    --常用變量類型
    1、binary_integer:整數,主要用來計數而不是用來表示字段類型
    2、number:數字類型
    3、char:定長字符串
    4、varchar2:變長字符串
    5、date:日期
    6、long:長字符串,最長2GB
    7、boolean:布爾類型,可以取值true、false和null值


    --變量聲明
    declare
      v_temp number(1);
      v_count binary_integer :=0;
      v_sal number(7,2):= 4000.00;
      v_date date:= sysdate;
      v_pi constant number(3,2) := 3.14;  --constant相當java的final常量
      v_valid boolean := false;
      v_name varchar2(20) not null :='MyName';
    begin
      dbms_output.put_line('v_temp value:'|| v_temp);
    end;
     

    --變量聲明,使用%type屬性
    declare
      v_empno number(4);
      v_empno2 emp.empno%type;
      v_empno3 v_empno2%type;
    begin
      dbms_output.put_line('Test');
    end;


    --簡單變量賦值
    declare
      v_name varchar2(20);
      v_sal number(7,2);
      v_sal2 number(7,2);
      v_valid boolean :=false;
      v_date date;
    begin
      va_name :='MyName';
      v_sal :=23.77;
      v_sal2 :=23.77;
      v_valid:=(v_sal = v_sal2);
      v_date:=to_date('1999-08-12 12:23:38','YYYY-MM-DD HH24:MI:SS');  
    end;


    --Table變量類型,定義一種新的類型,是數組。
    declare
      type type_table_emp_empno is table of emp.empno%type index by binary_integer;
      v_empno type_table_emp_empno;
    begin
      v_empnos(0) := 7369;
      v_empnos(2) := 7839;
      v_empnos(-1) := 9999;
      dbms_output.put_line(v_empnos(-1));
    end;


    --Record變量類型,類似java的類的概念。
    declare
      type type_record_dept is record
      (
        deptno dept.deptno%type,
        dname dept.dname%type,
        loc dept.loc%type
      );
      v_tmp type_record_dept;
    begin
      v_tmp.deptno := 50;
      v_tmp.dname := 'aaaa';
      v_tmp.loc := 'bj';
      dbms_output.put_line(v_temp.deptno||''||v_temp.dname);
    end;


    --使用%rowtype聲明Record變量
    declare
      v_temp dept%rowtype;
    begin
      v_tmp.deptno := 50;
      v_tmp.dname := 'aaaa';
      v_tmp.loc := 'bj';
      dbms_output.put_line(v_temp.deptno||''||v_temp.dname);
    end;


    --SQL語句的運用,返回數據有且只有一條記錄。
    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||''||v_sal);
    end;

    declare
      v_emp emp%rowtype;
    begin
      select * into v_emp from emp where empno = 7369;
      dbms_output.put_line(v_emp.ename);
    end;

    declare
       v_deptno dept.deptno%type := 50;
       v_dname dept.dname%type := 'aaaa';
       v_loc dept.loc%type := 'bj';
    begin
      insert into dept2 values (v_deptno,v_dname,v_loc);
      commit;
    end;

    declare
      v_deptno emp2.deptno%type := 10;
      v_count number ;
    begin
      --update emp2 set sal = sal/2 where deptno = v_deptno;
      --select deptno into v_deptno from emp2 where empno = 7369;
      select count(*) into v_count from emp2;
      dbms_output.put_line(sql%rowcount||'條記錄被影響');
      commit;
    end;


    DDL語句:
    begin
      execute immediate 'create table T(nnn varchar2(20) default ''aaa'')';
    end;

    --if語句:取出7369的薪水,如果<1200,則輸出'low',如果<2000則輸出'middle',否則'high'
    declare
      v_sal emp.sal%type;
    begin
      select sal into v_sal from emp where empno = 7369;
      if(v_sal < 1200) then
        dbms_output.put_line('low');
      elsif(v_sal < 2000) then
        dbms_output.put_line('middle');
      else
        dbms_output.put_line('high');
      end if;
    end;


    --循環
    declare
      i binary_integer := 1;
    begin
      loop
        dbms_output.put_line(i);
        i := i+ 1;
        exit when (i >= 11);
      end loop;
    end;

    declare
      j binary_integer := 1;
    begin
      while j< 11 loop
        dbms_output.put_line(j);
        j := j+ 1;
      end loop;
    end;

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

      for k in reverse 1..10 loop
        dbms_output.put_line(k);
      end loop;
    end;


    --錯誤處理
    declare
      v_temp number(4);
    begin
      select empno into v_temp from emp where deptno = 10;
    exception
      when too_many_rows then
        dbms_output.put_line('太多記錄了');
      when others then
        dbms_output.put_line('error');
    end;


    declare
      v_temp number(4);
    begin
      select empno into v_temp from emp where empno = 2222;
    exception
      when no_data_found then
        dbms_output.put_line('沒數據');

    end;


    create table errorlog
    (
    id number primary key,
    errcode number,
    errmsg varchar2(1024),
    errdate date
    );


    create sequence seq_errorlog_id start with 1 increment by 1;


    declare
      v_deptno dept.deptno%type := 10;
      v_errmsg varchar2(1024);
    begin
      delete from dept where deptno = v_deptno;
      commit;
    exception
      when others then
      rollback;
      v_errcode := SQLCODE;  --關鍵字,代表出錯的代碼。
      v_errmsg := SQLERRM;
      insert into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);
      commit;
    end;

    主站蜘蛛池模板: 美女一级毛片免费观看| 亚洲AV无码精品蜜桃| 美女隐私免费视频看| 午夜免费福利在线| 亚洲色大18成人网站WWW在线播放| 国产大片91精品免费观看不卡| 亚洲精品免费在线视频| 麻豆国产精品免费视频| 亚洲伊人精品综合在合线| 歪歪漫画在线观看官网免费阅读| 77777亚洲午夜久久多喷| 日本不卡高清中文字幕免费| 黄色网址大全免费| 青青草原亚洲视频| 日日麻批免费40分钟无码| 久久久久亚洲AV无码专区首JN | 免费女人高潮流视频在线观看| 亚洲国产另类久久久精品黑人 | 中国性猛交xxxxx免费看| 最新国产AV无码专区亚洲| 国产成人AV免费观看| 91情国产l精品国产亚洲区| 欧洲乱码伦视频免费| 亚洲AV无码一区二区三区鸳鸯影院| 男人的天堂亚洲一区二区三区 | 亚洲福利视频一区| 97国产免费全部免费观看| 亚洲av无码专区青青草原| 亚洲国产中文v高清在线观看| 野花香在线视频免费观看大全 | 亚洲白色白色永久观看| 免费看大黄高清网站视频在线| 免费无码午夜福利片69| 亚洲综合精品一二三区在线| 成人免费在线观看网站| 精品国产污污免费网站入口| 亚洲精品白色在线发布| 亚洲av日韩片在线观看| 亚洲美女免费视频| 一级毛片在线完整免费观看| 亚洲精品美女在线观看|