PL/SQL資料類型

來源:互聯網
上載者:User

PL/SQL資料類型

1、變數和常量
變數文法: variable_name data_type [[NOT NULL] [:=VALUE]]
    說明:NOT NULL對變數定義非空約束,必須為變數賦非空的初始值,並且不允許在任何時候將其值修改為NULL。
--變數範例:
SQL>SERVEROUT ON
SQL>DECLARE
  v_num NUMBER(4);
 BEGIN
  v_num:=20;
  DBMS_OUTPUT.PUT_LINE('變數名v_num的值為:'||v_num);
 END;
 /

常量文法: constant_name CONSTANT data_type [:=VALUE]
--常量範例:
DECLARE
  c_num CONSTANT NUMBER(4):=100;
BEGIN 
  DBMS_OUTPUT.PUT_LINE('常量名c_num的值為:'||c_num);
END;

 
2、複合資料型別
2.1 %TYPE類型
    引用某個變數或者資料庫的列的類型作為某變數的資料類型。
SET SERVEROUT ON
DECLARE
    v_ename scott.emp.ename%TYPE;
    v_sal1 number(11);
    v_sal2 v_sal1%TYPE;
BEGIN
    SELECT ename,sal INTO v_ename,v_sal1 FROM scott.emp WHERE empno=7369;
    v_sal2:=v_sal1;
    DBMS_OUTPUT.PUT_LINE(v_ename||'的工資是'||v_sal2);
END;

2.2 %ROWTYPE
    引用資料庫表中的一行作為資料類型,即RECORD類型(記錄類型),是PL/SQL的附加類型。表示一條記錄,相當於JAVA中的對象。可以使用“.”來訪問記錄中的屬性。

12345678910111213 DECLARE
 
    v_emp scott.emp%ROWTYPE;     
 
BEGIN
 
    SELECT * INTO v_emp FROM scott.emp WHERE empno=7654;     
 
    DBMS_OUTPUT.PUT_LINE('姓名:'||v_emp.ename);
 
    DBMS_OUTPUT.PUT_LINE('部門編號:'||v_emp.deptno);
 
END;

 
2.3 記錄類型
文法:TYPE record_type IS RECORD(
                field1_name data_type_and_size [NOT NULL][:=default_value],
                ...
                fieldn_name data_type_and_size [NOT NULL][:=default_value]
            );
    將邏輯相關的資料作為一個單中繼存放區起來,使用TYPE關鍵字來定義,是顯示記錄類型,使用%ROWTYPE是隱式記錄類型。
--範例一:
DECLARE
 
 TYPE emp_record_type IS RECORD(
 
      ename VARCHAR2(10),
 
      deptno NUMBER(2)
 
 );   
 
    emp_record emp_record_type;     
 
BEGIN   
 
    SELECT ename,deptno INTO emp_record FROM scott.emp WHERE empno=7654;         
 
    DBMS_OUTPUT.PUT_LINE('姓名:'||emp_record.ename);   
 
    DBMS_OUTPUT.PUT_LINE('部門編號:'||emp_record.deptno);
 
END;

 --範例二:
DECLARE
 
  TYPE emp_record_type IS RECORD(
 
      name scott.emp.ename%TYPE,
 
      salary scott.emp.sal%TYPE,
 
      deptno scott.emp.deptno%TYPE
 
  );
 
  emp_record emp_record_type;
 
BEGIN
 
  select ename,sal,deptno into emp_record from scott.emp where empno=&no;       
 
  DBMS_OUTPUT.PUT_LINE('姓名:'||emp_record.name);   
 
  DBMS_OUTPUT.PUT_LINE('部門編號:'||emp_record.deptno);
 
END;

或:
1234567891011121314151617181920212223 DECLARE
 
  TYPE emp_record_type IS RECORD(
 
      name scott.emp.ename%TYPE,
 
      salary scott.emp.sal%TYPE,
 
      deptno scott.emp.deptno%TYPE
 
  );
 
  emp_record emp_record_type;
 
BEGIN
 
        select ename,sal,deptno into emp_record.name,emp_record.salary,emp_record.deptno from scott.emp where empno=&no;
 
        DBMS_OUTPUT.PUT_LINE('姓名:'||emp_record.name);   
 
        DBMS_OUTPUT.PUT_LINE('部門編號:'||emp_record.deptno);
 
END;

 --範例三:
--檢索資料
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        dept_record.dname:='administrator';
        dept_record.loc:='NC';
        insert into scott.dept values dept_record;
END;
--插入資料
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=2;
        dept_record.dname:='administrator';
        insert into scott.dept(deptno,dname) values(dept_record.deptno,dept_record.dname);
END; 
--更新資料
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        dept_record.dname:='HZY';
        update scott.dept set row=dept_record where deptno=dept_record.deptno;
END;
--刪除資料
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        delete from scott.dept where deptno=dept_record.deptno;
END;

PL/SQL Developer實用技巧分享

Oracle PL/SQL複合資料型別 

Oracle | PL/SQL Check約束用法詳解 

PL/SQL 儲存函數和預存程序 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.