PLSQL

SQL> -- 书写一个最简单的PLSQL
SQL> select 'hello' from dual;

'HELLO'                                                                        
----------                                                                     
hello                                                                          

SQL> declare
  2   -- 申明部分
  3  begin
  4   -- 执行的sql语句
  5   dbms_output.putline('hello world');
  6 
  7  end;
  8  /
 dbms_output.putline('hello world');
                      *
第 5 行出现错误:
ORA-06550: 第 5 行, 第 14 列:
PLS-00302: 必须声明 'PUTLINE' 组件
ORA-06550: 第 5 行, 第 2 列:
PL/SQL: Statement ignored


SQL> declare
  2   -- 申明部分
  3  begin
  4   -- 执行的sql语句
  5   dbms_output.put_line('hello world');
  6 
  7  end;
  8  /

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3  begin
  4   -- 执行的sql语句
  5   dbms_output.put_line('hello world');
  6 
  7  end;
  8  /
hello world                                                                    

PL/SQL 过程已成功完成。

SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      2016                      SAL                                            
      8000                                                                     
                                                                               
      2015 zhangsan             MANAGER                  2016 18-3月 -16       
      5000       3000         20                                               
                                                                               
      7369 SMITH                CLERK                    7902 17-12月-80       
       800                    20                                               
                                                                               

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      7499 ALLEN                SALESMAN                 7698 20-2月 -81       
      1600        300         30                                               
                                                                               
      7521 WARD                 SALESMAN                 7698 22-2月 -81       
      1250        500         30                                               
                                                                               
      7566 JONES                MANAGER                  7839 02-4月 -81       
      2975                    20                                               
                                                                               

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      7654 MARTIN               SALESMAN                 7698 28-9月 -81       
      1250       1400         30                                               
                                                                               
      7698 BLAKE                MANAGER                  7839 01-5月 -81       
      2850                    30                                               
                                                                               
      7782 CLARK                MANAGER                  7839 09-6月 -81       
      2450                    10                                               
                                                                               

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      7788 SCOTT                ANALYST                  7566 19-4月 -87       
      3000                    20                                               
                                                                               
      7839 ZS                   PRESIDENT                     17-11月-81       
     10000                    10                                               
                                                                               
      7844 TURNER               SALESMAN                 7698 08-9月 -81       
      1500          0         30                                               
                                                                               

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      7876 ADAMS                CLERK                    7788 23-5月 -87       
      1100                    20                                               
                                                                               
      7900 JAMES                CLERK                    7698 03-12月-81       
       950                    30                                               
                                                                               
      7902 FORD                 ANALYST                  7566 03-12月-81       
      3000                    20                                               
                                                                               

     EMPNO ENAME                JOB                       MGR HIREDATE         
---------- -------------------- ------------------ ---------- --------------   
       SAL       COMM     DEPTNO                                               
---------- ---------- ----------                                               
      7934 MILLER               CLERK                    7782 23-1月 -82       
      1300                    10                                               
                                                                               

已选择16行。

SQL> set linesize 200l
SP2-0268: linesize 选项的编号无效
SQL> set linesize 200;
SQL> /

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO                                                                                          
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------                                                                                          
      2016                      SAL                                                8000                                                                                                                
      2015 zhangsan             MANAGER                  2016 18-3月 -16           5000       3000         20                                                                                          
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20                                                                                          
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30                                                                                          
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30                                                                                          
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20                                                                                          
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30                                                                                          
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                    20                                                                                          
      7839 ZS                   PRESIDENT                     17-11月-81          10000                    10                                                                                          

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO                                                                                          
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------                                                                                          
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30                                                                                          
      7876 ADAMS                CLERK                    7788 23-5月 -87           1100                    20                                                                                          
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30                                                                                          
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10                                                                                          

已选择16行。

SQL> /

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO                                                                                          
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------                                                                                          
      2016                      SAL                                                8000                                                                                                                
      2015 zhangsan             MANAGER                  2016 18-3月 -16           5000       3000         20                                                                                          
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20                                                                                          
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30                                                                                          
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30                                                                                          
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20                                                                                          
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30                                                                                          
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                    20                                                                                          
      7839 ZS                   PRESIDENT                     17-11月-81          10000                    10                                                                                          

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO                                                                                          
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------                                                                                          
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30                                                                                          
      7876 ADAMS                CLERK                    7788 23-5月 -87           1100                    20                                                                                          
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30                                                                                          
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10                                                                                          

