程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> Oracle 10g讀書筆記

Oracle 10g讀書筆記

編輯:更多數據庫知識
Oracle 10g讀書筆記   1、使用Oracle 10.2自帶的SQL Plus工具 連接數據庫: Conn 用戶名/密碼@數據庫標識例如orcl   2、創建一個函數 create or replace function getname(empid varchar2) return varchar2 is xm varchar2(20); begin select ename into xm from emp where empno=empid; return xm; end; /   執行函數方法之一: Select getname(‘7900’) from dual ; 執行函數方法之二: Var no varchar2(20) ; Exec :no :=getname(‘7900’) ; Print no  ;     函數的另外一個示例: CREATE OR REPLACE FUNCTION annual_income(name VARCAR2) RETURN NUMBER IS Annual_salary NUMBER(7,2); BEGIN        Select sal*12+nvl(comm,0) INTO annual_salary FROM emp WHERE LOWER(ename)=LOWER(name);        RETURN annual_salary; END; / 執行方法: Var income NUMBER ; CALL annual_incom(‘scott’) into :income; Print income;     3、存儲過程 create or replace procedure for_loop1(        v_num1   in    number,        v_num2   in    number) is        i             number(3); begin        if v_num1<=v_num2 then           i:=v_num1;           for i in v_num1..v_num2 loop              dbms_output.put_line(i);          end loop;       else          i:=v_num2;           for i in v_num2..v_num1 loop              dbms_output.put_line(i);          end loop;        end if; end; / 使用execute 方法執行存儲過程,如: Exec 存儲過程名(參數1,參數2……..)   存儲過程另外一個示例: Create or replace procedure update_sal(name VARCHAR2,newsal NUMBER) IS BEGIN        Update emp set sal=newsal where lower(ename)=lower(name); END; / 執行存儲過程: 方法一:exec update_sal(‘scott’,5000); 方法二:call update_sal(‘scott’,5000);       4、匿名塊的使用 declare  cursor emp_cursor is select ename,sal from emp for update;  emp_record emp_cursor%rowtype;  begin    open emp_cursor;    loop     fetch emp_cursor into emp_record;            exit when emp_cursor%notfound;            if (emp_record.sal<2000) then                   update emp set sal=sal*1.2 where current of emp_cursor;            end if;     end loop;  end; 匿名塊在輸入/後執行。 注意:使用匿名塊時,要交互式執行,則需要先運行set serveroutput on語句   另外一個: declare name varchar2(20); begin select ename into name from emp where empno=&no; dbms_output.put_line('查找到得雇員是:'||name); EXCEPTION when no_data_found then dbms_output.put_line('該雇員不存在!'); end;   5、PLSQL Developer是一個獨立的開發工具,不是Oracle的產品。   6、包:在包中聲明包含的函數和存儲過程名稱及參數、返回值;在包體中實現包中函數、存儲過程代碼。        在引用包中的存儲過程或函數時,需要用包名進行限定引用。   7、類型變量的使用 declare name emp.ename%type; begin select ename into name from emp where empno='7654'; dbms_output.put_line(name); end; /   8、record變量相當於一個結構 declare type emp_record is record (  name emp.ename%type,  salary emp.sal%type ); rs emp_record; begin select ename,sal into rs from emp where empno=&no; dbms_output.put_line('雇員姓名:'||rs.name); dbms_output.put_line('雇員薪水:'||rs.salary); end; / 特別注意,在結構中的每一個變量定義之後,是逗號而非分號;最後一個變量之後沒有標點符號。   9、使用動態游標 DECLARE  TYPE c IS REF CURSOR;  empcur c;  vname emp.ename%TYPE;  vsalary emp.sal%TYPE; BEGIN  OPEN empcur FOR      SELECT ename,sal from emp WHERE empno='7654';  LOOP     FETCH empcur into vname,vsalary;     EXIT WHEN empcur%NOTFOUND;     DBMS_OUTPUT.PUT_LINE('姓名:'||vname||'    薪水:'||vsalary);     END LOOP;  CLOSE empcur; END; / 此動態游標的關鍵之處在於:在聲明部分聲明這是一個引用游標,用戶定義一個引用游標,在引用游標打開的時候,才定義SELECT語句。 特別注意:此為動態游標,與靜態游標不同之處在於:靜態游標在定義游標時同時指明SELECT語句;動態游標在打開游標時才指明SELECT語句。 靜態游標示例: DECLARE  CURSOR  emp_cursor IS select ename,sal from emp for update;  emp_record emp_cursor%ROWTYPE;  BEGIN   OPEN emp_cursor;    LOOP     FETCH emp_cursor INTO emp_record;            EXIT WHEN emp_cursor%NOTFOUND;            IF (emp_record.sal<2000) THEN                   update emp set sal=sal*1.2 where CURRENT OF emp_cursor;            END IF;     END LOOP; END;   10、大批量數據存儲LOB(large object) Lob變量分為內部lob變量和外部lob變量。 內部lob變量又分為clob\blob\nclob,數據存儲於數據庫中,並支持事務操作。 Clob\nclob主要用於支持大字符串存儲; Blob主要用於支持大二進制的數據存儲; BFILE主要支持外部文件存儲,如電影文件等,BFILE字段主要存儲指向外部文件的指針。   11、在oracle 10g 日期時間的表述,必須用單引號引起來。   12、NVL函數的使用        使用nvl函數,主要是處理表字段中的null值        語法:nvl(exp1,exp2)        說明:如果exp1是空,則返回exp2                      如果exp1不為空,則返回exp1        示例:select ename,nvl(sal,0) from emp;   13、NVL2函數的使用        使用nvl2函數,主要處理表中字段的null值        語法:nvl2(exp1,exp2,exp3)        說明:如果字段exp1為非空,則返回exp2的值,否則返回exp3的值        示例:select ename,nvl2(sal,333,444) from emp;   14、在oracle中,表間連接的左外連接和右外連接時,可以使用(+),而不是微軟sql server 的*號。 例如:左外連接: select dept.dname,emp.ename,emp.job from emp,dept where emp.deptno(+)=dept.deptno; 右外連接: select dept.dname,emp.ename,emp.job from emp,dept where emp.deptno=dept.deptno(+); 但是最好使用:left inner join或right inner jion關鍵字   15、子查詢中的成對比較 例如: Select ename,sal,comm,deptno from emp Where (sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where deptno=30); 在成對比較中,必須是sal和nvl(comm,-1)的值,即:兩個值都相同時才算符合條件。   16、創建表時使用子查詢 create table test(deptname,name,job) as select dept.dname,emp.ename,emp.job from emp,dept where emp.deptno=dept.deptno;   17、日期時間函數 在oracle中,日期時間函數的處理方式和MS SQL SERVER 中的大不相同,要特別注意。 在oracle中: 日期時間函數主要用於表達date 、timestamp數據類型的數據。Oracle用7位來表達日期時間數據,包含:世紀、年、月、日、時、分、秒,且默認日期格式為:DD-MON-YY。 Ø         Add_months(d,n):返回指定日期之前或之後指定月份的日期,n為正表示在指定日期之後,n為負表示在指定日期之前的日期。 declare v_date date; begin v_date:=add_months(sysdate,-2); dbms_output.put_line(to_char(v_date)); end; /   Ø         Current_date 用於返回當前會話時區的日期值 alter session set time_zone ='+8:0';  alter session set nls_date_format='YYYY-MM-DD';  select sysdate from dual;  select current_date from dual; select current_timestamp from dual; 上述語句用於更改時區和設置日期時間格式。   Ø         select dbtimezone from dual; 返回數據庫所在的時區   Ø         Extract函數用於返回日期中指定的部分 select extract(year from sysdate) from dual; select extract(month from sysdate) from dual; select extract(day from sysdate) from dual;   Ø         last_day(d),用於返回日期所在月份的最後一天的日期值 select last_day(sysdate) from dual;   Ø         month_between(d1,d2),返回給定的兩個日期相差的月份數量。 select months_between(sysdate,'2009-12-31') from dual; 日期的天數相同時,返回整數。   Ø         返回當前對話的時區 select sessiontimezone from dual;   返回當前系統日期 Select sysdate from dual;   Ø         返回單點日期時間及時區 select systimestamp from dual;     18、轉換函數 Ø         將一種數據類型轉換為另外一種數據類型:Cast(expr as type_name) declare v_cdate varchar2(20); begin v_cdate:=cast(sysdate as varchar2); dbms_output.put_line(v_cdate); end; /   Ø         將日期時間值轉換為字符串to_char() Select to_char(sysdate,'YYYY-mm-dd') from dual;   Ø         將符合日期時間格式的字符串轉換為日期時間值to_date() select to_date('01-12-2009','DD-MM-YYYY') from dual;   Ø         user 用於返回當前數據庫用戶名稱 select user from dual;   19、使用類型變量插入數據 declare v_deptno dept.deptno%type; v_dname dept.dname%type; begin  v_deptno:=&no;  v_dname:='&deptname';  insert into dept(deptno,dname) values(v_deptno,v_dname); end; / 上述方法直接使用表中已經定義了的變量類型,沒有使用簡單的數據類型,此方法較好。看下例,在變量聲明時賦值,且用子查詢插入數值: declare v_deptno dept.deptno%type:=&no; begin   insert into employee      select * from emp where deptno=v_deptno; end; /   20、使用子查詢更新數據 declare v_ename emp.ename%type:='&name'; begin  update emp set (sal,comm)=(select sal,comm from emp where ename=v_ename)  where job=(select job from emp where ename=v_ename); end; / 使用子查詢更新數據。   21、使用游標 使用顯示游標,有四個游標屬性:SQL%FOUND、SQL%NOTFOUND、SQL%ROWCOUNT、SQL%ISOPEN   SQL%ISOPEN屬性確定游標是否已經打開; SQL%FOUND、SQL%NOTFOUND屬性用於判斷SQL語句是否執行成功,執行成功返回TRUE屬性,否則返回FALSE屬性; SQL%ROWCOUNT屬性用於返回游標執行影響的數據行數。 例: declare v_deptno dept.deptno%type:=&no; begin  update emp set sal=sal*1.1 where deptno=v_deptno;  if sql%found then     dbms_output.put_line('語句執行成功!');  else     dbms_output.put_line('該部門不存在雇員!');  end if; end; /   又例: declare v_deptno dept.deptno%type:=&no; begin  update emp set sal=sal*1.1 where deptno=v_deptno;  dbms_output.put_line('update語句修改了'||SQL%ROWCOUNT||'行數據!'); end; / 22、在匿名塊中使用事務 declare  v_sal emp.sal%type:=&sal;  v_ename emp.ename%type:='&name'; begin  update emp set sal=v_sal where ename=v_ename;  commit;  exception  when others then rollback; end; / 注意:沒有事務開始語句,直接就使用事務了。   23、使用CASE語句 第一種使用方式:CASE 語句使用單值進行比較 declare  v_deptno emp.deptno%type; begin  v_deptno:=&no;  case v_deptno     when 10 then       update emp set comm=10 where deptno=v_deptno;     when 20 then       update emp set comm=20 where deptno=v_deptno;     when 30 then       update emp set comm=30 where deptno=v_deptno;        else         dbms_output.put_line('該部門編號不存在!');        end case; end; / 第二種使用方式:CASE 語句使用表達式進行比較 declare  v_sal emp.sal%type;  v_ename emp.ename%type; begin  select ename,sal into v_ename,v_sal from emp where empno=&no;  case  when v_sal<1000 then     update emp set comm=100 where ename=v_ename;  when v_sal<2000 then     update emp set comm=80 where ename=v_ename;  when v_sal<6000 then     update emp set comm=60 where ename=v_ename;  end case; end; /   24、loop循環 declare  i int:=1; begin  loop     insert into t values(i);     exit when i=10;     i := i+1;  end loop; end; /   While循環 declare  i int:=11; begin  while i<=100 loop     insert into t values(i);     i := i+1;  end loop; end; /   For 循環,注意:for循環的循環變量不需要顯示定義,只需要使用即可,系統自動會定義,且自動遞加。 begin    for i in 111..120 loop      insert into t values(i);    end loop; end;  /   24、在使用顯示游標,明確四個系統變量 使用顯示游標,有四個游標屬性:SQL%FOUND、SQL%NOTFOUND、SQL%ROWCOUNT、SQL%ISOPEN   SQL%ISOPEN屬性確定游標是否已經打開; SQL%FOUND、SQL%NOTFOUND屬性用於判斷SQL語句是否執行成功,執行成功返回TRUE屬性,否則返回FALSE屬性; SQL%ROWCOUNT屬性用於返回游標執行影響的數據行數。 declare cursor emp_cursor is      select ename,sal from emp where deptno=10; v_ename emp.ename%type; v_sal   emp.sal%type; begin  open emp_cursor;  loop     fetch emp_cursor into v_ename,v_sal;     exit when emp_cursor%notfound;     dbms_output.put_line('姓名:'||v_ename||'   薪水:'||v_sal);  end loop;  close emp_cursor; end; /   使用游標記錄型變量 declare  cursor emp_cursor is (select ename,sal from emp);  emp_record emp_cursor%rowtype; //記錄類型的變量 begin  open emp_cursor;  loop     fetch emp_cursor into emp_record;     exit when emp_cursor%notfound;     dbms_output.put_line('雇員姓名:'||emp_record.ename||' 雇員工資:'||emp_record.sal);  end loop;  close emp_cursor; end;     25、參數游標 所謂參數游標,即為帶參數的游標。可以反復根據不同參數使用。 declare  cursor emp_cursor(no number) is (select ename from emp where deptno=no);  v_ename emp.ename%type; begin  open emp_cursor(10);  loop     fetch emp_cursor into v_ename;     exit when emp_cursor%notfound;     dbms_output.put_line('姓名是:'||v_ename);  end loop;  close emp_cursor; end; / 其中:no就是游標參數,每次可以帶不同的參數。   26、使用游標更新數據、刪除數據 使用顯示游標,可以更新或刪除游標當前所在數據行的數據。注意:使用游標更改數據或刪除數據時,在游標定義語句上需要加上for update 關鍵字。 語法: Cursor cursor_name(paramterName datatype) Is Select_statement FOR UPDATE [OF COLUMN_REFERENCES][NOWAIT] 此for update 語句用於在要操作的數據上加更改鎖。Of 子句用於在同時操作多張表時在哪張表上加鎖。 為了更新或刪除當前游標指定行的數據,必須在update或delete語句中使用where current of 子句。 示例: declare  cursor emp_cursor is select ename,sal from emp for update;  v_ename emp.ename%type;  v_oldsal emp.sal%type; begin  open emp_cursor;  loop     fetch emp_cursor into v_ename,v_oldsal;     exit when emp_cursor%notfound;     if v_oldsal <2000 then       update emp set sal=sal+500 where current of emp_cursor;     end if ;  end loop; end;   刪除數據: declare  cursor emp_cursor is select ename,sal,deptno from emp for update;  v_ename emp.ename%type;  v_oldsal emp.sal%type;  v_deptno emp.deptno%type; begin  open emp_cursor;  loop     fetch emp_cursor into v_ename,v_oldsal,v_deptno;     exit when emp_cursor%notfound;     if v_deptno=30 then       delete from emp where current of emp_cursor;     end if ;  end loop; end;     27、游標for 循環 游標for 循環是使用游標的簡單方式,單使用游標for 循環時,oracle會主動打開游標,使用完畢後,會主動關閉游標。 語法: FOR record_name IN cursor_name LOOP Statement; END LOOP; 注意:record_name 是oracle隱含的記錄變量名。 示例: declare  cursor emp_cursor is select ename from emp; begin  for rs in emp_cursor loop     dbms_output.put_line('第'||emp_cursor%rowcount||'條記錄!雇員姓名是:'||rs.ename);  end loop; end;   28、例外(異常) Oracle的例外分為三種:1、預定義列外 2、非預定義例外 3、自定義例外 例外使用:exception來捕捉 declare  v_ename emp.ename%type; begin  select ename into v_ename from emp where deptno=&no;  dbms_output.put_line('姓名是:'||v_ename);  exception    when no_data_found then    dbms_output.put_line('沒有檢索到數據!'); end;   29、創建存儲過程 Ø         創建一個無參數的存儲過程 CREATE OR REPLACE PROCEDURE UP_TEST AS
BEGIN
 dbms_output.put_line('這是一個測試用的存儲過程!'||sysdate);
