⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 罗彭宇.txt

📁 关于oracle和sql的书籍和ppt教程,非常好,本人珍藏品
💻 TXT
字号:
1,从控制台打印下列信息(用签套的循环,外层循环控制行,内层循环控制*号的个数以及出现的样式)
         *
        ***
       *****
      *******
       *****
        ***
         *    

第2题:

给表建立自增长序列
    create sequence seq_lpystudent increment by 1 start with 1;

给表插入数据
    insert into lpy_student (sno,name,sex,age,cno,score) values (11,'a','男',40,1,39);    
    insert into lpy_student (sno,name,sex,age,cno,score) values (12,'b','女',27,2,80);           insert into lpy_student (sno,name,sex,age,cno,score) values (13,'c','男',18,3,70);
    insert into lpy_student (sno,name,sex,age,cno,score) values (14,'d','男',19,4,56);
    insert into lpy_student (sno,name,sex,age,cno,score) values (15,'e','女',19,5,70);
    insert into lpy_student (sno,name,sex,age,cno,score) values (16,'f','女',18,1,52);
    insert into lpy_student (sno,name,sex,age,cno,score) values (17,'g','男',18,2,47);
    insert into lpy_student (sno,name,sex,age,cno,score) values (18,'h','女',18,3,50);
    insert into lpy_student (sno,name,sex,age,cno,score) values (19,'i','男',41,4,49);
    insert into lpy_student (sno,name,sex,age,cno,score) values (20,'j','男',19,5,61);

2,在程序块里写一个事务分成两个单元(一个存储点)
   存储点之前给emp表插入一行数据
   存储点之后给emp表的某一行修改下age ,然后查询该行的age ,如果age > 40 回滚到存储点提交事务,如果条件不满足,提交整个事务


用自定义的表lpy_student代替了emp表。

declare
    selectage lpy_student.age%type;
    selectage_error exception; --自定义异常。
    dup_all_no_index exception;

begin
    insert into lpy_student (sno,name,sex,age,cno,score) values (29,'j','男',19,5,61);

    savepoint sp1;--第一部分结束,设置保留点。
    update lpy_student set age=&age where sno=&sno;
   select age into selectage from lpy_student where sno = &sno;

    dbms_output.put_line('要判断的年龄为:'||selectage);
    if selectage>40
    then
        rollback to sp1; --事务回退到sp1保留点。
        dbms_output.put_line('事务回退到sp1保留点');
    else
       null;
       dbms_output.put_line('全部提交');
    end if;
 commit;          --提交事务。
   exception --捕获异常。
        when dup_all_no_index then
        dbms_output.put_line('违反了惟一约束中插入重复的值');
        when selectage_error then
        dbms_output.put_line('年龄小于40'||selectage);
end;


 

3,给%TYPE   %ROWTYPE  RECORD  TABLE四种类型分别举出相应的例子
(1)%TYPE的例子。
<<%TYPE>>--定义名字为%TYPE的块。
declare 
  user_ename emp.ename%type;
  --定义一个和emp.ename字段具有相同数据类型名为user_ename的变量。
  user_sal emp.sal%type;
  --定义一个和emp.sal字段具有相同数据类型的名为user_sal的变量。
begin
  select ename,sal into user_ename,user_sal from emp
  where empno = &eno;
  dbms_output.put_line('雇员名'|| user_ename);
  --调用dbms_output程序包中的put_line方法打印输出user_ename变量。
  dbms_output.PUT_line('工资'||user_sal);
  --调用dbms_output程序包中的put_line方法打印输出user_sal变量。
end %TYPE; 



出现错误:
PLS-00103: 出现符号 ";"在需要下列之一时:
 := . ( % ;
符号 ":=在 ";" 继续之前已插入。

解决办法:可能是中英问的“;”书写有误造成的。

(2)%rowtype的例子。

declare 
   user_emp emp%rowtype;
   --定义一个名为user_emp和emp表中的数据类型相一致,相对应的变量表。
begin 
   select * into user_emp --给user_emp附值。
   from emp
   where empno = &eno;  
   dbms_output.put_line('雇员名称:'||user_emp.ename);
   --调用dbms_output内置程序包中的put_line方法输出变量user_emp.ename。
   dbms_output.put_line('工资:'||user_emp.sal);
   --调用dbms_output内置程序包中的put_line方法输出变量user_emp.sal。
   dbms_output.put_line('工作岗位:'||user_emp.job);
   --调用dbms_output内置程序包中的put_line方法输出变量user_emp.job。
end;

出现错误:
  PLS-00103: 出现符号 ";"在需要下列之一时:
 ; <an identifier>
   <a double-quoted delimited-identifier>

原因和解决办法:
 在from emp%rowtype行后多加了个分号,去掉即可。


(3)RECORD的例子.

declare 
   Type emp_record_type IS RECORD(
        name   emp.ename%type,--定义一个和emp.ename字段具有相同数据类型名为name的变量。
        salary emp.sal%type,--定义一个和emp.sal字段具有相同数据类型名为sal的变量。
        job    emp.job%type);--定义一个和emp.job字段具有相同数据类型名为job的变量。
        emp_record emp_record_type;
        --自定义一个名为emp_record的复合数据类型。
begin 
   select ename,sal,job into emp_record --给emp_record复合数据类型附值。
   from emp
   where empno = &eno;  
   dbms_output.put_line('雇员名称:'||emp_record.name);
   --调用dbms_output内置程序包中的put_line方法输出变量emp_record.name。
   dbms_output.put_line('工资:'||emp_record.salary);
   --调用dbms_output内置程序包中的put_line方法输出变量emp_record.salary。
   dbms_output.put_line('工作岗位:'||emp_record.job);
   --调用dbms_output内置程序包中的put_line方法输出变量emp_record.job。
end;


(4)TABLE的例子.

declare 
   Type emp_table_type IS table 
        of emp.ename%type
        index by binary_Integer;
        emp_table emp_table_type;
        --自定义一个名为emp_table的组变量。
begin 
   select ename into emp_table(-8) --给emp_table的组变量(-8)这个数附值。
   from emp
   where empno = &eno;    
   emp_table(0) := 'lpy'; --为emp_table的组变量(0)这个数定义个变量。
   emp_table(8) :='xyz';--为emp_table的组变量(8)这个数定义个变量。
   dbms_output.put_line('雇员名称:'||emp_table(-8));
   --调用dbms_output内置程序包中的put_line方法输出变量emp_table(-8)。
   dbms_output.put_line(''||emp_table(0));
   --调用dbms_output内置程序包中的put_line方法输出变量emp_table(0)。
   dbms_output.put_line(''||emp_table(8));
   --调用dbms_output内置程序包中的put_line方法输出变量emp_table(8)。
end;




4,定义一个table 里面存放的是%rowtype类型,用该类型定义一个变量datas,从emp表取五行记录放到datas里面,通过循环,把五行数据的值输出来


用自定义的表lpy_student代替了emp表。
declare
  type row_table is table of lpy_student%rowtype index by binary_integer;
  datas row_table;
begin
  for i in 1..5 loop
    select * into datas(i) from lpy_student where sno=i;
  end loop;
  for i in 1..5 loop
    dbms_output.put('sno:'||datas(i).sno);
    dbms_output.put(' name:'||datas(i).name);
    dbms_output.put(' sex:'||datas(i).sex);
    dbms_output.put(' age:'||datas(i).age);
    dbms_output.put(' cno:'||datas(i).cno);
    dbms_output.put(' score:'||datas(i).score);
    dbms_output.new_line();
  end loop;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -