SQL/PLUS

4.数据类型转换函数

   ●隐式转换

     赋值时可进行的隐式转换有

       VARCHAR2CHAR —〉NUMBER

       VARCHAR2CHAR —〉DATE

       NUMBER —〉VARCHAR2

       DATE —〉VARCHAR2

     表达式中可进行的隐式转换有

       VARCHAR2CHAR —〉NUMBER

       VARCHAR2CHAR —〉DATE

●显式转换

   TO_CHAR(number|date[,’fm___’])按格式把数字或日期转换成VARCHAR2

   TO_NUMBER(char)将数字字符串转化成数字

   TO_DATE(char[,’fm___’])按格式把字符串转换成日期

5.常规函数

   NVL(expression1,expression2):如果expression1中有空值存在将它转化成

expression2的值。

   DECODE(columnname|expression,search1,result1[,search2,result2,…][,default])

    如果expression的值等于search1,则显示result1,否则继续向下查找。如果所有的

search都不满足,显示default值。

6.替换变量

   &:如果在变量前使用&符号,在执行SELECT语句时,系统会提示用户提供该变量的

值规则:

1)替换变量的类型是字符,必须用引号引起来

2)系统会显示替换变量被替换的过程

&&:如果需要重复使用某替换变量的值而不要求用户多次键入,可以在它第一次出现

时使用&&字符。

DEFINEDEFINE variable*value:创建一个CHAR类型变量并给予初始值

            DEFINE variable:显示变量的名称,值和类型

            DEFINE:显示所有用户定义的变量

            UNDEFINE variable:消除变量定义

ACCEPTACCEPT variable [datatype][FORMAT format][PROMPT text][HIDE]

            按指定格式创建制定类型的变量,并制定用户提示,提示用户输入制定的数

据,并可隐藏用户输入。

7.制定SQL*PLUS环境

    SET命令,SHOW命令(SHOW ALL)

DML

   包括INSERTUPDATEDELETE。一组DML语句形成的逻辑单元被称为事务。事物的特点是其中的操作要么全部成功,要么全部失败。

1. INSERT:两种用法:一是通过关键字VALUES直接输入值;另一种是将SELECT语句的结果插入表中。

●直接提供值:

INSERT INTO tablename (column[,column,…])

VALUES(value[,value,…])

规则:

1)一次只能插入一行数据

     2)table名后无列名,则按照表定义的列的顺序插入数据

     3)如某列允许空值,可不提供其数值

     4)可以使用系统提供的函数。如SYSDATE

     ●间接提供值:

     INSERT INTO tablename (column[,column,…])

     AS SELECT column[,column,…]

     FROM tablename

     WHERE codition

2. UPDATE

UPDATE table

SET column=value[,column=value]

WHERE condition

3. DELECT

DELECT FROM table

WHERE condition

如果没指定WHERE子句,表中所有数据被删除。

4. 事务管理:

连续的执行COMMITROLLBACK之间的操作成为一个事务。对事务的控制包含事务提交,事务回退(或撤销)及设立检查点。Oracle规定,提交后的更新操作是不能撤销的。

●事务提交:3种方式

 1〉显示提交:COMMIT命令

         2〉隐式提交:命令如ALERTAUDITCOMMENTCONNECTCREATE

           DISCOUNTDROPEXITGRANTNOAUDITREVOKERENAME

           以及退出SQL*PLUS都隐含COMMIT操作。

         2〉自动提交:用SET命令设置自动提交环境

●事务回滚:尚未提交的事务,可以使用ROLLBACK命令撤销。

 ROLLBACK TO SAVEPOINT pointname

 EXPSavepoint sp1

        Savepoint sp2

        ROLLBACK to Savepoint pointname

DDL

   包括CREATEALERTDROPRENAMETRUNCATE

   ●表

     1.创建:CREATE TABLE table(

                  Column 数据类型,

                  Column 数据类型,

                  …)

               CREATE TABLE table

                  AS SELCT column [,column,…]

                  FROM table[,table,…]

                  WHERE condition

     2.修改:增加或删除列,更改列的默认值。但不能队列进行重命名。

        语法:ALERT TABLE table

              ADD|DROP column 类型[DEFAULT value]

        规则:

