【本文介绍】

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

【语法】

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

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

例如:

(2)定义变量 ,类型 依赖其他变量的类型
  1. 例如:

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

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

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

  1.  
(6)以“表”做为类型的数组,数组下表为字符型。每次只能拿一条数据,不然会的报错。
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4. TYPE user_type_list is table OF
  5. "user"%rowtype --索引表类型
  6. index by VARCHAR2(20);
  7.  
  8. myUserList user_type_list;
  9.  
  10. BEGIN
  11. SELECT * into myUserList('one') from "user" WHERE "user"."id" = '';
  12. DBMS_OUTPUT.PUT_LINE(myUserList('one')."id");
  13. DBMS_OUTPUT.PUT_LINE(myUserList('one')."name");
  14. DBMS_OUTPUT.PUT_LINE(myUserList.first);
  15. END;
(7)VARCHAR变长数组
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. TYPE user_type_list --数组名
  6. is varray(100) OF --长度
  7. "user"%rowtype; --类型
  8.  
  9. myUserList user_type_list := user_type_list(); --定义
  10.  
  11. BEGIN
  12. myUserList.EXTEND; --分配存储空间,相当于C语言里面的malloc
  13. SELECT * into myUserList(1) from "user" WHERE "user"."id" = '';
  14. DBMS_OUTPUT.PUT_LINE(myUserList(1)."id");
  15. DBMS_OUTPUT.PUT_LINE(myUserList(1)."name");
  16. END;
【赋值】  
(1)赋值
  1. 变量名 :=
    例如:

  1.  
(2)查询并赋值

  1.  
【控制语句】  
(1)if语句
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myResult NUMBER(10,4); --变量
  6.  
  7. BEGIN
  8. myResult := SQRT(58+25*3+(19-9)**2);--数值表达式
  9.  
  10. IF myResult > 10 THEN --if语句
  11. DBMS_OUTPUT.PUT_LINE('结果大于10');
  12.  
  13. ELSE IF myResult > 15 then -- else if语句
  14. DBMS_OUTPUT.PUT_LINE('结果大于15');
  15. END IF; --结束else if
  16.  
  17. END IF; --结束if
  18. END;
(2)case语句
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myCase VARCHAR2(10) := 'A'; --变量
  6.  
  7. BEGIN
  8. CASE myCase
  9. WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('A');
  10. WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('B');
  11. ELSE DBMS_OUTPUT.PUT_LINE('什么也不匹配');
  12. END CASE;
  13. END;
(3)循环语句
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myNumber number := 1; --变量
  6.  
  7. BEGIN
  8. LOOP --循环开始的标志
  9. if myNumber < 5 THEN --逻辑部分
  10. DBMS_OUTPUT.PUT_LINE('myNumber的值为:'||myNumber);
  11. myNumber := myNumber+1;
  12. ELSE
  13. EXIT ; --一定要有退出语句
  14. END IF;
  15. END LOOP; --结束循环
  16. END;

  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myNumber number := 1; --变量
  6.  
  7. BEGIN
  8. LOOP --循环开始的标志
  9. if myNumber < 5 THEN --逻辑部分
  10. DBMS_OUTPUT.PUT_LINE('myNumber的值为:'||myNumber);
  11. myNumber := myNumber+1;
  12. END IF;
  13. EXIT WHEN myNumber >= 5; --eixt when 语句
  14. END LOOP; --结束循环
  15. END;

或:

  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myNumber number := 1; --变量
  6.  
  7. BEGIN
  8. FOR inx IN 1..4 --for loop语句
  9. LOOP --循环开始的标志
  10. DBMS_OUTPUT.PUT_LINE('myNumber的值为:'||myNumber);
  11. myNumber := myNumber+1;
  12. END LOOP; --结束循环
  13. END;
【异常】  
异常处理

  1.  
注释
单行: --
多行:/*   */
转义字符
【常用函数】  
数值表达式
  1. CREATE OR REPLACE
  2. PROCEDURE "userList"
  3. AS
  4.  
  5. myResult NUMBER(10,4); --变量
  6.  
  7. BEGIN
  8. myResult := SQRT(58+25*3+(19-9)**2);--数值表达式
  9. DBMS_OUTPUT.PUT_LINE(myResult);
  10. END;
