码迷,mamicode.com
首页 > 数据库 > 详细

oracle入门(6)——PL/SQL常用语法

时间:2014-08-01 15:51:31      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   strong   io   数据   for   

【本文介绍】

本文不是”语法大全“,只是记录下作项目里自己常用的一些语法。方便查询。

 

【语法】

【输出】  
(1)输出语法
DBMS_OUTPUT.PUT_LINE(   )

bubuko.com,布布扣

【定义】  
(1)定义变量:
......
as
变量名  类型(长度)
begin
......

例如:

bubuko.com,布布扣

(2)定义变量 ,类型 依赖其他变量的类型
例如:
bubuko.com,布布扣
这样,改了name的类型,returnValue类型也跟着改变。
(3)自定义类型(类似C语言的结构体)每次只能拿一条数据,不然会的报错。
例如:
bubuko.com,布布扣

(4)以“表”做为类型。每次只能拿一条数据,不然会的报错。
例如:
bubuko.com,布布扣

(5)以“表”做为类型的数组,数组下标为int型。每次只能拿一条数据,不然会的报错。 bubuko.com,布布扣

(6)以“表”做为类型的数组,数组下表为字符型。每次只能拿一条数据,不然会的报错。
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
TYPE user_type_list is table OF
"user"%rowtype --索引表类型
index by VARCHAR2(20);
 
myUserList user_type_list;
 
BEGIN
    SELECT * into myUserList(one) from "user" WHERE "user"."id" = 1;
    DBMS_OUTPUT.PUT_LINE(myUserList(one)."id");
    DBMS_OUTPUT.PUT_LINE(myUserList(one)."name");
    DBMS_OUTPUT.PUT_LINE(myUserList.first);
END;

 

(7)VARCHAR变长数组
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
TYPE user_type_list    --数组名
is varray(100) OF   --长度
"user"%rowtype;        --类型
   
myUserList user_type_list := user_type_list(); --定义
 
BEGIN
    myUserList.EXTEND; --分配存储空间,相当于C语言里面的malloc
    SELECT * into myUserList(1) from "user" WHERE "user"."id" = 1;
    DBMS_OUTPUT.PUT_LINE(myUserList(1)."id");
    DBMS_OUTPUT.PUT_LINE(myUserList(1)."name");
END;

 

【赋值】  
(1)赋值
变量名 := 值
例如:
bubuko.com,布布扣

(2)查询并赋值
bubuko.com,布布扣

【控制语句】  
(1)if语句
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myResult NUMBER(10,4); --变量
 
BEGIN
    myResult := SQRT(58+25*3+(19-9)**2);--数值表达式
 
    IF myResult > 10 THEN --if语句
        DBMS_OUTPUT.PUT_LINE(结果大于10);
     
    ELSE IF myResult > 15 then -- else if语句
        DBMS_OUTPUT.PUT_LINE(结果大于15);
    END IF; --结束else if
 
    END IF; --结束if
END;

 

(2)case语句
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myCase VARCHAR2(10) := A; --变量
 
BEGIN
    CASE myCase
    WHEN A THEN DBMS_OUTPUT.PUT_LINE(A);
    WHEN B THEN DBMS_OUTPUT.PUT_LINE(B);
    ELSE DBMS_OUTPUT.PUT_LINE(什么也不匹配);
    END CASE;
END;

 

(3)循环语句
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myNumber number := 1; --变量
 
BEGIN
    LOOP --循环开始的标志
        if myNumber < 5 THEN --逻辑部分
            DBMS_OUTPUT.PUT_LINE(myNumber的值为:||myNumber);
            myNumber := myNumber+1;
        ELSE 
            EXIT ; --一定要有退出语句
        END IF;
    END LOOP; --结束循环
END;

CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myNumber number := 1; --变量
 
BEGIN
    LOOP --循环开始的标志
        if myNumber < 5 THEN --逻辑部分
            DBMS_OUTPUT.PUT_LINE(myNumber的值为:||myNumber);
            myNumber := myNumber+1;
        END IF; 
            EXIT WHEN myNumber >= 5; --eixt when 语句
    END LOOP; --结束循环
END;

或:

CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myNumber number := 1; --变量
 
BEGIN
    FOR inx IN 1..4 --for loop语句
    LOOP --循环开始的标志
        DBMS_OUTPUT.PUT_LINE(myNumber的值为:||myNumber);
    myNumber := myNumber+1;
    END LOOP; --结束循环
END;

 

【异常】  
异常处理
bubuko.com,布布扣

注释
单行: --
多行:/*   */
转义字符
bubuko.com,布布扣
【常用函数】  
数值表达式
CREATE OR REPLACE 
PROCEDURE "userList" 
AS
 
myResult NUMBER(10,4); --变量
 
BEGIN
    myResult := SQRT(58+25*3+(19-9)**2);--数值表达式
    DBMS_OUTPUT.PUT_LINE(myResult);
END;

 

字符切割函数
/**
用pipe函数实现字符串分割
**/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
    j INT := 0;
    i INT := 1;
    len INT := 0;
    len1 INT := 0;
    str VARCHAR2 (4000);
BEGIN
    len := LENGTH (p_str);
    len1 := LENGTH (p_delimiter);
 
    WHILE j < len LOOP
       j := INSTR (p_str, p_delimiter, i);
 
       IF j = 0 THEN
           j := len;
          str := SUBSTR (p_str, i);
          PIPE ROW (str);
          IF i >= len THEN
              EXIT;
          END IF;
       ELSE
          str := SUBSTR (p_str, i, j - i);
          i := j + len1;
          PIPE ROW (str);
       END IF;
    END LOOP;
 
    RETURN;
END fn_split;

 

转义字符
cgar(47) 即代表 : /
数组长度函数
len := LENGTH (p_str);

 

产生随机数
substr(DBMS_RANDOM.VALUE(10,24),1,2)

 

生成日期
select to_char(sysdate,yyyy-mm-dd-hh24-mi-ss) into mydate from dual;

 

UUID
select sys_guid() into myUser."id" from dual;

 

oracle入门(6)——PL/SQL常用语法,布布扣,bubuko.com

oracle入门(6)——PL/SQL常用语法

标签:style   blog   http   color   strong   io   数据   for   

原文地址:http://www.cnblogs.com/xiaoMzjm/p/3884878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!