Oracle總結之plsql編程(基礎八)

原創做品,轉自請註明出處:https://www.cnblogs.com/sunshine5683/p/10328524.htmlhtml

 

1、函數sql

    一、函數是能夠返回一個特定的數據,函數的建立中必須包含return子句。數組

    二、函數建立:app

    create function sp_function2(spname varchar2) return number  is salaries  number(7,3);函數

    begin oop

    ----執行部分fetch

    select sal*10+nvl(comm,0)*10 into salaries from emp where ename=spname;spa

    return salares;scala

    end;指針


    三、在sqlplus中調用函數

    var xhq_salaries number

    call sp_function2('SCOTT') into :xhq_salaries;

    

 

2、包

    一、包是用於邏輯上組合過程和函數的,能夠使用create package命令建立一個包。

    如:

    create package sp_package is

        procedure update_sal(name varchar2,newsal number);

        function sp_function2(name varchar2) return number;

    end;

    

二、建立包體

    create or replace package body sp_package is

procedure update_sal(name varchar2,newsal number) is

begin

update emp set sal=newsal where ename=name;

end;

function sp_function2(name varchar2) return number is

salaries number;

begin

select sal into salaries from emp where ename=name;

return salaries;

end;

end;  

三、調用包的函數或過程

exec sp_package.update_sal('SMITH',120);


 

3、plsql變量

一、標量類型(scalar)

標量包含許多類型,此處介紹經常使用類型就能夠

如:

定義一個邊長字符串: v_ename varchar2(20);

定義一個小數 ,範圍-99.99~99.99:    v_sal  number(4,2);

定義一個小數並給一個初始值: v_sal2  number(6,2):=1111.11

例子:

輸入員工號,輸出員工工資,姓名,我的所得稅(稅率爲0.01)

declare

c_tax_rate number(3,2):=0.01;

v_ename varchar2(10);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

--計算所得稅

v_tax_sal:=v_sal*c_tax_rate;

dbms_output.put_line('姓名爲:'||v_ename||'工資:'||v_sal || '所得稅:'||v_tax_sal);

end;


上面報錯緣由是定義v_ename  varchar(5),但實際上返回的值大於定義的,因此報錯,改爲v_ename varchar(10),問題解決,正常執行。

 

標量使用%type類型:表面。列名%type

如上面:v_ename  emp.ename%type;這樣定之後就會匹配大小,不會存在上述緩衝過小的錯誤,也不至於定義太大浪費空間。

 

二、複合類型(即plsql記錄)

相似於高級語言中的結構體,使用:記錄變量.記錄成員.

三、複合類型之plsql表,至關於高級語言中的數組,區別是下標能夠爲負數,而在高級語言中是不能夠爲負數的。

四、參照變量:是指用於存放數值指針的變量,經過參照變量,能夠使得應用程序共享相同對象,從而下降佔用的空間,在編寫plsql程序時,能夠使用遊標變量和對象變量兩種參照變量,簡單是用的最多的是遊標變量。

    使用遊標變量時,不須要指定相應的select語句,可是使用又表示,須要指定select語句。

    實例以下:

    declare
  type sp_emp_cursor is ref cursor;
  test_cursor sp_emp_cursor;
  --定義變量
  v_ename emp.ename%type;
  v_sal emp.sal%type;
   begin
   --吧test_cursor和一個select結合
   open test_cursor for select ename,sal from emp where deptno=&no;
   --循環取出查詢出的數據
   --循環取出查詢出的數據
  loop
    fetch test_cursor into v_ename,v_sal;
    exit when test_cursor%notfound;
    dbms_output.put_line('姓名:'||v_ename||'工資:'||v_sal);
   end loop;
   --關閉遊標
   close test_cursor;
   end;


相關文章
相關標籤/搜索