1〉 当增加超过一列时,用括号把要增加的列括起来。

2〉 当数据类型别修改时,列值必须为空。

3〉 删除列时,如果该列有索引或其他约束,必须使用附加功能CASCADE CONSTRAINS

4〉 可以先将某列设为UNUSED,然后再将其删除。

语法:ALERT TABLE table

      SET UNUSED COLUMN column

     3.重命名:对一个表进行重命名后,Oracle将自动更新相应的约束,索引和与此表相关的权限。但相应的视图,同义词,存储过程和函数为非法。

        语法:RENAME table TO new_table

4.删除:表删除后,所有数据和词表的定义都被删除,标的索引,约束,触发器和权被删除。但Oracle并不删除试图,只是标示他们非法。

PL/SQL

三部分组成:定义部分,可执行部分和例外处理部分。三部分共同形成模块。有人称PL/SQL是模块化的过程SQL

1. 定义部分:定义在执行部分所使用的变量,常量,游标和用户自定义的例外处理。

语法:DECLARE

      变量名[CONSTANT]数据类型[NOT NULL][:=] DEFAULT|sql expression

    规则:

      ●以DECLEAR开头

      ●直接赋值可用:=expression

      ●间接赋值可用SELECT INTOPETCH INTO进行

           SELECT [,,…] INTO 变量名[,变量名,…]

           FROM table

    标量类型:

      BINARY_INTEGER-214783647~+214783647

             子类:NATURALNATRUALNPOSITIVEPOSITIVENSIGNTYPE

      NUMBER1.0E-130~9.99E125

             子类:DECDECMALDOUBLEPRECISIONFLOATINTEGERINTNUMBERICREALSMALLINT

      ●字符类型:CHAR:最大32767字节,定长

                  VARCHAR2:最大32767字节,变长

                  LONG:最大2G字节,变长

      ●日期类型:DD-MONTH-YY

      ●布尔类型:BOOLEAN

      ●大数据类型:BFILEBLOBCLOBNCLOB

2.执行部分:包括对数据库进行操作的SQL语句以及对语句进行组织,控制PL/SQL语句。

             语法:BEGIN

                   END;

      ●控制结构:

         1IF条件语句语法:

               IF Boolean expression THEN

                  PL/SQL语句

               ELSE

                   PL/SQL语句

               END IF;

             规则:可以嵌入多个IF…THEN…ELSEIF语句形成条件语句链

          2CASE语句语法:

                  [<lable>]

                  CASE selector

                  WHEN expression 1 THEN statement 1;

                  WHEN expression 2 THEN statement 2;

                  ……….

                  [ELSE Statement];

                  END CASE[lable_name];

                搜索CASE语句:没有选择器,根据布尔搜索条件执行。

                   [<lable>]

                   CASE

                   WHEN search_condition1 THEN statement1;

                   WHEN search_condition2 THEN statement2;

                   ……….

                   [ELSE statement];

                   END CASE [lable];

          3LOOP循环

                 简单循环:无限循环

                 LOOP

                    Sequence_of_statements

                 END LOOP;

                 可用EXITEXIT [lable] WHEN condition来退出循环。

          4WHILE LOOP循环

                 语法:

WHILE condition LOOP

    Sequence_of_statements

END LOOP;

          5FOR循环

                  语法:

                  FOR counter IN [REVERSE] lower_bound…higher_bound LOOP

                      Sequence_of_statements

                  END LOOP;

          6GOTONULL语句

                  语法:GOTO lable

                  NULL语句:不做任何操作,只提高可读性

      DMS_OUTPUT.PUT_LINE程序:用于SQL*PLUS下显示运算结束

            SQL>SET SERVEROUTPUT ON

            之后可用DBMS_OUTPUT.PUT_LINE程序将结束显示在屏幕上。

