Oracle 10g学习点滴

安装完Oracle 10g,sql*plus登陆

  "用户名称(U):"中输入'system'

  "口令(P):"中输入'manager'

  "主机字符串(H):" tnsname.ora中配置的服务名(如果是系统默认数据库可以不输入)

  (注1:这个用户名/密码是在安装过程中自己设定的)

  (注2:  如果上述操作抛出没有监听器,则需看自己有没添加监听器,如果添加了在服务中看有没启动)

 

更改scott/tiger权限

1)以sys或system登陆

       sys登陆: conn / as sysdba

       system登陆: conn system/manager

 

      //unlock scott

2)      alter user scott account unlock;

3)  清屏

      clear screen

4)内联接和外联接 表t_user,t_salary

内联接

select t_user.user_name t_salary.salary

from t_user,t_salary

where t_user.user_id = t_salary.user_id

外联接 t_user外连接t_salary

select t_user.user_name t_salary.salary

from t_user,t_salary

where t_user.user_id = t_salary.user_id(+)

5)视图

create or replace view usview

as select u.user u, s.salary

from t_user u, t_salary s

where u.user_id = s.user_id

with read only;

注: 对于使用INSERT, UPDATE,DELETE 这样的DML语句存在一些限制。即使不定义with read only;执行这些操作时也

不一定成功。能否在视图上成功执行INSERT,UPDATE,DELETE语句受视图定义及基表的限制。如视图定义在一个表还是多

个表上,被引用基表列的性质(NULL,NOT NULL)等。

执行drop view usview可删除视图

 

6)spool输出

spool d:/tst.sql

select * from t_user

spool off

 

7)SET TERMOUT ON/OFF 控制是否显示执行SQL语句的输出结果。默认是ON(显示)

     edit d:/tst.sql 会打开d:/tst.sql 能进行编辑

     @d:/tst.sql会执行 tst.sql中的内容

8)如何从sql*blus中退出

     输入 . 即可

     /表示执行完成。

 

9)声明和使用游标

在PL/SQL程序内使用显示游标的步骤:

1)声明游标

2)打开游标

3)从游标中取出行

4)关闭游标

例子:

SET SERVEROUT ON

DECLARE

     --步骤1:声明游标

     CURSOR nextSalaryRow IS

            SELECT * FROM salary

                            ORDER BY xm;

     currentSalary salary%ROWTYPE; --与游标相配的记录变量

BEGIN

     -- 步骤2: 打开游标

     OPEN nextSalaryRow;

 

    -- 步骤3: 取数据

     FETCH nextSalaryRow INTO currentSalary;    

    WHILE nextSalaryRow%FOUND LOOP

         DBMS_OUTPUT.PUT_LINE(currentSalary.xm || '' || currentSalary.jb);

         FETCH nextSalary INTO currentSalary;

    END LOOP;

    --  步骤4: 关闭游标

    CLOSE nextSalaryRow;

END;

/

SET SERVEROUT OFF

显示声明的游标属性

%FOUND FETCH语句至少对应数据库中的一行时,%FOUND属性值为TRUE;否则,%FOUND为FALSE

%NOTFOUND 与上相反

%ISOPEN 在游标打开时,%ISOPEN属性值为TRUE;否则,为FALSE

%ROWCOUNT  显示声明的游标中所取出的行数

 

 使用游标FOR循环例子 

 SET SERVEROUT ON

 DECLARE

       CURSOR salaryRow IS

              SELECT * FROM salary ORDER BY xm;

 BEGIN

 FOR currentSalary IN salaryRow LOOP

        DBMS_OUTPUT.PUT_LINE(currentSalary.xm);

END LOOP;

END;

/

SET SERVEROUT OFF

 

带参数的游标

SET SERVEROUT ON

DECLARE

      CURSOR salaryRow(jbw INTEGER) IS

           SELECT xm,jb FROM salary

      WHERE jb=jbw;

BEGIN

      FOR currentSalary IN salaryRow(1) LOOP

      END LOOP;

END;

/

SET SERVEROUT OFF

 

处理游标的当前行

PL/SQL程序可以使用利用UPDATE或DELETE语句的WHERE条件中特殊的CURRENT OF 子句处理游标当前行。

例:

DECLARE

     CURSOR salaryRow (jbw INTEGER) IS

            SELECT * FROM salary

            WHERE jb = jbw

            FOR UPDATE;

      BEGIN

            FOR currentSalary IN salaryRow(2) LOOP

                   DELETE FROM salary

                   WHERE CURRENT OF salaryRow;

            END LOOP;

       END;

/

注: 必须用FOR UPDATE关键字声明该游标的定义查询,这将迫使Oracle锁定游标结果集的行,直到本事务处理提交或回退为止。

这样可防止其他事务处理更新或删除这些行。

 

10)嵌套表

SET SERVEROUT ON

DECLARE

    --声明INTEGER的一个嵌套表类型

    TYPE integerTable IS TABLE OF INTEGER;

  

    --构造器声明和初始化一个集合

    tempIntegers integerTable:= integerTable(1,50,222);

BEGIN

     FOR i IN 1..3 LOOP

            DBMS_OUTPUT.PUT_LINE('DF'||i||tempIntegers(i));

     END LOOP;

END;

/

SET SERVEROUT OFF

集合方法:

COUNT                                      返回集合中当前元素的数目

DELETE[(x[,y]....)]                      删除一些或所有的集合元素,但不释放这些元素占有的空间

EXISTS(x)                                  如果集合中下标为x的元素存在,则返回TRUE,否则返回FALSE

EXTEND[(x[,y])]                         追加下标为y元素的x个拷贝到集合的末尾。如果不给出y,则追加x个空元素到集合中,如果X和y  

                                                 都不给出,则追加一个空元素

FIRST                                        返回集合中第一个元素的下标

LAST                                         返回集合中最后一个元素下标

LIMIT                                        返回一个可变集合能包含的最大元素数目

NEXT(x)                                    返回集合中下标为x的元素后的元素下标

PRIOR(x)                                  返回集合中下标为x的元素前的元素下标

TRIM(x)                                     去掉集合末尾的x-1个元素

使用如例:

SET SERVEROUT ON

DECLARE

    -- 声明部门表的一个嵌套表类型

    TYPE deptTable IS TABLE OF dept%ROWTYPE

   

    -- 用其构造声明和初始化一个集合

    tempDept:deptTable := deptTable();

 

    --从部门表中取出游标

   CURSOR nextDeptRow IS

          SELECT * FROM dept ORDER BY bm;

 

    -- 定义当前变量

    currentElem INTEGER;

BEGIN

    tempDept.EXTEND(16); --追加16个空元素

    

    --用一个游标来填充tempDept

    FOR currentDept IN nextDeptRow LOOP

           tempDept(nextDeptRow%ROWCOUNT*2):=currentDept;

    END LOOP;

  

    --遍历集合元素

    currentElem:=tempDept.FIRST;

    FOR i IN 1..tempDept.COUNT LOOP

         DBMS_OUTPUT.PUT_LINE(tempDept(currentElem).bm);

         currentElem := tempDept.NEXT(currentElem);

    END LOOP;

 

    --删除空集合元素

    FOR i IN 1..tempDetp.COUNT LOOP

           IF tempDept.(i).bm IS NULL THEN

               tempDept.DELETE(i);

           END IF;

    END LOOP;

END;

/

SET SERVEROUT OFF

 

11)

select   *   from   tab;     --   显示该用户的   表,视图,同义词
select   *   from   all_tables;   --   整个库的 

你可能感兴趣的:(oracle,user,null,Integer,delete,insert)