END UP_TEST;   執行存儲過程: Set serveroutput on; Exec up_test; 或 call up_test();   Ø         創建一個帶輸入參數的存儲過程 CREATE OR REPLACE PROCEDURE UP_ADDEMPLOYEE (  ENO IN NUMBER  , NAME IN VARCHAR2  , SAL IN NUMBER  , JOB IN VARCHAR2 DEFAULT '秘書' , DNO IN NUMBER  ) AS e_integrity exception; pragma exception_init(e_integrity,-2291); BEGIN  insert into emp(empno,ename,sal,job,deptno) values(eno,name,sal,job,dno); exception  WHEN dup_val_on_index then     raise_application_error(-20000,'雇員編號不能重復!');  when e_integrity then     raise_application_error(-20001,'部門編號不存在!'); END UP_ADDEMPLOYEE; / 執行存儲過程 exec up_addemployee(8888,'康師傅',3000,'經理',10);   當再次運行此存儲過程時,發生錯誤。或部門編號與部門表中編號不存在時,發生錯誤。   Ø         創建一個帶輸出參數的存儲過程 CREATE OR REPLACE PROCEDURE UP_QUERY_EMPLOYEE ( ENO IN NUMBER , NAME OUT VARCHAR2 , SALARY OUT NUMBER  ) AS BEGIN  select ename,sal into name,salary from emp where empno=eno;  exception  when no_data_found then  raise_application_error(-20000,'沒有查找到數據!'); END UP_QUERY_EMPLOYEE;