已选择16行。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name varchar(20);
  4  begin
  5   -- 执行的sql语句
  6   select ename into name from emp;
  7   dbms_output.put_line(name);
  8 
  9  end;
 10  /
declare
*
第 1 行出现错误:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 line 6


SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name varchar(20);
  4  begin
  5   -- 执行的sql语句
  6   select ename into name from emp where empno=7566;
  7   dbms_output.put_line(name);
  8 
  9  end;
 10  /
JONES                                                                                                                                                                                                  

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name varchar(20);
  4   gongzi number;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   select sal into gongzi from emp where empno = 7566;
  9   dbms_output.put_line(name);
 10   dbms_output.put_line(gongzi);
 11 
 12  end;
 13  /
JONES                                                                                                                                                                                                  
2975                                                                                                                                                                                                   

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name varchar(20);
  4   gongzi number;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   dbms_output.put_line(name);
  9   dbms_output.put_line(gongzi);
 10 
 11  end;
 12  /
JONES                                                                                                                                                                                                  

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name varchar(20);
  4   gongzi number := 400;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   dbms_output.put_line(name);
  9   dbms_output.put_line(gongzi);
 10 
 11  end;
 12  /
JONES                                                                                                                                                                                                  
400                                                                                                                                                                                                    

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4  begin
  5   -- 执行的sql语句
  6   select ename into name from emp where empno=7566;
  7   dbms_output.put_line(name);
  8   dbms_output.put_line(gongzi);
  9 
 10  end;
 11  /

*
第 9 行出现错误:
ORA-06550: 第 8 行, 第 23 列:
PLS-00201: 必须声明标识符 'GONGZI'
ORA-06550: 第 8 行, 第 2 列:
PL/SQL: Statement ignored


SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4  begin
  5   -- 执行的sql语句
  6   select ename into name from emp where empno=7566;
  7   dbms_output.put_line(name);
  8 
  9  end;
 10  /
JONES                                                                                                                                                                                                  

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4   myrow emp%rowtype;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   select * into myrow from emp where empno = 7566;
  9   dbms_output.put_line(name);
 10   dbms_output.put_line(myrow.ename +" " + myrow.job);
 11 
 12  end;
 13  /
 dbms_output.put_line(myrow.ename +" " + myrow.job);
                                            *
第 10 行出现错误:
ORA-06550: 第 10 行, 第 36 列:
PLS-00201: 必须声明标识符 ' '
ORA-06550: 第 10 行, 第 2 列:
PL/SQL: Statement ignored


SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4   myrow emp%rowtype;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   select * into myrow from emp where empno = 7566;
  9   dbms_output.put_line(name);
 10   dbms_output.put_line(myrow.ename);
 11 
 12  end;
 13  /
JONES                                                                                                                                                                                                  
JONES                                                                                                                                                                                                  

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4   myrow emp%rowtype;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   select * into myrow from emp where empno = 7566;
  9   dbms_output.put_line(name);
 10   dbms_output.put_line(myrow.job);
 11 
 12  end;
 13  /
JONES                                                                                                                                                                                                  
MANAGER                                                                                                                                                                                                

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   -- 申明部分
  3   name emp.ename%type;
  4   myrow emp%rowtype;
  5  begin
  6   -- 执行的sql语句
  7   select ename into name from emp where empno=7566;
  8   select * into myrow from emp where empno = 7566;
  9   dbms_output.put_line(name);
 10   dbms_output.put_line(myrow.sal);
 11 
 12  end;
 13  /
JONES                                                                                                                                                                                                  
2975                                                                                                                                                                                                   

PL/SQL 过程已成功完成。

SQL> spool off;

SQL> set serveroutput on
SQL> declare
  2   weather varchar(20) := '晴天';
  3  begin
  4   if(weather = '晴天')
  5    then
  6     dbms_output.put_line('去爬山');
  7   end if;
  8  end;
  9  /
