oracle数据库基本数据类型简单描述及示例(三)

  1. Oracle sql基础
  2. 常用的DDL语句

         create tabele;

         create index;

         drop table;

         drop index;

         truncate;--清空数据表,删除数据表中的所有行

         alter table;--修改数据表

         alter table add constraint;--为已有数据表增加约束

  1. 常用的DML语句

         insert into;

         update;

         delete;

         select;

  1. 常用的DCL语言

         grant ;

         revoke;

         Lock;对数据库部分进行锁定

  1. 常用的TCL语句

         commit;

         rollback;

         savepoint;

  1. 数据类型char 不可变长1-2000字节,varchar2可变长,最大长度4000字节;
  2. 数值类型number(10,2);10代表长度,2表时小数点位数
  3. 日期类型 DATE
  4. LOB   CLOB能够存储大量字符数据,BLOB能够存储较大二进制对象,如图形、视频剪辑和声音文件等
  5. PLSQL支持所有的SQL数据类型
  6.         (2)标量:数值、字符、布尔、日期时间
  7.            1>. number 包括(decimal、float、integer、real)  
  8.            2>. oracle11g新加入一种数据类型:SIMPLE_INTEGER 范围(-2147483648 ~ +2147483647) 
  9.                数据类型不为空.对于此数据类型,ORACLE可以将这个数据类型的操作直接作用于硬件,从而提高性能。
  10.            3>. 字符型:SQL: char(长度2000)/varchar2(长度4000) PLSQL: 长度都是32767  
  11.            4>. boolean (逻辑判断 true、false、null)
  12.                v_num1 := 50;
  13.                v_num2 := 60;
  14.                v_bool := (v_num1 < v_num2);
  15.            5>. 日期时间(DATE、TIMESTAMP)
  16.         (3)LOB类型(最大可存储4G),用于存储大文本、图像、视频剪辑和声音剪辑等非结构化数据。
  17.            BLOB(二进制对象存储)
  18.            CLOB(大文本字符)
  19.            NCLOB(存储UNICODE字符)
  20.            BFILE(讲二进制存储在操作系统中,只读)
  21.         (4)复合类型
  22.            %TYPE      引用变量和数据库列的数据类型一致
  23.            %ROWTYPE   提供表示表中一行的记录类型
  24.         (5)对于常量 就是需要用CONSTANT关键字声明并且一定要初始化值 形如: c_salary_rate CONSTANT NUMBER(7,2) := 0.25;

        

  1. 大对象读取示例 
  • drop table MY_BOOK;
  • CREATE TABLE MY_BOOK(
  •        CHARTER_ID NUMBER,
  •        CHARTER_TEXT  CLOB
  • );
  • INSERT INTO MY_BOOK (CHARTER_ID, CHARTER_TEXT) VALUES(5,'oracle11g新加入一种数据类型:SIMPLE_INTEGER 范围(-2147483648 ~ +2147483647)  数据类型不为空.对于此数据类型,ORACLE可以将这个数据类型的操作直接作用于硬件,从而提高性能');
  • SELECT * FROM MY_BOOK M where M.CHARTER_ID = 5;
  • SELECT M.CHARTER_TEXT  FROM MY_BOOK M WHERE M.CHARTER_ID = 5;
  • set serveroutput  on;--命令行执行存储过程时必须先执行这句命令
  • DECLARE
  •     v_clob    CLOB;
  •     v_amount  INTEGER;
  •     v_offset  INTEGER;
  •     v_outdata VARCHAR2(1000);
  • BEGIN 
  •   SELECT M.CHARTER_TEXT INTO v_clob FROM MY_BOOK M WHERE M.CHARTER_ID = 5;
  •   v_amount := 300;
  •   v_offset := 1;
  •   dbms_lob.read(v_clob, v_amount, v_offset, v_outdata);
  •   dbms_output.put_line(v_outdata);
  • END;
  • commit;
  1. -- 002 复合类型
  2. -- %TYPE(列类型)     
  • DECLARE
  •    v_ename EMP.ENAME%TYPE;  --与emp表中的ename类型相同
  • BEGIN
  •    SELECT E.ENAME INTO v_ename FROM EMP E WHERE E.ENAME = 'SMITH';  
  •    DBMS_OUTPUT.put_line(v_ename);
  • END;
  1. --%TYPE绑定某一列 
  • DECLARE
  • v_empno emp.empno%TYPE;
  • v_ename emp.ename%TYPE;
  • v_hiredate emp.hiredate%TYPE;
  • BEGIN
  •   SELECT empno, ename, hiredate INTO v_empno, v_ename, v_hiredate FROM emp WHERE empno='7369';
  •   dbms_output.put_line('员工编号:' || v_empno);
  •   dbms_output.put_line('员工姓名:' || v_ename);
  •   dbms_output.put_line('入职日期:' || v_hiredate);
  • END;
  1. --使用%ROWTYPE定义游标类型的变量
  • DECLARE
  •   CURSOR cur_emp
  •   IS 
  •    SELECT E.EMPNO, E.ENAME, E.JOB  FROM EMP E;   --使用%rowtype定义游标类型的变量
  •    v_emprow cur_emp%ROWTYPE;
  • BEGIN
  •   OPEN cur_emp;
  •   LOOP
  •     FETCH cur_emp INTO v_emprow;
  1.     --注意退出游标
  •     EXIT WHEN cur_emp%NOTFOUND;
  •     dbms_output.put_line(v_emprow.empno || ' ' || v_emprow.ename || ' ' || v_emprow.job);
  •   END LOOP;     
  • END;
  1. --运行
  • SQL> set serveroutput  on;
  • SQL> 
  • SQL> DECLARE
  •   2    CURSOR cur_emp
  •   3    IS
  •   4     SELECT E.EMPNO, E.ENAME, E.JOB  FROM EMP E;   --使用%rowtype定义游标类型的变量
  •   5     v_emprow cur_emp%ROWTYPE;
  •   6  BEGIN
  •   7    OPEN cur_emp;
  •   8    LOOP
  •   9      FETCH cur_emp INTO v_emprow;
  •  10      --注意退出游标
  •  11      EXIT WHEN cur_emp%NOTFOUND;
  •  12      dbms_output.put_line(v_emprow.empno || ' ' || v_emprow.ename || ' ' || v_emprow.job);
  •  13    END LOOP;
  •  14  END;
  •  15  /
  • 7369 SMITH CLERK
  • 7499 ALLEN SALESMAN
  • 7521 WARD SALESMAN
  • 7566 JONES MANAGER
  • 7654 MARTIN SALESMAN
  • 7698 BLAKE MANAGER
  • 7782 CLARK MANAGER
  • 7788 SCOTT ANALYST
  • 7839 KING PRESIDENT
  • 7844 TURNER SALESMAN
  • 7876 ADAMS CLERK
  • 7900 JAMES CLERK
  • 7902 FORD ANALYST
  • 7934 MILLER CLERK
  • PL/SQL procedure successfully completed
  •  
  • create table student(
  •        sid number(8,0),
  •        name varchar2(20),
  •        sex char(2),
  •        birthday date,
  •        address varchar2(50)
  • );
  1. --自定义记录类型
  2. /**
  3. --定义一个记录类型
  4. --定义了一个my_record变量
  • declare
  • type emp_record_type is record(name emp.ename%type, salary emp.sal%type);
  • --定义一个my_record变量 这个变量的类型是emp_record_type
  • my_record emp_record_type; 
  • */
  • DECLARE