執行存儲過程(PLSQL Developer中): SQL>var aname varchar2(10); SQL> var asal number; SQL> exec UP_QUERY_EMPLOYEE(7788,:aname,:asal); SQL>   上述存儲過程執行時采用的都是按位置進行參數傳遞,如果按照參數傳遞變量,則示例如下: SQL>exec up_addemployee ( empno =>8888, ename=>'康師傅', sal=>3000, job=>'經理',deptno=>10);     30、創建一個函數 CREATE OR REPLACE FUNCTION UF_GETUSER RETURN VARCHAR2 AS  v_user varchar2(100); BEGIN  select username into v_user from user_users;  RETURN v_user; END UF_GETUSER;   執行函數: select uf_getuser() from dual;   函數的帶輸入參數、帶輸出參數、帶輸入輸出參數,都與存儲過程的方式一樣的。     31、查看用戶對象系統表 select object_name,object_type from user_objects; 注意:user_objects即為用戶創建對象的管理表格。   32、包 包是邏輯相關的存儲過程、函數等的組合體。包分包規范和包體,包規范中規定包含的有邏輯關系的存儲過程和函數;包體中實現包規范中規定的存儲過程和函數。 建立包時:先建立包規范,再建立包體及包體中的存儲過程和函數實現。 Ø         建立包規范 包規范實際上是包與應用程序之間的接口,包括:常量、變量、游標、過程和函數。這些變量、常量、游標不但可以在包內使用,也可以在過程和函數內使用。 create or replace package emp_pg is
 g_deptno number:=30;
 procedure add_employee(eno number,name varchar2,salary number,dno number default g_deptno);
 procedure fire_employee(eno number);
 function get_sal(eno number) return number;