字符切割函数
  1. /**
  2. 用pipe函数实现字符串分割
  3. **/
  4. CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
  5. /
  6. CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
  7. RETURN ty_str_split PIPELINED
  8. IS
  9. j INT := 0;
  10. i INT := 1;
  11. len INT := 0;
  12. len1 INT := 0;
  13. str VARCHAR2 (4000);
  14. BEGIN
  15. len := LENGTH (p_str);
  16. len1 := LENGTH (p_delimiter);
  17.  
  18. WHILE j < len LOOP
  19. j := INSTR (p_str, p_delimiter, i);
  20.  
  21. IF j = 0 THEN
  22. j := len;
  23. str := SUBSTR (p_str, i);
  24. PIPE ROW (str);
  25. IF i >= len THEN
  26. EXIT;
  27. END IF;
  28. ELSE
  29. str := SUBSTR (p_str, i, j - i);
  30. i := j + len1;
  31. PIPE ROW (str);
  32. END IF;
  33. END LOOP;
  34.  
  35. RETURN;
  36. END fn_split;
转义字符
  1. cgar(47) 即代表 /
数组长度函数
  1. len := LENGTH (p_str);
产生随机数
  1. substr(DBMS_RANDOM.VALUE(10,24),1,2)
生成日期
  1. select to_char(sysdate,'yyyy-mm-dd-hh24-mi-ss') into mydate from dual;
UUID
  1. select sys_guid() into myUser."id" from dual;

oracle入门(6)——PL/SQL常用语法的更多相关文章

  1. PL/SQL常用语法及举例

    PLSQL语句 DECLARE 声明部分 BEGIN 程序编写,SQL语句 EXECPTION 处理异常 END; / 声明部分(DECLARE) SQL> set serveroutput o ...

  2. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  3. Oracle数据库之PL/SQL触发器

    Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...

  4. Oracle数据库之PL/SQL包

    Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...

  5. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  6. Oracle数据库之PL/SQL异常处理

    Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...

  7. Oracle数据库之PL/SQL流程控制语句

    Oracle数据库之PL/SQL流程控制语句 在任何计算机编程语言(如C,Java,C#等)都有各种流程控制语句,同样,在PL/SQL中也存在这样的流程控制结构. 几种常见的流程控制结构: 一.条件结 ...

  8. Oracle数据库之PL/SQL程序设计简介

    PL/SQL程序设计简介 一.什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写. ORACLE的SQL ...

  9. oracle数据库之PL/SQL 块结构和组成元素

    一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...

随机推荐

  1. C++ operator关键字(重载操作符)

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名.     这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面 ...

  2. sql循环插入测试数据

    declare @i int set @i=1while @i<61 begin insert into T_RolePower values(1,@i,1)set @i=@i+1 end

  3. ImportError: No module named mysql 报错python引用mysql报错

    需要安装 pip2.7 install MySQL-python pip2.7 install mysql-connector

  4. Math - Uva 11300 Spreading the Wealth

    Spreading the Wealth Problem's Link ---------------------------------------------------------------- ...

  5. MS SQL Server2012中的EOMONTH函数

    MS SQL Server2012中的EOMONTH函数   这个函数是获取一个指定日期所在月份最后一天的日期.可以得到某一个月月份的最后一天 如: declare @orderdate date=' ...

  6. datagrid columns

    columns: [[ { field: 'Source_Id', title: 'Source_Id', hidden: true }, //{ field: 'Current_Value', hi ...

  7. 005Maven_Myeclipse和Maven整合

    准备好:1.Myeclipse2014; 2. E盘下面的:

  8. hrbustoj 1306:再遇攻击(计算几何,判断点是否在多边形内,水题)

    再遇攻击 Time Limit: 1000 MS    Memory Limit: 65536 K Total Submit: 253(37 users)   Total Accepted: 56(2 ...

  9. 深入分析jquery解析json数据

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...

  10. django 模型中的计算字段

    models.py class Person(models.Model): family_name= models.CharField(max_length=20, verbose_name='姓') ...