<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;

    主站蜘蛛池模板: 91亚洲va在线天线va天堂va国产| 亚洲色欲久久久综合网东京热| 亚洲女人18毛片水真多| 久久久久久久99精品免费| 久久精品国产亚洲AV果冻传媒| 免费在线观影网站| 亚洲AV无码码潮喷在线观看| 日韩电影免费观看| 亚洲综合男人的天堂色婷婷| 日韩免费一区二区三区在线播放| 亚洲国产亚洲综合在线尤物| 性xxxx视频播放免费| 国产精品成人亚洲| 久久亚洲国产精品123区| 国产又黄又爽又大的免费视频| 香蕉蕉亚亚洲aav综合| 95免费观看体验区视频| 国产成人精品日本亚洲11| 国产片免费在线观看| 99视频免费在线观看| 亚洲综合久久久久久中文字幕| 无遮免费网站在线入口| 99亚洲精品卡2卡三卡4卡2卡| 中文字幕亚洲专区| 88xx成人永久免费观看| 亚洲人成色4444在线观看| 亚洲午夜精品久久久久久浪潮| 中文在线免费不卡视频| 亚洲国产成AV人天堂无码| 国产人成免费视频| 国产成人免费视频| 日韩亚洲人成在线| 久久久久亚洲AV综合波多野结衣| 777成影片免费观看| 久久亚洲中文无码咪咪爱| 亚洲欧洲日产国码无码久久99| 两性刺激生活片免费视频| 一级毛片高清免费播放| 亚洲国产综合在线| 伊人久久亚洲综合| 免费涩涩在线视频网|