数据库第二章总结

一、基础复习
SQL> select * from scott.emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
14 rows selected
 

 
SQL> 
SQL> declare
  2   EMPNO_1  scott.emp.EMPNO%type;
  3    SAL_1 scott.emp.sal%type;
  4    begin
  5      select scott.emp.empno,scott.emp.sal into  EMPNO_1 , SAL_1  from scott.emp WHERE scott.emp.empno='7369';
  6      dbms_output.put_line('xinzi'||SAL_1);
  7      END;
  8  /
 
PL/SQL procedure successfully completed
 
SQL> SET SERVEROUTPUT ON;
SQL> 
SQL> declare
  2   EMPNO_1  scott.emp.EMPNO%type;
  3    SAL_1 scott.emp.sal%type;
  4    begin
  5      select scott.emp.empno,scott.emp.sal into  EMPNO_1 , SAL_1  from scott.emp WHERE scott.emp.empno='7369';
  6      dbms_output.put_line('xinzi'||SAL_1);
  7      END;
  8  /
 
xinzi800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>  DECLARE
  2      EMP_1  scott.emp%ROWTYPE;
  3      BEGIN
  4        SELECT * FROM scott.emp INTO EMP_1 FROM  scott.emp;
  5        END;
  6  /
 
DECLARE
    EMP_1  scott.emp%ROWTYPE;
    BEGIN
      SELECT * FROM scott.emp INTO EMP_1 FROM  scott.emp;
      END;
 
ORA-06550: 第 5 行, 第 31 列: 
PL/SQL: ORA-00933: SQL 命令未正确结束
ORA-06550: 第 5 行, 第 7 列: 
PL/SQL: SQL Statement ignored
 
SQL> 
SQL> DECLARE
  2      EMP_1  scott.emp%ROWTYPE;
  3      BEGIN
  4        SELECT *  INTO EMP_1 FROM  scott.emp;
  5        END;
  6  
  7  /
 
DECLARE
    EMP_1  scott.emp%ROWTYPE;
    BEGIN
      SELECT *  INTO EMP_1 FROM  scott.emp;
      END;
 
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 line 5
 
SQL> 
SQL>  DECLARE
  2      EMP_1  scott.emp%ROWTYPE;
  3      BEGIN
  4        SELECT *  INTO EMP_1 FROM  scott.emp WHERE scott.emp.empno='7369' ;
  5        END;
  6  /
 
PL/SQL procedure successfully completed
 
SQL> SELECT * FROM EMP_1 ;
 
SELECT * FROM EMP_1
 
ORA-00942: 表或视图不存在
 
SQL> 
SQL> declare
  2   EMPNO_1  scott.emp.EMPNO%type;
  3    SAL_1 scott.emp.sal%type;
  4    begin
  5      select scott.emp.empno,scott.emp.sal into  EMPNO_1 , SAL_1  from scott.emp WHERE scott.emp.empno='7369';
  6      dbms_output.put_line('xinzi'||SAL_1);
  7      END;
  8  /
 
xinzi800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>     DECLARE
  2      EMP_1  scott.emp%ROWTYPE;
  3      BEGIN
  4        SELECT *  INTO EMP_1 FROM  scott.emp WHERE scott.emp.empno='7369' ;
  5        END;
  6  /
 
PL/SQL procedure successfully completed
 
SQL> 
SQL> DECLARE
  2        V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3        V_ZJ NUMBER(6);
  4        v_empno scott.emp.empno%type;
  5        begin
  6           v_empno =&&a1;
  7           select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
  8           end;
  9  /
 
DECLARE
      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
      V_ZJ NUMBER(6);
      v_empno scott.emp.empno%type;
      begin
         v_empno =7096;
         select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
         end;
 
ORA-06550: 第 7 行, 第 18 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
 
SQL> 
SQL>  DECLARE
  2      EMP_1  scott.emp%ROWTYPE;
  3      BEGIN
  4        SELECT *  INTO EMP_1 FROM  scott.emp WHERE scott.emp.empno='7369' ;
  5        END;
  6  
  7  
  8  
  9        DECLARE
 10        V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
 11        V_ZJ NUMBER(6);
 12        v_empno scott.emp.empno%type;
 13        begin
 14           v_empno :=&&a1;
 15           select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
 16           end;
 17  
 18  /
 
DECLARE
    EMP_1  scott.emp%ROWTYPE;
    BEGIN
      SELECT *  INTO EMP_1 FROM  scott.emp WHERE scott.emp.empno='7369' ;
      END;



      DECLARE
      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
      V_ZJ NUMBER(6);
      v_empno scott.emp.empno%type;
      begin
         v_empno :=7096;
         select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
         end;
 
ORA-06550: 第 10 行, 第 7 列: 
PLS-00103: 出现符号 "DECLARE"
 
SQL> 
SQL>  DECLARE
  2        V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3        V_ZJ NUMBER(6);
  4        v_empno scott.emp.empno%type;
  5        begin
  6           v_empno :=&&a1;
  7           select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
  8           end;
  9  
 10  /
 
DECLARE
      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
      V_ZJ NUMBER(6);
      v_empno scott.emp.empno%type;
      begin
         v_empno :=7096;
         select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
         end;
 
ORA-01403: 未找到任何数据
ORA-06512: 在 line 8
 
SQL> 
SQL>   DECLARE
  2        V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3        V_ZJ NUMBER(6);
  4        v_empno scott.emp.empno%type;
  5        begin
  6           v_empno :=&&a2;
  7           select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
  8           end;
  9  /
 
DECLARE
      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
      V_ZJ NUMBER(6);
      v_empno scott.emp.empno%type;
      begin
         v_empno :=7011;
         select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
         end;
 
ORA-01403: 未找到任何数据
ORA-06512: 在 line 8
 
SQL> 
SQL>   DECLARE
  2        V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3        V_ZJ NUMBER(6);
  4        v_empno scott.emp.empno%type;
  5        begin
  6           v_empno :=&&a3;
  7           select deptno into  V_DEPTNO from scott.emp where empno=v_empno ;
  8           end;
  9  /
 
PL/SQL procedure successfully completed
 
SQL> create public synonym emp for scott.emp;
 
Synonym created
 
SQL> select * from emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
14 rows selected
二、IF-ELSE 
SQL> select * from xs;
 
select * from xs
 
ORA-00942: 表或视图不存在
 
SQL> 
SQL> declare
  2  v_sal scott.emp.sal%type;
  3  v_tax scott.emp.sal%type;
  4  begin
  5    select sal into v_sal from scott.emp where empno=7788;
  6    if v_sal>=3000 then v_tax:=v_sal*0.05;
  7    elsif v_sal >=2000 then v_tax:=v_sal*.0.02;
  8    else v_tax:=v_sal*.0.01;
  9    end if;
 10    dbms.output.put_line(v_tax);
 11    end;
 12  /
 