去爬山                                                                                                                                                                                                 

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   weather varchar(20) := '晴天2';
  3  begin
  4   if(weather = '晴天')
  5    then
  6     dbms_output.put_line('去爬山');
  7   else
  8    dbms_output.put_line('看电影');
  9   end if;
 10  end;
 11  /
看电影                                                                                                                                                                                                 

PL/SQL 过程已成功完成。

SQL> set serveroutput on
SQL> declare
  2   weather varchar(20) := '雨天';
  3  begin
  4   if(weather = '晴天')
  5    then
  6     dbms_output.put_line('去爬山');
  7   elseif(weather == '雨天')
  8    then
  9     dbms_output.put_line('睡觉');
 10   else
 11    dbms_output.put_line('看电影');
 12   end if;
 13  end;
 14  /
 elseif(weather == '雨天')
                        *
第 7 行出现错误:
ORA-06550: 第 7 行, 第 18 列:
PLS-00103: 出现符号 "="在需要下列之一时:
( - + all case
mod new null <an identifier>
<a double-quoted delimited-identifier> <a bind variable> any
avg count current max min prior some sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<一个带有字符集说明的可带引号的字符串文字>
<一个可带引号的 SQL 字符串>


SQL> set serveroutput on
SQL> declare
  2   weather varchar(20) := '雨天';
  3  begin
  4   if(weather = '晴天')
  5    then
  6     dbms_output.put_line('去爬山');
  7   elseif(weather = '雨天')
  8    then
  9     dbms_output.put_line('睡觉');
 10   else
 11    dbms_output.put_line('看电影');
 12   end if;
 13  end;
 14  /
   dbms_output.put_line('睡觉');
    *
第 9 行出现错误:
ORA-06550: 第 8 行, 第 3 列:
PLS-00103: 出现符号 "THEN"在需要下列之一时:
:= . ( % ;
ORA-06550: 第 13 行, 第 4 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
if


SQL> set serveroutput on
SQL> declare
  2   weather varchar(20) := '雨天';
  3  begin
  4   if(weather = '晴天')
  5    then
  6     dbms_output.put_line('去爬山');
  7   elsif(weather = '雨天')
  8    then
  9     dbms_output.put_line('睡觉');
 10   else
 11    dbms_output.put_line('看电影');
 12   end if;
 13  end;
 14  /
睡觉                                                                                                                                                                                                   

PL/SQL 过程已成功完成。

SQL> -- 作业 根据不同的成绩打印出相应的级别
SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   index number := 1;
  3   sum number := 0;
  4  begin
  5   loop
  6    exit when index > 100
  7    sum = sum + index;
  8    index = index + 1;
  9   end loop;
 10   dbms_output.put_line(sum);
 11  end;
 12  /
 index number := 1;
 *
第 2 行出现错误:
ORA-06550: 第 2 行, 第 2 列:
PLS-00103: 出现符号 "INDEX"在需要下列之一时:
begin
function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor
符号 "begin在 "INDEX" 继续之前已插入。
ORA-06550: 第 3 行, 第 6 列:
PLS-00103: 出现符号 "NUMBER"在需要下列之一时:
:= . ( @ %
;
符号 "." 被替换为 "NUMBER" 后继续。
ORA-06550: 第 6 行, 第 13 列:
PLS-00103: 出现符号 "INDEX"在需要下列之一时:
( - + case
mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
ex


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   sum number := 0;
  4  begin
  5   loop
  6    exit when myindex > 100
  7    sum = sum + myindex;
  8    myindex = myindex + 1;
  9   end loop;
 10   dbms_output.put_line(sum);
 11  end;
 12  /
  sum = sum + myindex;
  *
第 7 行出现错误:
ORA-06550: 第 7 行, 第 3 列:
PLS-00103: 出现符号 "SUM"在需要下列之一时:
* & - + ; / at
mod remainder rem <an exponent (**)> and or || multiset


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   loop
  6    exit when myindex > 100
  7    mysum = mysum + myindex;
  8    myindex = myindex + 1;
  9   end loop;
 10   dbms_output.put_line(mysum);
 11  end;
 12  /
  mysum = mysum + myindex;
  *
第 7 行出现错误:
ORA-06550: 第 7 行, 第 3 列:
PLS-00103: 出现符号 "MYSUM"在需要下列之一时:
* & - + ; /
at mod remainder rem <an exponent (**)> and or || multiset
符号 "and" 被替换为 "MYSUM" 后继续。
ORA-06550: 第 8 行, 第 11 列:
PLS-00103: 出现符号 "="在需要下列之一时:
:= . ( @ % ;
ORA-06550: 第 9 行, 第 2 列:
PLS-00103: 出现符号 "END"


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   loop
  6    exit when myindex > 100
  7    mysum := mysum + myindex;
  8    myindex := myindex + 1;
  9   end loop;
 10   dbms_output.put_line(mysum);
 11  end;
 12  /
  mysum := mysum + myindex;
  *
第 7 行出现错误:
ORA-06550: 第 7 行, 第 3 列:
PLS-00103: 出现符号 "MYSUM"在需要下列之一时:
* & - + ; /
at mod remainder rem <an exponent (**)> and or || multiset
符号 ";" 被替换为 "MYSUM" 后继续。


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   loop
  6    exit when myindex > 100;
  7    mysum := mysum + myindex;
  8    myindex := myindex + 1;
  9   end loop;
 10   dbms_output.put_line(mysum);
 11  end;
 12  /
5050                                                                                                                                                                                                   

PL/SQL 过程已成功完成。

SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   loop
  6    exit when myindex > 100;
  7    mysum = mysum + myindex;
  8    myindex = myindex + 1;
  9   end loop;
 10   dbms_output.put_line(mysum);
 11  end;
 12  /
  mysum = mysum + myindex;
        *
第 7 行出现错误:
ORA-06550: 第 7 行, 第 9 列:
PLS-00103: 出现符号 "="在需要下列之一时:
:= . ( @ % ;
ORA-06550: 第 8 行, 第 3 列:
PLS-00103: 出现符号 "MYINDEX"
ORA-06550: 第 9 行, 第 2 列:
PLS-00103: 出现符号 "END"


SQL> -- 总结: 不要用关键字来做变量的名称 2. 赋值一定要用:=
SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   while myindex <=100;
  6   loop
  7    mysum := mysum + myindex;
  8   end loop;
  9 
 10   dbms_output.put_line(mysum);
 11  end;
 12  /
 while myindex <=100;
                    *
第 5 行出现错误:
ORA-06550: 第 5 行, 第 21 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
* & - + / at
loop mod remainder rem <an exponent (**)> and or || multiset


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   while myindex <=100;
  6   loop
  7    mysum := mysum + myindex;
  8    myindex = myindex + 1;
  9   end loop;
 10 
 11   dbms_output.put_line(mysum);
 12  end;
 13  /
 while myindex <=100;
                    *
第 5 行出现错误:
ORA-06550: 第 5 行, 第 21 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
* & - + / at
loop mod remainder rem <an exponent (**)> and or || multiset
ORA-06550: 第 8 行, 第 11 列:
PLS-00103: 出现符号 "="在需要下列之一时:
:= . ( @ % ;
ORA-06550: 第 9 行, 第 2 列:
PLS-00103: 出现符号 "END"


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   while myindex <=100
  6   loop
  7    mysum := mysum + myindex;
  8    myindex = myindex + 1;
  9   end loop;
 10 
 11   dbms_output.put_line(mysum);
 12  end;
 13  /
  myindex = myindex + 1;
          *
第 8 行出现错误:
ORA-06550: 第 8 行, 第 11 列:
PLS-00103: 出现符号 "="在需要下列之一时:
:= . ( @ % ;
ORA-06550: 第 9 行, 第 2 列:
PLS-00103: 出现符号 "END"


SQL> -- 计算一下1-100的和
SQL> set serveroutput on
SQL> declare
  2   myindex number := 1;
  3   mysum number := 0;
  4  begin
  5   while myindex <=100
  6   loop
  7    mysum := mysum + myindex;
  8    myindex := myindex + 1;
  9   end loop;
 10 
 11   dbms_output.put_line(mysum);
 12  end;
 13  /
5050                                                                                                                                                                                                   

PL/SQL 过程已成功完成。

SQL> spool off;

转载于:https://www.cnblogs.com/877599949yan/p/5312940.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值