--自定义类型

  • TYPE emp_record_type IS RECORD(
  •      name      emp.ename%TYPE,
  •      salary    emp.sal%TYPE,
  •      title     emp.job%TYPE);
  • --变量接受自定义类型       
  • emp_record emp_record_type;
  • --执行程序
  • BEGIN
  •   SELECT E.ENAME, E.SAL, E.JOB INTO emp_record FROM EMP E 
  •   WHERE EMPNO = '7788';
  •   DBMS_OUTPUT.put_line('雇员名:' || emp_record.name);
  • END; 
  • ----------------------------运行-------------------------------------------
  • SQL> set serveroutput  on;
  • SQL> 
  • SQL> DECLARE
  •   2  --自定义类型
  •   3  TYPE emp_record_type IS RECORD(
  •   4       name      emp.ename%TYPE,
  •   5       salary    emp.sal%TYPE,
  •   6       title     emp.job%TYPE);
  •   7  --变量接受自定义类型
  •   8  emp_record emp_record_type;
  •   9  --执行程序
  •  10  BEGIN
  •  11    SELECT E.ENAME, E.SAL, E.JOB INTO emp_record FROM EMP E
  •  12    WHERE EMPNO = '7788';
  •  13    DBMS_OUTPUT.put_line('雇员名:' || emp_record.name);
  •  14  END;
  •  15  /
  • 雇员名:SCOTT
  • PL/SQL procedure successfully completed  
  1. -- 表类型(索引表)
  2. /**
  3. PL/SQL表只有俩列,一个索引列和一列(一列不代表一个字段)
  4. 通过索引列中的索引值来操作PL/SQL表中对应的用户自定义列.
  5. declare
  6. --定义了一个pl/sql表类型my_table_type, 该类型是用于存放emp.ename%type
  7. type my_table_type is table of emp.ename%type 
  8. --索引列必须是binary_integer类型的
  9. index by binary_integer
  10. --定义了一个my_table变量,这个变量的类型是 my_table_type
  11. my_table my_table_type
  12. */
  • 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 WHERE empno = 7788;
  •   dbms_output.put_line(ename_table(1));
  • END;
  • ----------------------------运行------------------------------------
  • SQL> set serveroutput  on;
  • SQL> 
  • SQL> DECLARE
  •   2  TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER;
  •   3  ename_table ename_table_type;
  •   4  BEGIN
  •   5    SELECT ename INTO ename_table(1) FROM emp WHERE empno = 7788;
  •   6    dbms_output.put_line(ename_table(1));
  •   7  END;
  •   8  /
  • SCOTT
  • PL/SQL procedure successfully completed

猜你喜欢

转载自blog.csdn.net/yangyang222222222/article/details/83544329