declare
v_sal scott.emp.sal%type;
v_tax scott.emp.sal%type;
begin
  select sal into v_sal from scott.emp where empno=7788;
  if v_sal>=3000 then v_tax:=v_sal*0.05;
  elsif v_sal >=2000 then v_tax:=v_sal*.0.02;
  else v_tax:=v_sal*.0.01;
  end if;
  dbms.output.put_line(v_tax);
  end;
 
ORA-06550: 第 8 行, 第 42 列: 
PLS-00103: 出现符号 ".02"在需要下列之一时:
 * & = - + ; < / > at in is
   mod remainder not rem <an exponent (**)> <> or != or ~= >= <=
   <> and or like LIKE2_ LIKE4_ LIKEC_ between || member
   SUBMULTISET_
符号 "*" 被替换为 ".02" 后继续。
ORA-06550: 第 9 行, 第 23 列: 
PLS-00103: 出现符号 ".01"在需要下列之一时:
 * & = - + ; < / > at in is
   mod remainder not rem <an exponent (**)> <> or != or ~= >= <=
   <> and or like LIKE2_ LIKE4_ LIKEC_ between || member
   SUBMULTISET_
符号 "*" 被替换为 ".01" 后继
 
SQL> 
SQL> declare
  2  v_sal scott.emp.sal%type;
  3  v_tax scott.emp.sal%type;
  4  begin
  5    select sal into v_sal from scott.emp where empno=7788;
  6    if v_sal>=3000 then v_tax:=v_sal*0.05;
  7    elsif v_sal >=2000 then v_tax:=v_sal*0.02;
  8    else v_tax:=v_sal*0.01;
  9    end if;
 10    dbms.output.put_line(v_tax);
 11    end;
 12  /
 
declare
v_sal scott.emp.sal%type;
v_tax scott.emp.sal%type;
begin
  select sal into v_sal from scott.emp where empno=7788;
  if v_sal>=3000 then v_tax:=v_sal*0.05;
  elsif v_sal >=2000 then v_tax:=v_sal*0.02;
  else v_tax:=v_sal*0.01;
  end if;
  dbms.output.put_line(v_tax);
  end;
 
ORA-06550: 第 11 行, 第 3 列: 
PLS-00201: 必须声明标识符 'DBMS.OUTPUT'
ORA-06550: 第 11 行, 第 3 列: 
PL/SQL: Statement ignored
 
SQL> 
SQL> declare
  2  v_sal scott.emp.sal%type;
  3  v_tax scott.emp.sal%type;
  4  begin
  5    select sal into v_sal from scott.emp where empno=7788;
  6    if v_sal>=3000 then v_tax:=v_sal*0.05;
  7    elsif v_sal >=2000 then v_tax:=v_sal*0.02;
  8    else v_tax:=v_sal*0.01;
  9    end if;
 10   DBMS_OUTPUT.PUT_LINE(V_TAX);
 11    end;
 12  /
 
PL/SQL procedure successfully completed
 
SQL> SET STARTSEVER ON;
Cannot SET STARTSEVER
 
SQL> SET SERVEROUTPUT ON;
SQL> 
SQL> declare
  2  v_sal scott.emp.sal%type;
  3  v_tax scott.emp.sal%type;
  4  begin
  5    select sal into v_sal from scott.emp where empno=7788;
  6    if v_sal>=3000 then v_tax:=v_sal*0.05;
  7    elsif v_sal >=2000 then v_tax:=v_sal*0.02;
  8    else v_tax:=v_sal*0.01;
  9    end if;
 10   DBMS_OUTPUT.PUT_LINE(V_TAX);
 11    end;
 12  /
 
150
 
PL/SQL procedure successfully completed
 
SQL> 
SQL> DECLARE
  2  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  3  V_ZJ NUMBER(4);
  4  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  5  BEGIN
  6    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  7    EMPNO=&&V_EMPNO;
  8    IF V_DEPTNO=10 THEN V_ZJ=300;
  9    ELSIF V_DEPTNO=20 THEN V_ZJ=500;
 10    ELSE V_ZJ=700;
 11     END IF;
 12    UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=&V_EMPNO;
 13   END;
 14  /
 
DECLARE
V_EMPNO SCOTT.EMP.EMPNO%TYPE;
V_ZJ NUMBER(4);
V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  EMPNO=10;
  IF V_DEPTNO=10 THEN V_ZJ=300;
  ELSIF V_DEPTNO=20 THEN V_ZJ=500;
  ELSE V_ZJ=700;
   END IF;
  UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=10;
 END;
 
ORA-06550: 第 9 行, 第 27 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
ORA-06550: 第 10 行, 第 30 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
ORA-06550: 第 11 行, 第 12 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
 
SQL> 
SQL> DECLARE
  2  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  3  V_ZJ NUMBER(4);
  4  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  5  BEGIN
  6    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  7    EMPNO=&&V_EMPNO;
  8    IF V_DEPTNO=10 THEN V_ZJ:=300;
  9    ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
 10    ELSE V_ZJ=700;
 11     END IF;
 12    UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=&V_EMPNO;
 13   END;
 14  /
 
DECLARE
V_EMPNO SCOTT.EMP.EMPNO%TYPE;
V_ZJ NUMBER(4);
V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  EMPNO=10;
  IF V_DEPTNO=10 THEN V_ZJ:=300;
  ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
  ELSE V_ZJ=700;
   END IF;
  UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=10;
 END;
 
ORA-06550: 第 11 行, 第 12 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
 
SQL> 
SQL> DECLARE
  2  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  3  V_ZJ NUMBER(4);
  4  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  5  BEGIN
  6    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  7    EMPNO=&&V_EMPNO;
  8    IF V_DEPTNO=10 THEN V_ZJ:=300;
  9    ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
 10    ELSE V_ZJ:=700;
 11     END IF;
 12    UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=&V_EMPNO;
 13   END;
 14  
 15  /
 
DECLARE
V_EMPNO SCOTT.EMP.EMPNO%TYPE;
V_ZJ NUMBER(4);
V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  EMPNO=10;
  IF V_DEPTNO=10 THEN V_ZJ:=300;
  ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
  ELSE V_ZJ:=700;
   END IF;
  UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=10;
 END;
 
ORA-01403: 未找到任何数据
ORA-06512: 在 line 7
 