end emp_pg; Ø         建立包體 建立包體就是創建包規范中定義的存儲過程和函數 create or replace package body emp_pg is
 /*校驗部門編號是否在范圍之內*/
 function validate_deptno(v_deptno number) return boolean is
    v_temp int;
  begin
    select 1 into v_temp from dept where deptno = v_deptno;
    return true;
 exception
    when no_data_found then
      return false;
 end;

 /*增加一個雇員*/
 procedure add_employee(eno    number,
                         name   varchar2,
                         salary number,
                         dno    number default g_deptno) is
 begin
    if validate_deptno(dno) then
      insert into emp
        (empno, ename, sal, deptno)
      values
        (eno, name, salary, dno);
    else
      raise_application_error(-20010, '不存在該部門!');
    end if;
 exception
    when dup_val_on_index then
      raise_application_error(-20011, '已有同名的人!');
 end;

 /*開除一個雇員*/
 procedure fire_employee(eno number) is
 begin
    delete from emp where empno = eno;
   if SQL%notfound then
      raise_application_error(-20012, '該雇員不存在!');
    end if;
 end;

 function get_sal(eno number) return number is
    v_sal emp.sal%type;
 begin
    select sal into v_sal from emp where empno = eno;
    return v_sal;
 exception
    when no_data_found then
      raise_application_error(-20012, '該雇員不存在!');
 end;
