PL/SQL

  1. SQL plus是與Oracle進行交互的客戶端工具
    html

基本命令:
java

    host:從SQL plus環境切換到系統環境,一邊執行操做系統命令
sql

    disconnect/connect:disconnect斷開與Oracle的鏈接,connect  name/password  取得與數據庫的鏈接數據庫

    save filename    把當前緩衝區中的內容存放到存入文件當中
express

    get  filename    把文件中的內容放入緩衝區中
數組

    edit:對當前的輸入內容進行編輯
oracle

    /    run  和r從新運行上一次運行的SQL語句
函數

    desc/describe  :能夠查看對象的結構
工具

    col:主要格式化列的顯示形式
oop

    clear screen:清屏

2.PL/SQL:

    變量:

        variable_name [constant] datatype    [:=default expression]

    賦值:

        X:=200;    Y=Y+(X*20);

        或者經過select into或fetch into 來賦值

        select sum(salary) into totalSalary from emplory where dept=10;

    數據類型:

數據類型
binary_integer:整數 主要用來計數而不是用來表示字段類型
number  數字
varchar2 可變字符
char 定長字符
date 日期 v_date date := to_date(sysdate,'yyyy-mm-dd hh24:mi:ss')
long 長字符串 最長2g
boolean true/false/null 能夠爲null 因此 必定要給個初始值 否則就爲空值,而不是false
賦值-格式 :=
v_number number(10):=0; 
v_varchar2 varchar2 :='douban';

基本數據類型:
number,character,date/time,Boolean
數字數據類型:binary_integer    number
字符數據類型:char,long,raw,longraw,varchar2
日期和布爾類型:Boolean/date
LOB數據類型:BFILE/BLOB/CLOB/NCLOB

    塊結構:

declare
    v_empname varchar(50);
    v_sal number(10,2);
     
begin
    select ename,sal into v_empname,v_sal from emp where empno=7369;
    dbms_output.put_line(v_empname||'---'||v_sal);
    exception when others then
    dbms_output.put_line('error');
end;

函數和存儲過程:

-存儲過程
create sequence emp_empno_sq start with 8000;
 
create or replace procedure addemp(ename varchar2,job varchar2,sal number) is
    begin
    insert into emp  values (emp_empno_sq.nextval,ename,job,sal,'23-1月 -82',10000,100,10);
end;
 
顯示錯誤:show error
調用過程:兩種方式
1-exec  addemp 過程名(參數)
1-call  addemp 過程名(參數)
調用存貯過程
exec addemp('java','javaee',1000);
 
java 調用存儲過程 實例
****************************************************************
    class.forname("oracle.jdbc.oracledriver").newinstance();
     string url = "jdbc:oracle:thin:@192.168.6.19:1531:orcl";
     string user = "atf_ygj";
     string password = "mas123";
     conn = drivermanager.getconnection(url, user, password);
     conn.setautocommit(false);
     cstmt = conn.preparecall("{ call prc_1(?,?) }");
     cstmt.setstring(1, "100");
     cstmt.setstring(2, "testone");
     cstmt.execute();
     conn.commit();
**********************************************
 
--函數
返回值類型+is+返回變量名+類型
create or replace function getsalary(empname varchar2) return number is empsal%emp;
 begin
 select sal into empsal from emp where ename=empname;
 return empsal;
 end;
 
 var s number;
 call getsalary('scott') into:s;
 
函數的調用及限制
1.函數的調用(其具體調用方法參照上面的演示)
    a.使用全局變量接收函數的返回值
    b.使用本地變量接受函數的返回值
    c.在sql語句中直接調用函數
    d.使用dbms_output調用函數
    注:函數在調用的時候須要按位置指定參數,沒有存儲過程參數傳遞靈活
    必須具備execute 函數的權限
    var s number;
    exec:s:=getsalary('scott')
    select getsalary('scott') from dual
    
複雜的數據類型:
1.record:
TYPE <記錄類型名> IS RECORD(
<數據項1> <數據類型> 【NOT NULL【:=<表達式>】】;
<數據項2> <數據類型> 【NOT NULL【:=<表達式>】】;)
<記錄變量名> <記錄類型名>
例:
declare
type emp_record_type is record      定義一個記錄類型,名稱爲 emp_record_type
(v_ename emp.ename%type,        格式「字段名 表名.表中的字段名%type」
v_job emp.job%type,
v_sal emp.sal%type);
emp_rec emp_record_type;       記錄變量名:emp_rec(別名)   emp_record_type記錄類型
begin
select ename,job,sal into emp_rec  格式「select 字段 into 記錄變量名 from 表名 where…」
from emp where empno=&eno;
dbms_output.put_line(emp_rec.v_ename||':'
emp_rec.v_job||';'||emp_rec.v_sal);
end;
/

2.table
TYPE <表類型名> IS TABLE OF <數據類型> INDEX BY BINARY_INTEGER
<表變量名> <表類型名>
說明:
表類型名:用戶定義的
數據類型:表中元素的數據類型
例子:
declare
TYPE ename_table_type IS TABLE OF
emp.ename%TYPE
INDEX BY BINARY_INTEGER;
Ename_table ename_table_type;
begin
select ename INTO ename_table(1) from emp   注意了:這裏別忘了有個1哦。。。。指定元素的數目
where empno=7902;
dbms_output.put_line('員工名:'||ename_table(1));
end;
/

3.數組類型
與表類型的區別就是聲明瞭一個數組就肯定了數組中的元素的數目
特色:元素的次序是固定並且連續的,而且索引變量從1開始一直到其定義的最大值爲止
語法:
TYPE <數組類型名> IS VARRAY(<MAX_SIZE>) OF <數據類型>;
<表變量名> <表類型名>
說明:
數組類型名:用戶定義的
數據類型:數組中元素的數據類型
MAX_SIZE:指明數組元素個數的最大值
過程的基本結構:
控制結構:if  condition then        eg:    if (a>b)and(c>d) then
            statement ;
        else if
            statement;
        else
            statement;
循環控制:loop....end loop(兩者之間能夠無限循環,所以必須有條件時期exit)

  while condition loop
          statement;
      endloop;
  for condition loop
          statement;
      endloop;

    參考文章:

http://my.oschina.net/abian/blog/131822

http://blog.sina.com.cn/s/blog_64c236b10100nwzy.html

相關文章
相關標籤/搜索