SQL> 
SQL> DECLARE
  2  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  3  V_ZJ NUMBER(4);
  4  V_DEPTNO1 SCOTT.EMP.DEPTNO%TYPE;
  5  BEGIN
  6    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  7    EMPNO=&&V_EMPNO1;
  8    IF V_DEPTNO=10 THEN V_ZJ:=300;
  9    ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
 10    ELSE V_ZJ:=700;
 11     END IF;
 12    UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=&V_EMPNO1;
 13   END;
 14  
 15  /
 
DECLARE
V_EMPNO SCOTT.EMP.EMPNO%TYPE;
V_ZJ NUMBER(4);
V_DEPTNO1 SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  EMPNO=7788;
  IF V_DEPTNO=10 THEN V_ZJ:=300;
  ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
  ELSE V_ZJ:=700;
   END IF;
  UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=7788;
 END;
 
ORA-06550: 第 7 行, 第 32 列: 
PLS-00201: 必须声明标识符 'V_DEPTNO'
ORA-06550: 第 7 行, 第 41 列: 
PL/SQL: ORA-00904: : 标识符无效
ORA-06550: 第 7 行, 第 3 列: 
PL/SQL: SQL Statement ignored
ORA-06550: 第 9 行, 第 6 列: 
PLS-00201: 必须声明标识符 'V_DEPTNO'
ORA-06550: 第 9 行, 第 3 列: 
PL/SQL: Statement ignored
 
SQL> SELECT * FROM SCOTT.EMP;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
14 rows selected
 
SQL> 
SQL> DECLARE
  2  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  3  V_ZJ NUMBER(4);
  4  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  5  BEGIN
  6    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE
  7    EMPNO=&&V_EMPNO1;
  8    IF V_DEPTNO=10 THEN V_ZJ:=300;
  9    ELSIF V_DEPTNO=20 THEN V_ZJ:=500;
 10    ELSE V_ZJ:=700;
 11     END IF;
 12    UPDATE SCOTT.EMP SET SAL=V_ZJ+EMP.SAL WHERE EMPNO=&V_EMPNO1;
 13   END;
 14  
 15  /
 
PL/SQL procedure successfully completed
 
SQL> 
SQL> DECLARE
  2  V1 VARCHAR2(10)='HAO';
  3  BEGIN
  4    CASE V1
  5      WHEN 'HAO' THEN DBMS_OUTPUT.put_line('HAOBA');
  6      WHEN 'NO' THEN DBMS_OUTPUT.put_line('DDDD');
  7      ELSE DBMS_OUTPUT.put_line('CHA');
  8      END CASE;
  9      END;
 10  /
 
DECLARE
V1 VARCHAR2(10)='HAO';
BEGIN
  CASE V1
    WHEN 'HAO' THEN DBMS_OUTPUT.put_line('HAOBA');
    WHEN 'NO' THEN DBMS_OUTPUT.put_line('DDDD');
    ELSE DBMS_OUTPUT.put_line('CHA');
    END CASE;
    END;
三、Case
SQL> 
SQL> DECLARE
  2  V1 VARCHAR2(10):='HAO';
  3  BEGIN
  4    CASE V1
  5      WHEN 'HAO' THEN DBMS_OUTPUT.put_line('HAOBA');
  6      WHEN 'NO' THEN DBMS_OUTPUT.put_line('DDDD');
  7      ELSE DBMS_OUTPUT.put_line('CHA');
  8      END CASE;
  9      END;
 10  
 11  /
 
HAOBA
 
PL/SQL procedure successfully completed
 
SQL> DECLARE
  2  
  2     DECLARE
  3      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  4      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  5      V_ADD  SCOTT.EMP.SAL%TYPE;
  6      BEGIN
  7         V_EMPNO=&V_EMPNO1;
  8         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  9         CASE V_DEPTNO
 10           WHEN 10 THEN V_ADD:=100;
 11           WHEN 20 THEN V_ADD:=200;
 12           WHEN 30 THEN V_ADD:=500;
 13           ELSE V_ADD:=600;
 14           END CASE;
 15            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 16            END;
 17  /
 
DECLARE
   DECLARE
    V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
    V_EMPNO SCOTT.EMP.EMPNO%TYPE;
    V_ADD  SCOTT.EMP.SAL%TYPE;
    BEGIN
       V_EMPNO=7788;
       SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
       CASE V_DEPTNO
         WHEN 10 THEN V_ADD:=100;
         WHEN 20 THEN V_ADD:=200;
         WHEN 30 THEN V_ADD:=500;
         ELSE V_ADD:=600;
         END CASE;
          UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
          END;
 
ORA-06550: 第 3 行, 第 4 列: 
PLS-00103: 出现符号 "DECLARE"在需要下列之一时:
 begin function package
   pragma procedure subtype type use <an identifier>
   <a double-quoted delimited-identifier> form current cursor
符号 "begin" 被替换为 "DECLARE" 后继续。
ORA-06550: 第 8 行, 第 15 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
 
SQL> 
SQL>  DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      BEGIN
  6         V_EMPNO=&V_EMPNO1;
  7         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  8         CASE V_DEPTNO
  9           WHEN 10 THEN V_ADD:=100;
 10           WHEN 20 THEN V_ADD:=200;
 11           WHEN 30 THEN V_ADD:=500;
 12           ELSE V_ADD:=600;
 13           END CASE;
 14            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 15            END;
 16  /
 
DECLARE
    V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
    V_EMPNO SCOTT.EMP.EMPNO%TYPE;
    V_ADD  SCOTT.EMP.SAL%TYPE;
    BEGIN
       V_EMPNO=7788;
       SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
       CASE V_DEPTNO
         WHEN 10 THEN V_ADD:=100;
         WHEN 20 THEN V_ADD:=200;
         WHEN 30 THEN V_ADD:=500;
         ELSE V_ADD:=600;
         END CASE;
          UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
          END;
 
ORA-06550: 第 7 行, 第 15 列: 
PLS-00103: 出现符号 "="在需要下列之一时:
 := . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
 
SQL> 
SQL>  DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      BEGIN
  6         V_EMPNO:=&V_EMPNO1;
  7         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  8         CASE V_DEPTNO
  9           WHEN 10 THEN V_ADD:=100;
 10           WHEN 20 THEN V_ADD:=200;
 11           WHEN 30 THEN V_ADD:=500;
 12           ELSE V_ADD:=600;
 13           END CASE;
 14            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 15            END;
 16  /
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>     DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      BEGIN
  6         V_EMPNO:=&V_EMPNO1;
  7         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  8         CASE V_DEPTNO
  9           WHEN 10 THEN V_ADD:=100;
 10           WHEN 20 THEN V_ADD:=200;
 11           WHEN 30 THEN V_ADD:=500;
 12           ELSE V_ADD:=600;
 13           END CASE;
 14            DBMS_OUTPUT.put_line( SCOTT.EMP.SAL);
 15            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 16            DBMS_OUTPUT.put_line( SCOTT.EMP.SAL);
 17            END;
 18  /
 