●过程(PROCEDURE)与函数(FUNCTION)

           过程,函数,触发器和包都是带名的PL/SQL块,也可将过程,函数成为子程序。过程和函数类似,过程是为了执行一定任务而组合在一起的SQLPL/SQL语句集,而函数的最终任务是返回一个值。函数的调用是表达式的一部分,而过程的条用本身就是一条PL/SQL语句。

      创建过程:

      CREATE [OR REPLACE] PROCEDURE procedurename

      [param1{IN|OUT|IN OUT}] param_type

      ………

      paramN [{IN|OUT|IN OUT}] paramN_type]

      {IS|AS} procdure_body;

      调用:

        Procedure_name(param1=>1,param2=>2,…);

     创建函数:

      CREATE [OR REPLACE] FUNCTION functionname

        [Param1 [{IN|OUT|INOUT}] param1_type,

         ……

         ParamN [{IN|OUT|INOUT}] paramN_type]

      RETURN returntype {IS|AS} function_body

      函数的调用:与过程相似但需考虑函数的返回值。

      ●本地子程序的调用:在调用本地子程序前必须先声明该子程序,但在声明部分必须将子程序的声明放在最后。Oracle支持先声明后定义的模式。

      ●游标:

        定义:CURSOR cursor_name IS select_statement

        打开:即执行定义中的SELECT语句

               OPEN cursor_name;

        取值:对游标第一次执行FETCH语句时首先将指针指到第一行(成为当前行),然后将该行的数据输出

              FETCH cursor_name INTO variable [,variable,……];

        关闭:游标关闭后,系统自动释放资源。

        属性:%FOUND,%NOTFOUND,%ROWCOUNT%OPEN

例:

条件:

IF up_sal >= 2000 THEN

   RAISE out_range;

END IF;

EXCEPTION

   WHEN NO_DATA_FOUND THEN

     INSERT INTO TEMP VALUES(NULL,NULL,’employee not found’);

   WHEN out_range THEN   (自定义陷阱)

     INSERT INTO TEMP VALUES(NULL,NULL,’out of range SAL’);

   WHEN OTHERS THEN

     INSERT INTO TEMP VALUES(sql_code,NULL,sql_errm);

                             (系统错误,    错误内容)    

     COMMIT;

游标:

DECLARE CURSOR CURselline IS      (定义游标)

   SELECT ENAME,SAL+NVL(COMM,0) SALS

            FROM INTO TEMP VALUES(selrec.SALS,null,selrec.ENMAE);

游标取值方法1

OPEN CURselline;

FOR selrec in CURselline LOOP

     INSERT INTO TEMP VALUES(selrec.SALS,null,selrec.ENMAE);

     COMMIT;

END LOOP;

CLOSE CURselline;

游标取值方法2

LISTselrec CURselline%ROWTYPE; (定义与游标相同结构的结构行)

OPEN CURselline;                  (打开游标)

LOOP

    FETCH CURselline INTO LISTselrec;(循环下一条,并把数据传给结构行)

    EXIT WHEN CURselline%NOTFOUND;(判断游标是否到尾)

    INSERT INTO TEMP VALUES(LISTselrec.SALS,NULL,LISTselrec.ENMAE);

    COMMIT;

END LOOP;

CLOSE CURselline;(关闭游标,释放资源)

方法:

CREATE OR REOLACE FUNCTION 方法名    (建立方法)

    (

       参数1   类型,

       参数2   类型…...

    )

RETURN 返回值类型

IS

    [变数定义]

BEGIN

    ……….

EXCEPTION

    例外处理部

END;

ans    NUMBER(1):=0;

FOR cnt IN 1..10 LOOP

      ans:=ans+cnt;             (给变量赋值)

END LOOP;

WHILE cnt<=10 LOOP

    ans:=ans+cnt;

    cnt:=cnt+1;

END LOOP;

CREATE OR REPLACE PRECEDURE 存储过程名 (建立可返回值的存储过程)

 (

     参数类型 OUT/INPUT, (OUT只有返回值,INPUT需要传值的返回值)

     参数类型……

)

IS

    [变数定义]

BEGIN

        ……

EXCEPTION

         例外处理部

END;

CREATE OR REPLACE PACHAGE 存储过程 (单纯的数据处理过程,无参数和返回值)

IS

 PROCEDURE 可返回值的存储过程

         ……

 FUNCTION    方法

         ……

 ……………

EXCEPTION

   ………

END;

Execute 存储过程([参数1],[参数2]……) (调用存储过程)

 

 

from:http://www.cnblogs.com/liangx85/articles/1172428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值