斷點

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

          --情況1:多個參數的傳遞,由于多個文件編碼不一致,可能出現亂碼。

          window.open(base+"/policy/universal/pop/flat_vhl_inf_query.jsp?

          cLcnNo="+objPlateNo.value+"&cEngNo="+objEngNo.value+"&cVhlFrm="+objFrmNo.value+"&cPlateTy

          p="+objPlateTyp+"&cProdNo="+objCProdNo+"&cDptCde="+objCDptCde+"&cNewMrk="+objNewMrk.value

          +"&cEcdemicMrk="+objEcdemicMrk.value,"","scrollbars=yes,left=100,top=150,Toolbar=no,Locat

          ion=no,Direction=no,Resizeable=no,Width="+800+" ,Height="+400);


          --相應的jsp獲得參數
          <% 
           String CProdNo = request.getParameter("prodNo");
           String CDptCde = request.getParameter("dptCde");

           String CPlateNo = request.getParameter("plateNo");

           String CFrmNo = request.getParameter("frmNo");
           
           if("".equals(CPlateNo)&&"".equals(CFrmNo)){
            return;
           }
               
           String dwName = "policy.pub.flat_vhl_inf_DW";
          %>


          --情況2:解決亂碼的問題。
          function tool_uploadFile(clmNo,billType,maxFileNum,fileType,singleLimit,totalLimit) {//解決亂碼的問題,增加變量paramObj。ztf 10.06.01
           var paramObj = {
            "clmNo" : clmNo,
            "billType" : billType,
            "maxFileNum" : maxFileNum,
            "fileType" : fileType,
            "singleLimit" : singleLimit,
            "totalLimit" : totalLimit
           };
           var r = window.showModalDialog(global.WEB_APP_NAME+"/core/jsp/common/uploadFile.jsp",paramObj,"dialogHeight:610px;dialogWidth:530px;center:1;help: 0; status: 0;");

           return r;
          }

          --在相應的jsp頁面通過js獲得參數:
          <html>
            <head>
              <title>文件上傳</title>
            </head>
            <script type="text/javascript" src="<%=webApp%>/core/js/core/Tool.js"></script>
            <body bgcolor="#85b7ec">
           
            <script>
           var paramObj = window.dialogArguments;
           var clmNo = paramObj.clmNo;
           var billType = paramObj.billType;
           var maxFileNum = paramObj.maxFileNum;
           var fileType = paramObj.fileType;
           var singleLimit = paramObj.singleLimit;
           var totalLimit = paramObj.totalLimit;
           tool.loadApplet('<%=agentIp%>','<%=agentPort%>','<%=orgId%
          >',clmNo,billType,maxFileNum,fileType,singleLimit,totalLimit);
            </script>

          </body>
          </html>


          vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

          posted @ 2010-07-24 16:57 斷點 閱讀(339) | 評論 (0)編輯 收藏

          1、具體業務中用到的sql,這個是查找最近標志為1,且有多條記錄的數據。 (這個sql查找錯誤比較有用。)
          select a.c_ply_no ,count(1) from web_ply_base a
          where  a.c_latest_mrk='1'
          group by  a.c_ply_no
          having count(1)>1

           

          背景count(*)   count(1)   兩者比較,主要還是要count(1)所相對應的數據字段:
           
          如果你的數據表沒有主鍵,那么count(1)比count(*)快  
            如果有主鍵的話,那主鍵(聯合主鍵)作為count的條件也比count(*)要快  
            如果你的表只有一個字段的話那count(*)就是最快的啦
            如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。  
            因為count(*),自動會優化指定到那一個字段。所以沒必要去count(?),用count(*),sql會幫你完成
          優化的.
          其他語句:select * from 表名 where 條件 order by 字段名 asc\desc     // asc 升序    desc  降序

          2、C_Nme_En匹配多個 like 查詢。
          select distinct C_Spec_No
            from WEB_Prd_Fix_Spec
           WHERE C_Spec_No in (SELECT C_Spec_No
                                 FROM web_Prd_Prod_Spec_Rel
                                WHERE C_Prod_No = '0326'
                                  and C_Spec_No like '89%')
             and (C_Nme_En like '%000000%' or C_Nme_En like '%030006%' or
                 C_Nme_En like '%030061%')

          posted @ 2010-07-24 16:42 斷點 閱讀(283) | 評論 (0)編輯 收藏

          --遞歸,樹狀結構的存儲與展示
          drop table article;
          create table article
          (
          id number primary key,
          count varchar2(4000),
          pid number,
          isleaf number(1), --0 代表非葉子節點,1代表葉子節點
          alevel number(2)
          );

          insert into article values(1,'螞蟻大戰大象',0,0,0);
          insert into article values(2,'大象被打趴下',1,0,1);
          insert into article values(3,'螞蟻也不好過',2,1,2);
          insert into article values(4,'瞎說',2,0,2);
          insert into article values(5,'沒有瞎說',4,1,3);
          insert into article values(6,'怎么可能',1,0,1);
          insert into article values(7,'怎么沒有可能',6,1,2);
          insert into article values(8,'可能性是很大的',6,1,2);
          insert into article values(9,'大象進醫院了',2,0,2);
          insert into article values(10,'護士是螞蟻',9,1,3);
          commit;

          螞蟻大戰大象
              大象被打趴下了
                  螞蟻也不好過
                  瞎說
                      沒有瞎說
                  大象進醫院了
                      護士是螞蟻
              怎么可能
                  怎么沒有可能
                  可能性是很大的
           

          --用存儲過程展現樹狀結構。
          create or replace procedure p(v_pid article.pid%type,v_level binary_integer) is
            cursor c is select * from article where pid = v_pid;
            v_preStr varchar2(1024) := '';
          begin
            for i in 0..v_level loop
              v_preStr := v_preStr || '****';
            end loop;

            for v_article in c loop
              dbms_output.put_line(v_preStr ||v_article.cont);
              if(v_article.isleaf=0) then
                 p(v_artile.id,v_levle +1);
              end if;
            end loop;
          end;

          posted @ 2010-07-24 16:25 斷點 閱讀(263) | 評論 (0)編輯 收藏

          --觸發器
          create table emp2_log
          (
          uname varchar2(20);
          action varchar2(10);
          atime date
          );

          create or replace trigger trig
            after insert or delete or update on emp2 for each row
          begin
            if inserting then
               insert into emp2_log values (USER,'insert',sysdate); --USER關鍵字,用戶。
            elsif updating then
               insert into emp2_log values (USER,'update',sysdate);
            elsif deleting then
               insert into emp2_log values (USER,'delete',sysdate);
            end if;
          end;

          update emp2 set sal = sal*2 where deptno = 30;
          select * from emp2_log;

          drop trigger trig;

          --直接執行時,出現違反完整約束條件,已找到子記錄。
          update dept set deptno = 99 where deptno = 10;

          --使用下面的,把子表一起更新。
          create or replace trigger trig
            after update on dept for each row
          begin
            update emp set deptno =:NEW.deptno where deptno =:OLD.deptno;
          end;

          update dept set deptno = 99 where deptno = 10;

          select * from emp;
          rollback;

          posted @ 2010-07-24 16:22 斷點 閱讀(295) | 評論 (0)編輯 收藏

          --函數
          create or replace function sal_tax
             (v_sal number)
             return number
          is
          begin
            if(v_sal < 2000) then
              return 0.10;
            elsif(v_sal < 2750) then
              return 0.15;
            else
              return 0.20;
            end if;
          end;

          數據庫定義的函數money_to_chinese ,把數字轉換正中文輸出。
          create or replace function money_to_chinese(money in VARCHAR2)
             return varchar2 is
               c_money   VARCHAR2(12);
               m_string VARCHAR2(60) := '分角圓拾佰仟萬拾佰仟億';
               n_string VARCHAR2(40) := '壹貳叁肆伍陸柒捌玖';
               b_string VARCHAR2(80);
               n         CHAR;
               len       NUMBER(3);
               i         NUMBER(3);
               tmp       NUMBER(12);
               is_zero   BOOLEAN;
               z_count   NUMBER(3);
               l_money   NUMBER;
               l_sign    VARCHAR2(10);

             BEGIN
               l_money := abs(money);
               IF money < 0 THEN
                 l_sign := '負' ;
               ELSE
                 l_sign := '';
               END IF;
               tmp      := round(l_money, 2) * 100;
               c_money := rtrim(ltrim(to_char(tmp, '999999999999')));
               len      := length(c_money);
               is_zero := TRUE;
               z_count := 0;
               i        := 0;
               WHILE i < len LOOP
                 i := i + 1;
                 n := substr(c_money, i, 1);
                 IF n = '0' THEN
                   IF len - i = 6 OR len - i = 2 OR len = i THEN
                     IF is_zero THEN
                       b_string := substr(b_string, 1, length(b_string) - 1);
                       is_zero   := FALSE;
                     END IF;
                     IF len - i = 6 THEN
                       b_string := b_string || '萬';
                     END IF;
                     IF len - i = 2 THEN
                       b_string := b_string || '圓';
                     END IF;
                     IF len = i THEN
                        IF (len = 1) THEN
                           b_string := '零圓整';
                        ELSE
                           b_string := b_string || '整';
                        END IF;
                     END IF;
                     z_count := 0;
                   ELSE
                     IF z_count = 0 THEN
                       b_string := b_string || '零';
                       is_zero   := TRUE;
                     END IF;
                     z_count := z_count + 1;
                   END IF;
                 ELSE
                   b_string := b_string || substr(n_string, to_number(n), 1) ||
                               substr(m_string, len - i + 1, 1);
                   z_count   := 0;
                   is_zero   := FALSE;
                 END IF;
               END LOOP;
               b_string := l_sign || b_string ;
               RETURN b_string;
          exception
             --異常處理
              WHEN OTHERS THEN
                 RETURN(SQLERRM);
          END;

          posted @ 2010-07-24 16:19 斷點 閱讀(302) | 評論 (0)編輯 收藏

          --創建存儲過程:
          create or replace procedure p
          is
            cursor c is
            select * from emp2 for update;
          begin
            for v_temp in c loop 
              if(v_temp.deptno = 10) then
                update emp2 set sal = sal+10 where current of c;
              elsif(v_temp.deptno = 20) then
                update emp2 set sal = sal+20 where current of c;
              else
                 update emp2 set sal = sal+50 where current of c;
              end if;
            end loop;
            commit;
          end;

          --執行:
          exec p;

          begin
          p;
          end;


          --帶參數的存儲過程,in傳入參數,默認為傳入,out傳出。
          create or replace procedure p
             (v_a in number,v_b number,v_ret out number,v_temp in out number)
          is
          begin
            if(v_a >v_b) then
              v_ret := v_a;
            else
              v_ret := v_b;
            end if;
            v_temp :=v_temp +1;
          end;

          declare
            v_a number := 3;
            v_b number := 4;
            v_ret number;
            v_temp number := 5;
          begin
            p(v_a,v_b,v_ret,v_temp);
            dbms_output.put_line(v_ret);
            dbms_output.put_line(v_temp);
          end;

          posted @ 2010-07-24 16:17 斷點 閱讀(264) | 評論 (0)編輯 收藏

          --游標
          declare
            cursor c is
              select * from emp;
            v_emp c%rowtype;
          begin
            open c;
            loop
              fetch c into v_emp;
              exit when(c%notfound);
              dbms_output.put_line(v_emp.ename);
            end loop;
            close c;
          end;

          declare
            cursor c is
              select * from emp;
            v_emp emp%rowtype;
          begin
            open c;
            fetch c into v_emp;
              while(c%found) loop
                dbms_output.put_line(v_emp.ename);
                fetch c into v_emp;
                --fetch c into v_emp; 導致第一條沒有打印,最后一條打印2遍。
                --dbms_output.put_line(v_emp.ename);
            end loop;
            close c;
          end;


          declare
            cursor c is
              select * from emp;
          begin
            for v_emp in c loop
              dbms_output.put_line(v_emp.ename);
            end loop;
          end;


          --帶參數的游標
          declare
            cursor c(v_deptno emp.deptno%type,v_job emp.job%type)
            is
              select ename,sal from emp where deptno =v_deptno and job= v_job;
              --v_temp c%rowtype;
          begin
            for v_temp in c(30,'CLERK') loop  --for自動打開游標。
              dbms_output.put_line(v_temp.ename);
            end loop;
          end;


          --可更新的游標
          declare
            cursor c
            is
              select * from emp2 for update;
              --v_temp c%rowtype;
          begin
            for v_temp in c loop 
              if(v_temp.sal <2000) then
                update emp2 set sal = sal*2 where current of c;
              elsif(v_temp.sal = 5000) then
                delete from emp2 where current of c;
              end if;
            end loop;
            commit;
          end;

          posted @ 2010-07-24 16:14 斷點 閱讀(246) | 評論 (0)編輯 收藏

          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;

          posted @ 2010-07-24 16:03 斷點 閱讀(317) | 評論 (0)編輯 收藏

          構造數據庫必須遵循一定的規則。在關系數據庫中,這種規則就是范式。關系數據庫中的關系必須滿足一定的要求,即滿足不同的范式。目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF),其余范式以次類推。一般說來,數據庫只需滿足第三范式(3NF)就行了。


          第一范式(1NF):無重復的列。
              所謂第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個
          值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一范式(1NF)中表的每一行只包含一個實例的信息。簡而言之,第一范式就是無重復的列。
             
             數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。

          說明:在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。

           

          第二范式(2NF):屬性完全依賴于主鍵[消除部分子函數依賴]。
           
              第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿
          足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。例如員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
              第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主
          關鍵字一部分的屬性,如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二范式就是屬性完全依賴于主鍵。

          第三范式(3NF):屬性不依賴于其它非主屬性[消除傳遞依賴]。
             
              滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。
              
          所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系,則C傳遞函數依賴于A。

          posted @ 2010-07-18 10:23 斷點 閱讀(215) | 評論 (0)編輯 收藏

          序列:sequence,產生一個獨一無二的序列,是oracle特有的。

          create table article
          (
          id number,
          title varchar2(1024),
          cont long
          );
          insert into article values(seq.nextval,'a','b');

          select * from user_sequences; --查詢序列

          create sequence seq; --創建序列seq對象
          select seq.nextval from dual;
          drop sequence seq;

          posted @ 2010-07-17 22:08 斷點 閱讀(207) | 評論 (0)編輯 收藏

          僅列出標題
          共18頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 襄樊市| 九寨沟县| 威信县| 广元市| 遵义县| 岚皋县| 韶山市| 建水县| 威信县| 道孚县| 芒康县| 察隅县| 米易县| 柳江县| 淄博市| 大兴区| 彰化市| 峨眉山市| 高邮市| 泽普县| 永登县| 尤溪县| 顺义区| 霍邱县| 犍为县| 崇明县| 凌云县| 共和县| 永泰县| 射洪县| 镇安县| 辛集市| 绥中县| 徐汇区| 漳平市| 闵行区| 依兰县| 五常市| 治多县| 武隆县| 上蔡县|