end emp_pg;     執行包中的過程或函數的方法: exec emp_pg.add_employee(9901,'YY',4500,10); exec emp_pg.g_deptno:=30; exec emp_pg.fire_employee(9901); 執行包中的函數的方法: SQL> var s number; SQL> exec :s:=emp_pg.get_sal(7788);     包中的函數或存儲過程可以進行重載(overload),只需要在包體的is關鍵詞前加overload關鍵詞即可。重載即函數或過程名稱相同,參數類型不同的函數或存儲過程。 包構造過程,在包體的最後,在begin…end塊間,主要用來初始化包的全局變量。   33、Oracle 10g不但允許在DML語句上定義觸發器,還允許在事件上定義觸發器(如:啟動例程、關閉例程、登錄或斷開會話)   34、觸發器類型分為:前觸發(BEFORE)、後觸發(AFTER) 35、觸發器級別上分:表級觸發器和行級觸發器 36、觸發器觸發過程中條件謂詞 u       INSERTING當觸發事件是insert操作時,此條件謂詞為true,否則為false; u       UPDATING當觸發事件是update操作時,此條件謂詞為true,否則為false; u       DELETING當觸發事件是delete操作時,此條件謂詞為true,否則為false; create or replace trigger tr_sec
 before insert or update or delete on emp 
 for each row