DECLARE
    V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
    V_EMPNO SCOTT.EMP.EMPNO%TYPE;
    V_ADD  SCOTT.EMP.SAL%TYPE;
    BEGIN
       V_EMPNO:=7788;
       SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
       CASE V_DEPTNO
         WHEN 10 THEN V_ADD:=100;
         WHEN 20 THEN V_ADD:=200;
         WHEN 30 THEN V_ADD:=500;
         ELSE V_ADD:=600;
         END CASE;
          DBMS_OUTPUT.put_line( SCOTT.EMP.SAL);
          UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
          DBMS_OUTPUT.put_line( SCOTT.EMP.SAL);
          END;
 
ORA-06550: 第 15 行, 第 43 列: 
PLS-00357: 在此上下文中不允许表, 视图或序列引用 'SCOTT.EMP.SAL'
ORA-06550: 第 15 行, 第 11 列: 
PL/SQL: Statement ignored
ORA-06550: 第 17 行, 第 43 列: 
PLS-00357: 在此上下文中不允许表, 视图或序列引用 'SCOTT.EMP.SAL'
ORA-06550: 第 17 行, 第 11 列: 
PL/SQL: Statement ignored
 
SQL> 
SQL>  DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      V_SAL  SCOTT.EMP.SAL%TYPE;
  6      BEGIN
  7         V_EMPNO:=&V_EMPNO1;
  8         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  9         CASE V_DEPTNO
 10           WHEN 10 THEN V_ADD:=100;
 11           WHEN 20 THEN V_ADD:=200;
 12           WHEN 30 THEN V_ADD:=500;
 13           ELSE V_ADD:=600;
 14           END CASE;
 15  
 16            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 17           IF SQL%FOUND THEN
 18             DBMS_OUTPUT.put_line('SUC');
 19             SELECT SAL INTO V_SAL FROM  SCOTT.EMP WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 20            END;
 21  /
 
DECLARE
    V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
    V_EMPNO SCOTT.EMP.EMPNO%TYPE;
    V_ADD  SCOTT.EMP.SAL%TYPE;
    V_SAL  SCOTT.EMP.SAL%TYPE;
    BEGIN
       V_EMPNO:=7788;
       SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
       CASE V_DEPTNO
         WHEN 10 THEN V_ADD:=100;
         WHEN 20 THEN V_ADD:=200;
         WHEN 30 THEN V_ADD:=500;
         ELSE V_ADD:=600;
         END CASE;

          UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
         IF SQL%FOUND THEN
           DBMS_OUTPUT.put_line('SUC');
           SELECT SAL INTO V_SAL FROM  SCOTT.EMP WHERE SCOTT.EMP.EMPNO=V_EMPNO;
          END;
 
ORA-06550: 第 21 行, 第 14 列: 
PLS-00103: 出现符号 ";"在需要下列之一时:
 if
 
SQL> 
SQL> DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      V_SAL  SCOTT.EMP.SAL%TYPE;
  6      BEGIN
  7         V_EMPNO:=&V_EMPNO1;
  8         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  9         CASE V_DEPTNO
 10           WHEN 10 THEN V_ADD:=100;
 11           WHEN 20 THEN V_ADD:=200;
 12           WHEN 30 THEN V_ADD:=500;
 13           ELSE V_ADD:=600;
 14           END CASE;
 15  
 16            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 17           IF SQL%FOUND THEN
 18             DBMS_OUTPUT.put_line('SUC');
 19             SELECT SAL INTO V_SAL FROM  SCOTT.EMP WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 20            END IF;
 21            END;
 22  
 23  /
 
SUC
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>     DECLARE
  2      V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
  3      V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  4      V_ADD  SCOTT.EMP.SAL%TYPE;
  5      V_SAL  SCOTT.EMP.SAL%TYPE;
  6      BEGIN
  7         V_EMPNO:=&V_EMPNO1;
  8         SELECT  SCOTT.EMP.DEPTNO INTO V_DEPTNO FROM SCOTT.EMP WHERE SCOTT.EMP.EMPNO= V_EMPNO;
  9         CASE V_DEPTNO
 10           WHEN 10 THEN V_ADD:=100;
 11           WHEN 20 THEN V_ADD:=200;
 12           WHEN 30 THEN V_ADD:=500;
 13           ELSE V_ADD:=600;
 14           END CASE;
 15  
 16            UPDATE SCOTT.EMP SET SCOTT.EMP.SAL=SCOTT.EMP.SAL+V_ADD WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 17           IF SQL%FOUND THEN
 18             DBMS_OUTPUT.put_line('SUC');
 19             SELECT SAL INTO V_SAL FROM  SCOTT.EMP WHERE SCOTT.EMP.EMPNO=V_EMPNO;
 20             DBMS_OUTPUT.put_line(V_SAL);
 21            END IF;
 22            END;
 23  /
 
SUC
4100
 
PL/SQL procedure successfully completed
 
SQL> 
SQL> DECLARE
  2            SCORE INT :=100;
  3            BEGIN
  4              CASE
  5                WHEN SCORE>=90 THEN DBMS_OUTPUT.put_line('YOUXIU');
  6                WHEN  SCORE>=80 THEN DBMS_OUTPUT.put_line('LIANGHAO');
  7                ELSE DBMS_OUTPUT.put_line('CHA');
  8                END CASE;
  9                END;
 10  /
 
YOUXIU
 
PL/SQL procedure successfully completed
 
SQL
SQL> 
SQL> SELECT EMPNO,ENAME,HIREDATE ,
  2                (
  3                CASE
  4                  WHEN TRUNK(SYSDATE-HIREDATE)>360 THEN 'GUOQI'
  5                  WHEN HIREDATE IS NULL THEN 'MEI';
 
SELECT EMPNO,ENAME,HIREDATE ,
              (
              CASE
                WHEN TRUNK(SYSDATE-HIREDATE)>360 THEN 'GUOQI'
                WHEN HIREDATE IS NULL THEN 'MEI'
 
ORA-00905: 缺失关键字
SQL>                 ELSE 'MEIGUOQI';
 
ELSE 'MEIGUOQI'
 
ORA-00900: 无效 SQL 语句
SQL>                 END
  2                  )
  3                  AS SHIFOUGUOQI FROM SCOTT.EMP;
 
END
                )
                AS SHIFOUGUOQI FROM SCOTT.EMP
 
