Oracle變量的定義、賦值及使用


首先,當在cmd里辦入scott密碼提示錯誤時,可以這樣改一下,scott的解鎖命令是:

 以system用戶登錄:
cmd
sqlplus system/tigertiger
alter user scott identified by "tiger" account unlock;

--學習塊的結構
--學習定義變量(了解數據類型)及賦值
--了解:各種PL/SQL塊的類型

--塊的結構
--案例:根據工號,輸出員工姓名
 SELECT * FROM emp;

--塊!

DECLARE
  v_empno NUMBER(4);
  v_ename VARCHAR2(10);
BEGIN
   v_empno := &請輸入工號;
   --必須要將查詢結果放到變量
   SELECT ename INTO v_ename FROM emp WHERE empno=v_empno;
   dbms_output.put_line(v_ename);
END;

 

--異常

DECLARE
  v_empno NUMBER(4);
  v_ename VARCHAR2(10);
BEGIN
   v_empno := &請輸入工號;
   --必須要將查詢結果放到變量
   SELECT ename INTO v_ename FROM emp WHERE empno=v_empno;
   dbms_output.put_line(v_ename);
  
   EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line('執行出錯了,老板!');
END;

  

--小結
DECLARE
   --變量區(不能在begin..end中定義)
BEGIN
    --業務代碼區
    excetipn
    --異常捕獲區
END;  


--定義變量(了解數據類型)
--2種:保存一個值=簡單變量;保存多個值=復合變量

--簡單變量類型:char,varchar2,number,date(同時也列類型),boolean,表.字段%type
--復合變量:表%rowtype,record

DECLARE
  v_empno NUMBER(4);
  v_ename VARCHAR2(10);
  v_job emp.job%TYPE; --如果字段類型改變,腳本不需要改變
BEGIN
   v_empno := 7566;
   SELECT ename,job INTO v_ename,v_job FROM emp WHERE empno=v_empno;
   dbms_output.put_line(v_ename);
   IF(v_job='MANAGER')THEN
      dbms_output.put_line('經理,吃過飯沒。');
   END IF;
END;

  


--需要同上,將多個變量放到一個記錄對象中

DECLARE
  v_empno NUMBER(4);
  my_row emp%ROWTYPE;
BEGIN
   v_empno := 7566;
   SELECT * INTO my_row FROM emp WHERE empno=v_empno;
   dbms_output.put_line(my_row.ename||','||my_row.sal);
END;

  

--有時不需要一整列,只需要其中幾個列。此時用record

DECLARE
    --自定義復合類型 my_emp
   TYPE my_emp_type IS RECORD(
      yg_name emp.ename%TYPE,
      yg_sal emp.sal%TYPE
   );
   my_row my_emp_type; --變量名  數據類型
BEGIN
   SELECT ename,sal INTO my_row FROM emp WHERE empno=7788;
   dbms_output.put_line(my_row.yg_name||','||my_row.yg_sal);
END;

  

--擴展:Oracle沒有boolean類型?
--思考:性別 true=男,false=女。缺點?性別=保密。所以Oracle建立用char(1)替代,1=男2=女3=保密4=人妖

--Oracle的各種集合類型,對應 java的數組。
--引用變量:在講解存儲過程以后再講解。

--綁定變量(命令窗口中執行,綁定變量用了 :)
SQL> var name varchar2(10)
SQL> execute :name :='hello';


PL/SQL procedure successfully completed

SQL> print name;

name
---------
hello

 

如圖: 

declare
   l_dept    integer := 20;
   currtime  date := sysdate;
   l_nam     varchar2(20) := to_char(add_months(trunc(sysdate),-12),'yyyymmdd');  -- to_char(sysdate,'MM')-13;

   type num_list is varray(5) of number;
   arr_id num_list := num_list(100,101,123,33,234);

 begin
      l_dept := 30;
      dbms_output.put_line(l_dept);
      dbms_output.put_line(currtime);
      dbms_output.put_line(l_nam);
      dbms_output.put_line(arr_id(1));      
 end;

變量的定義:

l_dept定義的是整型,

currtime為日期型,

l_nam為字符型並往前退12個月的日期賦值,而-- to_char(sysdate,'MM')-13;會出現負數。

type num_list is varray(4) of number;則是定義數據類型為整型的數組,並且數組長度為4,

arr_id num_list := num_list(100,101,123,33,234);則使用num_list定義的數組類型定義arr_id變量,並為arr_id賦值。

dbms_output.put_line函數則會在DMS Output選項卡中輸出,注意:dbms_output.put_line必須放到begin和end之內

truncate table t4;  --清空表里的數據
declare
op nvarchar2(100);
i int ;
j int :=100;
begin
  while j<200 loop
  select nvl(max(id),0) +1 into i from t4;
  insert into t4 values(i,j,'test'||i);
  dbms_output.put_line(i);
  j:=j+1;
  end loop;
end;
-- select * from t4;

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM