Oracle学习——基本概念

先附上测试使用的表结构:

表中记录学生基本信息,见名知意:

1.使用变量替换

在变量名称前加一个& 或&&

例如:

select SID, SNAME, SBIRTH from student2 where SADDRESS =&address;

2.使用DBMS_OUTPUT包显示信息

使用前先打开输出debug开关

SET SERVEROUTPUT {ON, OFF}

例如:打印今天的时间

BEGIN
DBMS_OUTPUT.PUT_LINE('现在的日期时间:');
--显示信息不换行
DBMS_OUTPUT.PUT('今天是:');
--显示信息并换行
DBMS_OUTPUT.PUT_LINE(to_char(SYSDATE,'DAY'));
DBMS_OUTPUT.PUT('现在时间是:');
DBMS_OUTPUT.PUT_LINE(to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));
END;

结果:

3.顺序结构

例子:计算两个学生的年龄总和

DECLARE
v_age1 number;
v_age2 number;
v_sumage number;

BEGIN
	--查询ID为 1 的年龄
	select SAGE
	 into v_age1
	 from student2
	 where SID =&id_1;
	--查询ID为2的年龄
	select SAGE
	 into v_age2 
	 from student2
	 where SID =&id_2;
	--相加
	v_sumage := v_age1 + v_age2;
	--输出结果
	DBMS_OUTPUT.PUT_LINE('ID_1='
						|| &id_1
						|| ',ID_2='
						|| &id_2
						|| ', sun age ='
						|| v_sumage);
END;
/

结果:需要输入2次ID,且只要ID格式正确,第二组ID对结果无影响???如何解决

4.条件控制

declare
	--定义加薪比例常量
	c_manager	constant number := 0.15;
	c_saleman	constant number := 0.12;
	c_clerk	    constant number := 0.10;
	--定义职位变量
	v_job 	varchar2(20);
begin
	-- 查询指定员工
	select job into v_job
		from student2 
		where sid = &tid;
	--分支判断
	if v_job = 'clerk'
	then
		update student2 
			set solary = solary * ( 1 + c_clerk)
			where sid = &tid;
	elsif v_job = 'saleman'
	then
		update student2
			set solary = solary  * ( 1 + c_saleman)
			where sid = &tid;
	elsif v_job = 'manager'
	then
		update student2
			set solary = solary * ( 1 + c_manager)
			where sid = &tid;
	DBMS_OUTPUT.PUT_LINE('manager type');
	end if;
	DBMS_OUTPUT.PUT_LINE('已经为员工编号为'|| &tid || '加薪');
	
exception
	--处理异常
	when NO_DATA_FOUND
	then
		DBMS_OUTPUT.PUT_LINE('没有找到员工数据');

commit;
end;
/

执行结束后手动commit一下。

5.循环控制

5.1  for 循环

例子:打印99乘法表

--输出屏幕信息
set serveroutput on;

declare
	v_number1	number(3);	--外层变量
	v_number2	number(3);	--内层循环变量

begin
	for v_number1 IN 1 .. 9	--开始外层循环
	loop
		--开始内层循环
		for v_number2 IN 1 .. v_number1
		loop
			DBMS_OUTPUT.PUT(v_number1
							|| '*'
							|| v_number2
							|| '='
							|| v_number1 * v_number2
							|| '  '
							);
		end loop;
		DBMS_OUTPUT.PUT_LINE('');	--输出换行
	end loop;
end;
/

在sqlplus执行结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值