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中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,遇到这种情况,我们该怎么办呢?创建个同义词吧!这样我们就可以直接使用同义词来操作表了。是不是很方便、爽啊!
在用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中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,遇到这种情况,我们该怎么办呢?创建个同义词吧!这样我们就可以直接使用同义词来操作表了。是不是很方便、爽啊!