ORA-00900: 无效 SQL 语句
SQL>                 END;
 
END
 
ORA-00900: 无效 SQL 语句
 
SQL> 
SQL> SELECT EMPNO,ENAME,HIREDATE ,
  2                (
  3                CASE
  4                  WHEN TRUNK(SYSDATE-HIREDATE)>360 THEN 'GUOQI'
  5                  WHEN HIREDATE IS NULL THEN 'MEI'
  6                  ELSE 'MEIGUOQI'
  7                  END
  8                  )
  9                  AS SHIFOUGUOQI FROM SCOTT.EMP;
 
SELECT EMPNO,ENAME,HIREDATE ,
              (
              CASE
                WHEN TRUNK(SYSDATE-HIREDATE)>360 THEN 'GUOQI'
                WHEN HIREDATE IS NULL THEN 'MEI'
                ELSE 'MEIGUOQI'
                END
                )
                AS SHIFOUGUOQI FROM SCOTT.EMP
 
ORA-00904: "TRUNK": 标识符无效
 
SQL> 
SQL>     SELECT EMPNO,ENAME,HIREDATE ,
  2                (
  3                CASE
  4                  WHEN TRUNC(SYSDATE-HIREDATE)>360 THEN 'GUOQI'
  5                  WHEN HIREDATE IS NULL THEN 'MEI'
  6                  ELSE 'MEIGUOQI'
  7                  END
  8                  )
  9                  AS SHIFOUGUOQI FROM SCOTT.EMP;
 
EMPNO ENAME      HIREDATE    SHIFOUGUOQI
----- ---------- ----------- -----------
 7369 SMITH      1980/12/17  GUOQI
 7499 ALLEN      1981/2/20   GUOQI
 7521 WARD       1981/2/22   GUOQI
 7566 JONES      1981/4/2    GUOQI
 7654 MARTIN     1981/9/28   GUOQI
 7698 BLAKE      1981/5/1    GUOQI
 7782 CLARK      1981/6/9    GUOQI
 7788 SCOTT      1987/4/19   GUOQI
 7839 KING       1981/11/17  GUOQI
 7844 TURNER     1981/9/8    GUOQI
 7876 ADAMS      1987/5/23   GUOQI
 7900 JAMES      1981/12/3   GUOQI
 7902 FORD       1981/12/3   GUOQI
 7934 MILLER     1982/1/23   GUOQI
 
14 rows selected
 四、循环
SQL>   DECLARE
  2           S NUMBER(4):=1;
  3           N NUMBER(4):=2;
  4           BEGIN
  5             LOOP
  6               S:=S*N;
  7               N:=N+1;
  8               EXIT WHEN N>10;
  9               END LOOP;
 10               DBMS_OUTPUT.put_line(TO_CHAR(S));
 11               END;
 12  /
 
DECLARE
         S NUMBER(4):=1;
         N NUMBER(4):=2;
         BEGIN
           LOOP
             S:=S*N;
             N:=N+1;
             EXIT WHEN N>10;
             END LOOP;
             DBMS_OUTPUT.put_line(TO_CHAR(S));
             END;
 
ORA-06502: PL/SQL: 数字或值错误 :  数值精度太高
ORA-06512: 在 line 7
 
SQL> 
SQL>  DECLARE
  2           S NUMBER :=1;
  3           N NUMBER :=2;
  4           BEGIN
  5             LOOP
  6               S:=S*N;
  7               N:=N+1;
  8               EXIT WHEN N>10;
  9               END LOOP;
 10               DBMS_OUTPUT.put_line(TO_CHAR(S));
 11               END;
 12  /
 
3628800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>          DECLARE
  2           S NUMBER :=1;
  3           N NUMBER :=2;
  4           BEGIN
  5            WHILE(N<=10)
  6            LOOP
  7              S:=S*N;
  8              N:=N+1;
  9              END LOOP;
 10              DBMS_OUTPUT.put_line(TO_CHAR(S));
 11              END
 12  /
 
DECLARE
         S NUMBER :=1;
         N NUMBER :=2;
         BEGIN
          WHILE(N<=10)
          LOOP
            S:=S*N;
            N:=N+1;
            END LOOP;
            DBMS_OUTPUT.put_line(TO_CHAR(S));
            END
 
ORA-06550: 第 14 行, 第 0 列: 
PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
 ; <an identifier>
   <a double-quoted delimited-identifier>
符号 ";" 被替换为 "end-of-file" 后继续。
 
SQL> 
SQL>          DECLARE
  2           S NUMBER :=1;
  3           N NUMBER :=2;
  4           BEGIN
  5            WHILE N<=10
  6            LOOP
  7              S:=S*N;
  8              N:=N+1;
  9              END LOOP;
 10              DBMS_OUTPUT.put_line(TO_CHAR(S));
 11              END;
 12  /
 
3628800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>          DECLARE
  2           S NUMBER :=1;
  3           N NUMBER :=2;
  4           BEGIN
  5           for n in 2..10
  6             loop
  7               s:=s*n;
  8               end loop;
  9                DBMS_OUTPUT.put_line(TO_CHAR(S));
 10              END;
 11  
 12  
 13  /
 
3628800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>          DECLARE
  2           S NUMBER :=1;
  3           N NUMBER :=2;
  4           BEGIN
  5           for n in reverse  1..10
  6             loop
  7               s:=s*n;
  8               end loop;
  9                DBMS_OUTPUT.put_line(TO_CHAR(S));
 10              END;
 11  
 12  /
 
3628800
 
PL/SQL procedure successfully completed
 
SQL> 
SQL>  declare
  2               a:int ;
  3               b:int;
  4               c:int;
  5               i:int;
  6               begin
  7                 for i in 100..999
  8                   loop
  9                 a:=trunc(i/100);
 10                 b:=trunc(i/10)mod10;
 11                 c:=i%10;
 12                 if (i=a*a*a+b*b*b+c*c*c)
 13                    DBMS_OUTPUT.put_line(i);
 14                    end if;
 15                    end loop;
 16                    end;
 17  /
 
declare
             a:int ;
             b:int;
             c:int;
             i:int;
             begin
               for i in 100..999
                 loop
               a:=trunc(i/100);
               b:=trunc(i/10)mod10;
               c:=i%10;
               if (i=a*a*a+b*b*b+c*c*c)
                  DBMS_OUTPUT.put_line(i);
                  end if;
                  end loop;
                  end;
 
ORA-06550: 第 3 行, 第 15 列: 
PLS-00103: 出现符号 ""在需要下列之一时:
 constant exception
   <an identifier> <a double-quoted delimited-identifier> table
   LONG_ double ref char time timestamp interval date binary
   national character nchar
 