begin
 if (to_char(sysdate, 'DY', 'nls_date_language=AMERICAN') in ('SAT', 'SUN')) then
    case
      when inserting then
        raise_application_error(-20001, '不能再周末新增雇員信息!');
      when updating then
        raise_application_error(-20002, '不能再周末更改雇員信息!');
      when deleting then
        raise_application_error(-20003, '不能再周末解雇雇員!');
    end case; end if;
end tr_sec;   37、行級觸發器(old new指示代詞的使用) 當進行行觸發時,默認情況下,:old修飾符引用舊的一行數據,:new修飾符引用新的一行數據。如插入的數據不能小於原來的數據,否則就觸發一個信息提示。 create or replace trigger tri_emp
 before update of sal on emp 
 for each row
begin
   if :new.sal < :old.sal then
   raise_application_error(-20001,'工資只升不降!');
   end if ;
end tri_emp;   38、特定情況下的觸發語句 當使用行觸發器時,使用when子句指定特定情況下行觸發器。 CREATE OR REPLACE TRIGGER TRI_WHEN AFTER UPDATE OF sal ON EMP FOR EACH ROW WHEN (old.job='saleman') declare  v_temp integer; BEGIN  select count(*) into v_temp from emp_t where name=:old.ename;  if v_temp=0 then     insert into emp_t values(:old.ename,:old.sal,:new.sal,sysdate);  else     update emp_t set oldsal=:old.sal,newsal=:new.sal,time=sysdate where name=:old.ename;  end if; END;   注意:當使用update語句時,只有job=’saleman’的記錄能夠被更新。   39、LOB類型(large blob) Lob類型包括內部lob和外部lob兩種。內部lob又分為clob,blob和nclob三種類型,數據存儲在數據庫中,且支持事務操作。外部lob只有bfile數據類型,支持os文件類型,且不支持事務操作。 Clob和nclob支持大量字符串存儲,blob支持大量二進制文件操作。   Dbms_lob是oracle提供的,專門用於操作lob類型數據的PL/SQL包,該包定義了一些常量、函數和過程,可以直接使用。 (1)、常量 File_readonly CONSTANT BINARY_INTEGER:=0; Lob_readonly CONSTANT BINARY_INTEGER:=0; Lob_readwrite CONSTANT BINARY_INTEGER:=1; Lobmaxsize CONSTANT INTEGER:=4294967295; Call CONSTANT PLS_INTEGER :=12; Session CONSTANT PLS_INTEGER :=10; (2)、過程append,將數據添加到內部lob數據的尾部。 declare  dest_lob clob;  src_lob clob; begin  src_lob:='你好';  dest_lob:='中國!';  dbms_lob.append(dest_lob,src_lob);  dbms_output.put_line(dest_lob); end; (3)、過程close Dbms_lob.close(dest_lob); (4)、函數compare (5)、過程copy (6)、過程erase   40、oracle的系統包簡介 dbms_output包等很多實用程序包 *
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved