1、 Begin For i In 1.maxrecords Loop Insert Into hqf.testtable(recordnumber,currentdate) -hqf为模式名,应改动 Values(i,Sysdate); dbms_output.put_line(现在输入的内容是:|i| |Sysdate); Commit;-这里切记要commit否则将不会将数据提交到表中 End Loop;记录已经按照计划全部插入,请查看!); End;/ 注:hqf为登录用户名,需根据情况改动,如:实验中一般用scott. (3)查询表中数据,给出查询结果截图: 2. 导入教材实验数据(1)
2、创建用户school,并赋于相应的权限:CREATE USER venditionidentified by vendition;GRANT CREATE SESSION,RESOURCE,DBATO vendition;CREATE USER SCHOOLidentified by SCHOOL;TO SCHOOL;(2)将文件夹“TestTableBak”中的备份文件school.DMP和vendition.DMP复制到某一目录下(例如E盘根目)。(3)然后启动CMD命令提示窗口,运行如下的还原命令。imp userid=school/school ignore=y fromuser=sc
3、hool touser=school file=e:school.DMPimp userid=vendition/vendition ignore=y fromuser=vendition touser=vendition file=e:vendition.DMP(4)验证确认。以用户名School登录系统,查看相应的表,看是否有数据。7.2. 最简单的PL/SQL程序1. 输出Hello,World/* 第一个例子:输出*/set serverout on -设置SQL*Plus将服务器所返回的写出来begin -块开始 DBMS_OUTPUT.put_line(Hello,World -在
4、控制台输出信息,类似C语言的Printf或者java语言中的System.out.printend; -块结束运行结果为:1. 接收数据并输出 在此基础上,完成Hello,某某,某某从客户端得到declare v_name varchar2(20); v_name:=&姓名; -与“客户端”交互,类似C语言的scanf语句Hello,|v_name);7.3. 简单变量的使用1变量的声明与引用set serveroutput on;- PL/SQL变量之 简单类型 v_dept_id number(5) := 1111; v_age binary_integer := 12; v_dept_n
5、ame varchar2(20) := 人事部 v_rate constant number(4,2) := 22.12; v_valid boolean not null := TRUE; v_hire_date date not null := sysdate + 7;begin v_dept_id := 2222; dbms_output.put_line(v_dept_id);/2Into子句的使用:DeclareV_deptno number (2);v_loc varchar2(15);begin select deptno,locinto v_deptno,v_locfrom d
6、eptwhere dname=SALESDBMS_OUTPUT.PUT_LINE (V_deptno | and |v_loc);end;实验练习:编写一PL/SQL程序,实现依次从客户端接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。请给出程序源码: v_EMPNO NUMBER(4); v_ENAME VARCHAR2(10); v_JOB VARCHAR2(9); v_MGR NUMBER(4); v_HIREDATE DATE; v_SAL NUMBER(7,2); v_COMM NUMBER(7,2); v_DEPTNO NUMBER(2);beg
7、in v_EMPNO:EMPNO v_ENAME:ENAME v_JOB:JOB v_MGR:MGR v_HIREDATE:HIREDATE v_SAL:SAL v_COMM:COMM v_DEPTNO:DEPTNOinsert into empvalues(v_EMPNO,v_ENAME,v_JOB,v_MGR,v_HIREDATE,v_SAL,v_COMM,v_DEPTNO);给出测试结果:3变量作用域:阅读以下程序,熟悉变量的斌值方法,理解变量的作用,给出运行结果。-嵌套块中的变量赋值和作用域DECLARE v_weight NUMBER(3) := 100; v_message VAR
8、CHAR2(255) :Outer ValueBEGIN DECLARE v_weight NUMBER(3) := 1; v_message VARCHAR2(255) :Inner value BEGIN v_weight := v_weight + 1; v_message :Put| v_message; DBMS_OUTPUT.PUT_LINE(inner block | to_char(v_weight) | v_message); END; | v_message;outter block END;7.4. 使用%type和%rowtype变量1使用%type变量阅读以下程序,理
9、解其功能,给出运行结果。(1)DROP TABLE EMPL;create table EMPL( EMPLOYEE_ID NUMBER(5) not null, LAST_NAME VARCHAR2(20) not null, HIRE_DATE DATE, SALARY NUMBER(8,2), JOB_ID NUMBER(5), DEPARTMENT_ID NUMBER(5)- PL/SQL变量之%TYPE类型 v_last_name employees.last_name%TYPE;- 用户hr v_hire_date employees.hire_date%TYPE; v_balan
10、ce number(6,2) ; v_min_balance v_balance%type;定义%type类型的变量(2)declarev_deptno dept.deptno%type;v_loc dept.loc%type;beginselect deptno,locinto v_deptno,v_locfrom deptwhere dname=DBMS_OUTPUT.PUT_LINE (V_deptno |/2使用%Rowtype变量(1)DROP TABLE EMPL;- PL/SQL变量之%ROWTYPE类型 v_empl emp%rowtype;定义%rowtype类型的变量(2)
11、drop table stock;create table stocksymbol varchar2(50),price number(6,2)insert into stock values(IBM,188.88);ORCL,100.88); stock_info1 stock%ROWTYPE; stock_info2 stock%ROWTYPE; stock_info3 stock%ROWTYPE;-对应纪录直接取得相应字段的:Populate the specific fields in a record SELECT symbol,price INTO stock_info1.symb
12、ol,stock_info1.price FROM stock WHERE symbol = -对应纪录直接 放入纪录中 SELECT * INTO stock_info2 FROM stock stock_info3 := stock_info2; -记录间可以相互赋值 stock_info3.symbol:ORACLE -对纪录的各字段赋值。stock_info1 : | stock_info1.symbol | |stock_info1.price);stock_info2 : | stock_info2.symbol | |stock_info2.price);stock_info3
13、: | stock_info3.symbol | |stock_info3.price);思考:如下所示:改变表结构。drop table stock;symbol varchar2(50),price number(6,2),owner varchar2(10)对以上程序运行有影响吗?为什么?没有影响,因为程序中没有使用到增加的那个字段.7.5. 条件判断语句的使用阅读并理解以下程序,调试并给出运行结果。1If语句:drop table employee;create table employee( empno number(4), name varchar2(30), salary num
14、ber(8,2)insert into employee values(7900,黄蓉,3000);commit;-执行结果如何呢? -注意employee.salary%TYPE这一类型定义,定义v_SALARY为emp表的sal字段的类型 -这是plsql一种方便的定义类型方法。 v_salary employee.salary%type; v_comment varchar2(35); /* 返回employee的salary */ SELECT salary INTO v_SALARY FROM employee WHERE name = -WHERE empno = 7900;薪水是
15、: | v_SALARY); - 条件判断语句 IF v_SALARY 1000 THEN v_Comment :比较低 ELSIF v_SALARY 50 - 跳出循环. IF v_Counter 10 THEN EXIT; END LOOP;2FOR LOOP语句-FOR LOOP语句 FOR v_Counter IN 1.10 LOOPv_Counter is | v_Counter); -DBMS_OUTPUT.PUT_LINE(v_Counter); -在for循环外不可以访问循环变量3while LOOP语句-while LOOP语句 -v_Counter = 10-循环. WHILE v_Counter = 50 LOOP4while语句-WHILE语句= 10 LOOP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1