SQL> 
SQL>   declare
  2               a int ;
  3               b int;
  4               c int;
  5               i int;
  6               begin
  7                 for i in 100..999
  8                   loop
  9                 a:=trunc(i/100);
 10                 b:=trunc(i/10)mod10;
 11                 c:=i%10;
 12                 if (i=a*a*a+b*b*b+c*c*c)
 13                    DBMS_OUTPUT.put_line(i);
 14                    end if;
 15                    end loop;
 16                    end;
 17  /
 
declare
             a int ;
             b int;
             c int;
             i int;
             begin
               for i in 100..999
                 loop
               a:=trunc(i/100);
               b:=trunc(i/10)mod10;
               c:=i%10;
               if (i=a*a*a+b*b*b+c*c*c)
                  DBMS_OUTPUT.put_line(i);
                  end if;
                  end loop;
                  end;
 
ORA-06550: 第 11 行, 第 30 列: 
PLS-00103: 出现符号 "MOD10"在需要下列之一时:
 . ( * % & = - + ; < / >
   at in is mod remainder not rem <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between || multiset member SUBMULTISET_
 
SQL> 
SQL>             declare
  2               a int ;
  3               b int;
  4               c int;
  5               i int;
  6               begin
  7                 for i in 100..999
  8                   loop
  9                 a:=trunc(i/100);
 10                 b:=trunc(i/10)mod 10;
 11                 c:=i%10;
 12                 if (i=a*a*a+b*b*b+c*c*c)
 13                    DBMS_OUTPUT.put_line(i);
 14                    end if;
 15                    end loop;
 16                    end;
 17  /
 
declare
             a int ;
             b int;
             c int;
             i int;
             begin
               for i in 100..999
                 loop
               a:=trunc(i/100);
               b:=trunc(i/10)mod 10;
               c:=i%10;
               if (i=a*a*a+b*b*b+c*c*c)
                  DBMS_OUTPUT.put_line(i);
                  end if;
                  end loop;
                  end;
 
ORA-06550: 第 12 行, 第 21 列: 
PLS-00103: 出现符号 "10"在需要下列之一时:
 ( type <an identifier>
   <a double-quoted delimited-identifier>
ORA-06550: 第 14 行, 第 19 列: 
PLS-00103: 出现符号 "DBMS_OUTPUT"在需要下列之一时:
 * & = - + < / > at
   in is mod remainder not rem then <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between overlaps || multiset year DAY_ member S
ORA-06550: 第 14 行, 第 42 列: 
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( * % & = - + < / > at in
   is mod remainder not rem then <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between || member SUBMULTISET_
 
SQL> 
SQL>             declare
  2               a int ;
  3               b int;
  4               c int;
  5               i int;
  6               begin
  7                 for i in 100..999
  8                   loop
  9                 a:=trunc(i/100);
 10                 b:=trunc(i/10)mod 10;
 11                 c:=i mod 10;
 12                 if (i=a*a*a+b*b*b+c*c*c)
 13                    DBMS_OUTPUT.put_line(i);
 14                    end if;
 15                    end loop;
 16                    end;
 17  
 18  /
 
declare
             a int ;
             b int;
             c int;
             i int;
             begin
               for i in 100..999
                 loop
               a:=trunc(i/100);
               b:=trunc(i/10)mod 10;
               c:=i mod 10;
               if (i=a*a*a+b*b*b+c*c*c)
                  DBMS_OUTPUT.put_line(i);
                  end if;
                  end loop;
                  end;
 
ORA-06550: 第 14 行, 第 19 列: 
PLS-00103: 出现符号 "DBMS_OUTPUT"在需要下列之一时:
 * & = - + < / > at
   in is mod remainder not rem then <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between overlaps || multiset year DAY_ member SUBMULTISET_
符号 "*" 被替换为 "DBMS_OUTPUT" 后继续。
ORA-06550: 第 14 行, 第 42 列: 
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( * % & = - + < / > at in
   is mod remainder not rem then <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between || member SUBMULTISET_
 
SQL> 
SQL> declare
  2               a int ;
  3               b int;
  4               c int;
  5               i int;
  6               begin
  7                 for i in 100..999
  8                   loop
  9                 a:=trunc(i/100);
 10                 b:=trunc(i/10)mod 10;
 11                 c:=i mod 10;
 12                 if (i=a*a*a+b*b*b+c*c*c)
 13                    then DBMS_OUTPUT.put_line(i);
 14                    end if;
 15                    end loop;
 16                    end;
 17  
 18  /
 
153
370
371
407
 
PL/SQL procedure successfully completed
 
SQL> 

一、数据文件

1、建立表空间并查询数据文件(利用dba_data_files)

SQL> create tablespace t2 datafile 'D:\a2.dbf' size 5m;

Tablespace created


SQL> select * from dba_data_files;

FILE_NAME                                                                           FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUTOEXTENSIBLE   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
-------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- -------------
F:\APP\ASUS\ORADATA\ORCL\USERS01.DBF                                                      4 USERS                             5242880        640 AVAILABLE            4 YES            3435972198    4194302          160    4194304         512 ONLINE
F:\APP\ASUS\ORADATA\ORCL\UNDOTBS01.DBF                                                    3 UNDOTBS1                         99614720      12160 AVAILABLE            3 YES            3435972198    4194302          640   98566144       12032 ONLINE
F:\APP\ASUS\ORADATA\ORCL\SYSAUX01.DBF                                                     2 SYSAUX                          723517440      88320 AVAILABLE            2 YES            3435972198    4194302         1280  722468864       88192 ONLINE
F:\APP\ASUS\ORADATA\ORCL\SYSTEM01.DBF                                                     1 SYSTEM                          734003200      89600 AVAILABLE            1 YES            3435972198    4194302         1280  732954624       89472 SYSTEM
F:\APP\ASUS\ORADATA\ORCL\EXAMPLE01.DBF                                                    5 EXAMPLE                         104857600      12800 AVAILABLE            5 YES            3435972198    4194302           80  103809024       12672 ONLINE
D:\T1.DBF                                                                                 6 TS1                               5242880        640 AVAILABLE            6 NO                      0          0            0    4194304         512 ONLINE
D:\T2.DBF                                                                                 7 TS1                              10485760       1280 AVAILABLE            7 NO                      0          0            0    9437184        1152 ONLINE
D:\T3.DBF                                                                                 8 TS2                              12582912       1536 AVAILABLE            8 NO                      0          0            0   11534336        1408 ONLINE
D:\OK.DBF                                                                                 9 ORAC                             10485760       1280 AVAILABLE            9 NO                      0          0            0    9437184        1152 ONLINE
D:\OK2.DBF                                                                               10 BIGTBS                           20971520       2560 AVAILABLE         1024 NO                      0          0            0   19922944        2432 ONLINE
D:\A1.DBF                                                                                11 T1                                5242880        640 AVAILABLE           11 NO                      0          0            0    4194304         512 ONLINE
D:\A2.DBF                                                                                12 T2                                5242880        640 AVAILABLE           12 NO                      0          0            0    4194304         512 ONLINE

12 rows selected

建立表空间时附带多个数据文件写法

SQL> create tablespace t4 datafile  'D:\a4.dbf' size 5m,'D:\a5.dbf' size 5m;

Tablespace created

 

然后利用V$DATAFILE查询,似乎显示的数据文件信息只是与上面顺序不同罢了

SQL> SELECT * FROM V$DATAFILE;

     FILE# CREATION_CHANGE# CREATION_TIME        TS#     RFILE# STATUS  ENABLED    CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME   OFFLINE_CHANGE# ONLINE_CHANGE# ONLINE_TIME      BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE NAME                                                                             PLUGGED_IN BLOCK1_OFFSET AUX_NAME                                                                         FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIME FOREIGN_DBID FOREIGN_CREATION_CHANGE# FOREIGN_CREATION_TIME PLUGGED_READONLY PLUGIN_CHANGE# PLUGIN_RESETLOGS_CHANGE# PLUGIN_RESETLOGS_TIME
---------- ---------------- ------------- ---------- ---------- ------- ---------- ------------------ --------------- --------------------- ------------------ ------------ ----------- --------------- -------------- ----------- ---------- ---------- ------------ ---------- -------------------------------------------------------------------------------- ---------- ------------- -------------------------------------------------------------------------------- ------------------- -------------------- ------------ ------------------------ --------------------- ---------------- -------------- ------------------------ ---------------------
         1                7 2010/3/30 10:          0          1 SYSTEM  READ WRITE            1958607 2019/3/17 21:06                     0                                                      947454         947455 2019/3/1 13  734003200      89600            0       8192 F:\APP\ASUS\ORADATA\ORCL\SYSTEM01.DBF                                                     0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         2             2160 2010/3/30 10:          1          2 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                      947454         947455 2019/3/1 13  723517440      88320            0       8192 F:\APP\ASUS\ORADATA\ORCL\SYSAUX01.DBF                                                     0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         3           944668 2010/3/30 11:          2          3 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                      947454         947455 2019/3/1 13   99614720      12160            0       8192 F:\APP\ASUS\ORADATA\ORCL\UNDOTBS01.DBF                                                    0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         4            17981 2010/3/30 10:          4          4 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                      947454         947455 2019/3/1 13    5242880        640            0       8192 F:\APP\ASUS\ORADATA\ORCL\USERS01.DBF                                                      0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         5           976600 2019/3/1 13:0          6          5 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                      976600         976605 2019/3/1 13  104857600      12800    104857600       8192 F:\APP\ASUS\ORADATA\ORCL\EXAMPLE01.DBF                                                    0          8192 NONE                                                                                               0                        4043674800                   948026 2010/3/30 11:10:01    NO                       968202                   947455 2019/3/1 13:02:42
         6          1730315 2019/3/14 15:          7          6 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                           0              0                5242880        640      5242880       8192 D:\T1.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         7          1730319 2019/3/14 15:          7          7 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                           0              0               10485760       1280     10485760       8192 D:\T2.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         8          1731995 2019/3/14 16:          8          8 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                           0              0               12582912       1536     12582912       8192 D:\T3.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
         9          1736099 2019/3/14 17:          9          9 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                           0              0               10485760       1280     10485760       8192 D:\OK.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
        10          1736493 2019/3/14 17:         10       1024 ONLINE  READ WRITE            1958607 2019/3/17 21:06                     0                                                           0              0               20971520       2560     20971520       8192 D:\OK2.DBF                                                                                0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
        11          1959138 2019/3/17 21:         11         11 ONLINE  READ WRITE            1959139 2019/3/17 21:21                     0                                                           0              0                5242880        640      5242880       8192 D:\A1.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 
        12          1959880 2019/3/17 21:         12         12 ONLINE  READ WRITE            1959881 2019/3/17 21:31                     0                                                           0              0                5242880        640      5242880       8192 D:\A2.DBF                                                                                 0          8192 NONE                                                                                               0                                 0                        0                       NO                            0                        0 

12 rows selected

2、查询表空间及相应数据文件及信息

SQL> select file_name,tablespace_name,file_id from dba_data_files;

FILE_NAME                                                                        TABLESPACE_NAME                   FILE_ID
-------------------------------------------------------------------------------- ------------------------------ ----------
F:\APP\ASUS\ORADATA\ORCL\USERS01.DBF                                             USERS                                   4
F:\APP\ASUS\ORADATA\ORCL\UNDOTBS01.DBF                                           UNDOTBS1                                3
F:\APP\ASUS\ORADATA\ORCL\SYSAUX01.DBF                                            SYSAUX                                  2
F:\APP\ASUS\ORADATA\ORCL\SYSTEM01.DBF                                            SYSTEM                                  1
F:\APP\ASUS\ORADATA\ORCL\EXAMPLE01.DBF                                           EXAMPLE                                 5
D:\T1.DBF                                                                        TS1                                     6
D:\T2.DBF                                                                        TS1                                     7
D:\T3.DBF                                                                        TS2                                     8
D:\OK.DBF                                                                        ORAC                                    9
D:\OK2.DBF                                                                       BIGTBS                                 10
D:\A1.DBF                                                                        T1                                     11
D:\A2.DBF                                                                        T2                                     12

12 rows selected

3、查询检查点、数据文件等信息

SQL> select file#,name,checkpoint_change# from v$datafile;

     FILE# NAME                                                                             CHECKPOINT_CHANGE#
---------- -------------------------------------------------------------------------------- ------------------
         1 F:\APP\ASUS\ORADATA\ORCL\SYSTEM01.DBF                                                       1958607
         2 F:\APP\ASUS\ORADATA\ORCL\SYSAUX01.DBF                                                       1958607
         3 F:\APP\ASUS\ORADATA\ORCL\UNDOTBS01.DBF                                                      1958607
         4 F:\APP\ASUS\ORADATA\ORCL\USERS01.DBF                                                        1958607
         5 F:\APP\ASUS\ORADATA\ORCL\EXAMPLE01.DBF                                                      1958607
         6 D:\T1.DBF                                                                                   1958607
         7 D:\T2.DBF                                                                                   1958607
         8 D:\T3.DBF                                                                                   1958607
         9 D:\OK.DBF                                                                                   1958607
        10 D:\OK2.DBF                                                                                  1958607
        11 D:\A1.DBF                                                                                   1959139
        12 D:\A2.DBF                                                                                   1959881

12 rows selected

 二、日志文件

1、查询日志文件及其信息

SQL> select group#,archived, status from V$LOG;

    GROUP# ARCHIVED STATUS
---------- -------- ----------------
         1 NO       INACTIVE
         2 NO       CURRENT
         3 NO       INACTIVE
        10 NO       ACTIVE
        12 NO       INACTIVE

SQL> 

2、查看重做日志组及其成员相关信息

SQL> select group#,member,status from V$LOGFILE;

    GROUP# MEMBER                                                                           STATUS
---------- -------------------------------------------------------------------------------- -------
         3 F:\APP\ASUS\ORADATA\ORCL\REDO03.LOG                                              
         2 F:\APP\ASUS\ORADATA\ORCL\REDO02.LOG                                              
         1 F:\APP\ASUS\ORADATA\ORCL\REDO01.LOG                                              
        10 D:\L1.LOG                                                                        
        10 D:\L2.LOG                                                                        
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG1C.ORA                           
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG2C.ORA                           
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG3C.RDO                           

8 rows selected

3、创建重做日志组时指定group

SQL> alter database add logfile('d:\LOG1.RDO','D:\LOG2.RDO') SIZE 6M;

Database altered

也可以不指定,但注意文件后缀是RDO

4、向重做日志组中添加成员

ALTER DATABASE ADD LOGFILE MEMBER 'D:\LOG3.RDO' TO GROUP 10;

Database altered

注意这时不加SIZE

5、查询重做日志组信息

SQL> SELECT GROUP#,MEMBER FROM V$LOGFILE;

    GROUP# MEMBER
---------- --------------------------------------------------------------------------------
         3 F:\APP\ASUS\ORADATA\ORCL\REDO03.LOG
         2 F:\APP\ASUS\ORADATA\ORCL\REDO02.LOG
         1 F:\APP\ASUS\ORADATA\ORCL\REDO01.LOG
        10 D:\L1.LOG
        10 D:\L2.LOG
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG1C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG2C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG3C.RDO
         4 D:\LOG1.RDO
         4 D:\LOG2.RDO
        10 D:\LOG3.RDO

11 rows selected

6、删除日志组成员再查询一遍

SQL> ALTER DATABASE DROP LOGFILE MEMBER 'D:\LOG3.RDO';

Database altered


SQL> SELECT GROUP#,MEMBER FROM V$LOGFILE;

    GROUP# MEMBER
---------- --------------------------------------------------------------------------------
         3 F:\APP\ASUS\ORADATA\ORCL\REDO03.LOG
         2 F:\APP\ASUS\ORADATA\ORCL\REDO02.LOG
         1 F:\APP\ASUS\ORADATA\ORCL\REDO01.LOG
        10 D:\L1.LOG
        10 D:\L2.LOG
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG1C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG2C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG3C.RDO
         4 D:\LOG1.RDO
         4 D:\LOG2.RDO

10 rows selected

7、删除编号为x的重做日志组

SQL> ALTER DATABASE DROP LOGFILE MEMBER 'D:\LOG3.RDO';

Database altered


SQL> SELECT GROUP#,MEMBER FROM V$LOGFILE;

    GROUP# MEMBER
---------- --------------------------------------------------------------------------------
         3 F:\APP\ASUS\ORADATA\ORCL\REDO03.LOG
         2 F:\APP\ASUS\ORADATA\ORCL\REDO02.LOG
         1 F:\APP\ASUS\ORADATA\ORCL\REDO01.LOG
        10 D:\L1.LOG
        10 D:\L2.LOG
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG1C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG2C.ORA
        12 F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG3C.RDO
         4 D:\LOG1.RDO
         4 D:\LOG2.RDO

10 rows selected

三、归档日志

Enter user-name: sys as sysdba 利用dba身份登录,再输入密码即可

1、显示归档日志及信息

SQL> ARCHIVE LOG LIST;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Current log sequence           76
SQL>

2、修改归档模式

SQL> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 3373858816 bytes
Fixed Size                  2180424 bytes
Variable Size            2080377528 bytes
Database Buffers         1275068416 bytes
Redo Buffers               16232448 bytes
SQL> alter database mount;

Database altered.

SQL> alter database archivelog;

Database altered.

SQL> ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Next log sequence to archive   76
Current log sequence           76
SQL> ALTER DATABASE OPEN;

Database altered.

SQL> ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Next log sequence to archive   76
Current log sequence           76
SQL>

3、归档模式查询

SQL> select name,log_mode from V$DATABASE;

NAME                        LOG_MODE
--------------------------- ------------------------------------
ORCL                        ARCHIVELOG
或者
SQL> ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     72
Next log sequence to archive   76
Current log sequence           76
SQL>

4、查询日志信息

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
F:\APP\ASUS\ORADATA\ORCL\REDO03.LOG
F:\APP\ASUS\ORADATA\ORCL\REDO02.LOG
F:\APP\ASUS\ORADATA\ORCL\REDO01.LOG
F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG1C.ORA
F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG2C.ORA
F:\APP\ASUS\PRODUCT\11.2.0\DBHOME_1\DATABASE\LOG3C.RDO
D:\LOG1.RDO
D:\LOG2.RDO

8 rows selected.

5、查询数据库是否为归档模式

SQL> select dbid,name,log_mode from v$database;

      DBID NAME                        LOG_MODE
---------- --------------------------- ------------------------------------
1529549295 ORCL

四、控制文件

后缀CTL

1、查询控制文件

SQL> select dbid,name,log_mode from v$database;

      DBID NAME                        LOG_MODE
---------- --------------------------- ------------------------------------
1529549295 ORCL                        ARCHIVELOG

SQL> select * from v$controlfile;

STATUS
---------------------
NAME
--------------------------------------------------------------------------------
IS_RECOVE BLOCK_SIZE FILE_SIZE_BLKS
--------- ---------- --------------

F:\APP\ASUS\ORADATA\ORCL\CONTROL01.CTL
NO             16384            594


F:\APP\ASUS\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
NO             16384            594

STATUS
---------------------
NAME
--------------------------------------------------------------------------------
IS_RECOVE BLOCK_SIZE FILE_SIZE_BLKS
--------- ---------- --------------


SQL>

五、配置文件

*.ORA为其后缀

。。。。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值