PL/SQL编程基础及使用

i在自己的电脑上装的Oracle9i,在安装的时候我用的名字是vinky,密码统一是xxx。呵呵,还算顺利,总于成功了,

在用PL/SQL IDE登录的时候我用的名字为vinky,MM:xxx 进去后,在执行 select * from emp

发现报错了,说什么视图或者表没有找到!把俺在这里花了很多时间。注意:一定要在连接数据库时,名字要为scott,MM:tiger。这样就行了。(算是本人的经验,也算是开篇的废话了)

下面是俺操作的例子:

1.%type 做类型的匹配

DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
v_empno :='7566';
SELECT ename,sal INTO v_ename,v_sal
FROM emp e
WHERE e.empno=v_empno;
dbms_output.put_line(v_ename||','||v_sal);
END;

2.得到变的具体结构

在命令窗口下输入: desc emp; 就OK了!

3.使用%rowtype (列名个数较多时)

DECLARE
v_emp_row emp%ROWTYPE;
BEGIN
SELECT * INTO v_emp_row
FROM emp e WHERE e.empno=7788;

dbms_output.put_line(v_emp_row.sal||','||v_emp_row.ename);
END;

4.if语句

DECLARE
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal
FROM emp e
WHERE e.empno=7566;
IF
(v_sal<=2000) THEN
v_sal :=v_sal+200;
ELSE
v_sal :=v_sal+200;
END IF;
UPDATE emp e SET e.sal=v_sal
WHERE e.empno=7566;
COMMIT;
dbms_output.put_line(v_sal);
END;

5.case when..then..end case分支1

DECLARE
v_sal NUMBER;
v_gz VARCHAR2(8);
BEGIN
v_sal:=&请输入您个工资;
CASE
WHEN v_sal<=2000 THEN v_gz:='低工资';
WHEN v_sal>2000 AND v_sal<=6000 THEN v_gz:='中工资';
WHEN v_sal>6000 THEN v_gz:='高工资';
END CASE;
dbms_output.put_line(v_sal||'是'||v_gz);
END;

6.case(条件)when..then..end if语句分支2

DECLARE
v_sal NUMBER;
v_gz VARCHAR2(8);
BEGIN
v_sal:=&请输入您个工资;
CASE v_sal
WHEN 2000 THEN v_gz:='低';
WHEN 6000 THEN v_gz:='高';
END CASE;
dbms_output.put_line(v_sal||'是'||v_gz);
END;

7.循环语句1(loop ..end loop)

DECLARE
v_count NUMBER;
v_a NUMBER;
BEGIN
v_count :=&输入循环次数;
v_a:=1;
LOOP
dbms_output.put_line('TMD是的SB!');
v_a :=v_a+1;
IF(v_a>v_count) THEN
EXIT;
END IF;
END LOOP;
END;

8.循环语句2(while 条件 loop...end loop)

DECLARE
v_count NUMBER;
v_a NUMBER;
BEGIN
v_a:=1;
WHILE(v_a<=10)
LOOP
dbms_output.put_line('TMD真牛X!');
v_a:=v_a+1;
END LOOP;
END;

9.循环语句3(for..in..loop..end loop)

DECLARE
v_count NUMBER;
v_a NUMBER;
BEGIN
v_a:=1;
FOR v_a IN 1..10 LOOP
dbms_output.put_line('TMD真牛X!');

END LOOP;
END;

10.异常分类

1)系统产生的错误

2)由用户行为导致的错误

3)由应用程序发出给用户的警告

11.捕获异常(共六个版本,我就这里举两个列子)

1)捕获指定异常信息

DECLARE
v_a NUMBER;
v_b NUMBER;
v_c NUMBER;
e_my_error EXCEPTION;
PRAGMA EXCEPTION_INIT(e_my_error,-1476);
BEGIN
v_a:=8;
v_b:=0;
v_c:=v_a/v_b;
dbms_output.put_line(v_c);
EXCEPTION
WHEN e_my_error THEN
dbms_output.put_line('除数不能为0');
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE||','||SQLERRM);
END;

2)自定义异常

DECLARE
v_a NUMBER;
v_b NUMBER;
v_c NUMBER;
BEGIN
v_a:=10;
v_b:=5;
IF(v_a>v_b)THEN
raise_application_error(-20009,'值太小');
END IF;
v_c:=v_a/v_b;
dbms_output.put_line(v_c);
END;

11.同义词(可以理解为别名)

例子:create synonym my_tab for emp;

分析:相对于用my_tab别名 来引用另外一张表emp

及select * from my_tal == select * from emp;

而public 一般会报错、所有一般不用public好。

理解:

在oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,遇到这种情况,我们该怎么办呢?创建个同义词吧!这样我们就可以直接使用同义词来操作表了。是不是很方便、爽啊!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值