分类: DataBase预览模式: 普通 | 列表

Oracle DBMS_SQL

DECLARE
  v_stmt_str       VARCHAR2(200);
  v_cur_hdl        INT;
  v_rows_processed INT;
  
  DbStreamId       NUMBER(16);
BEGIN
  v_cur_hdl := DBMS_SQL.open_cursor;
  v_stmt_str := 'Select STREAMID FROM LOG_AGT_PREPAY Where STREAMID = :g_streamid';    
  
  
  DBMS_SQL.PARSE(v_cur_hdl, v_stmt_str, DBMS_SQL.NATIVE);
  
  DBMS_SQL.DEFINE_COLUMN(v_cur_hdl, 1, DbStreamId);
  
  DBMS_SQL.BIND_VARIABLE(v_cur_hdl, ':g_streamid', 67286487);
  
  v_rows_processed := DBMS_SQL.EXECUTE(v_cur_hdl);
  dbms_output.put_line('PROCESSED:' || v_rows_processed);
  LOOP    
    IF DBMS_SQL.FETCH_ROWS(v_cur_hdl) > 0 THEN
      dbms_output.put_line('DbStreamId2222:' || DbStreamId);
      DBMS_SQL.COLUMN_VALUE(v_cur_hdl, 1, DbStreamId);
      dbms_output.put_line('DbStreamId:' || DbStreamId);
    ELSE
      EXIT;
    END IF;
  END LOOP;
    
  DBMS_SQL.CLOSE_CURSOR(v_cur_hdl);
EXCEPTION
  WHEN OTHERS THEN
    DBMS_SQL.CLOSE_CURSOR(v_cur_hdl);
END;

查看更多...

Tags: oracle DBMS_SQL

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 33

Oracle 查询索引

Select index_name FROM user_indexes Where table_name='table_name';

analyze table t1 compute statistics for table for all indexes for all indexed columns;

set autotrace traceonly explain;


http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328365.html


http://www.laoxiong.net/null_value_index.html

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 22

Redis 学习

1.服务端需要限制访问ip
2.需要设置超时时间
3.默认端口为6379

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 18

35个开源数据库

几乎每个Web开发人员都有自己喜欢的数据库,或自己最熟悉的数据库,但最常见的无外乎以下几种:
MySQL
PostgreSQL
MSSQL Server
SQLite

查看更多...

Tags: 数据库 开源

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 36

sqlplus执行存储过程

set serveroutput on;

declare

  resbuff varchar2(2048) := '';

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 32

Oracle 导入导出

exp user/pwd@tzdb file=/home/tzdb/daochu.dmp tables=CFG_AGT_PAYMENTMONEY_CHK;
分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 11

Oracle读书笔记系列3

1. SQL语句分组为
    1)数据定义语言(DDL)- create, alter, drop, rename, truncate(截断), comment
    2)数据操作语言(DML)- select, insert, update, delete, merge(?)
    3)数据控制语言(DCL)- grant(授权权限), revoke(撤消权限)
    4)事务控制语言(TCL)- commit, rollback, savepoint

2. PL/SQL块
    分为:
    1)匿名块
    2)命名块 -->可以发布包函数和过程

3. 最小匿名块
    BEGIN
       NULL;
    END;
    /

4.  SERVEROUTPUT(serveroutput) -- 环境变量
   SET SERVEROUTPUT ON SIZE 10000;
   BEGIN
    dbms_output.put_line('zhugexiaohui');
   END;
   /

5. oracle 中的保留字和关键字不区分大小写。

6. 引用替代符号
  select q'('xiaohui')' AS title from dual; 备注括号里面必须有两个引号以上,不然就会报错


7. 定义常量
  DECLARE
    v_hello CONSTANT VARCHAR2(5) := 'HELLO';
  BEGIN
    DBMS_OUTPUT.PUT_LINE(v_hello || ' ' || 'XIAOHUO');
  END;
  /

8. 在SQL命令行中,用@执行目录下的sql文件
   SQL> @/home/tzdb/*.sql

9. 定义存储过程
    Create or REPLACE PROCEDURE hello_procedure(REQ IN VARCHAR2, RES OUT VARCHAR2) AS
    BEGIN
      NULL;
    END;
    /

10. 调用执行命名块存储过程两种方式
  1)   BEGIN
         hello_procedure('xiaohui');
       END;
       /

  2)   EXECUTE hello_procedure('xisao');

11. 函数块
  Create or REPLACE FUNCTION hello_function(pv_whom VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    RETURN 'XIAOHUIO';
  END;
  /

12. 内置函数 TRUNC
   Select TO_CHAR(TRUNC(SYSDATE),'YYYY-MM-DD HH24:MI:SS') FROM DUAL;


13. CASE 语句
   简单 case(等值比较) 和 搜索型 case (非等值比较)

   等值比较
   case v_hello
     when '1'  then
     when '2'  then
     else
   end case;

   非等值比较
   case
     when a < 12 then
     when a > 15 then
     else
   end case;


14. pl/sql 有3种循环 for,  while, simple
      begin
    for i in 0..9 loop
       dbms_output.put_line(i);
    end loop;
      end;
      /

     --reverse 进行反转
      begin
        for i in reverse 0..9 loop
      dbms_output.put_line(i);
    end loop;
      end;
      /

      DECLARE
        v_i int := 1;
      BEGIN
        LOOP
      insert into temp values(i);
      EXIT WHEN i = 10;
      i := i+1;
    END LOOP;
      END;
      /

      DECLARE

      BEGIN
    --当条件condition 为 FALSE, 或 NULL 时退出循环
    WHILE condition LOOP  
          ............
    END LOOP;
      END;
      /

  
      IF v_money < 100 THEN
    ............
      ELSE
    NULL;  -- 当增加NULL时会增加可读性
      END IF;

15. 堆栈跟踪错误 dbms_utility.format_call_stack包
   declare
     local_exception EXCEPTION;
     FUNCTION nested_local_funciton
     RETURN BOOLEAN IS
       retval BOOLEAN := false;
     begin
       RAISE local_exception;
       RETURN retval;
     end;
     BEGIN
       IF nested_local_funciton THEN
         dbms_output.put_line('No raised exception');
       END IF;
     EXCEPTION
       WHEN OTHERS THEN
         dbms_output.put_line(dbms_utility.format_call_stack);
     END;


16. 用记录变量来接收数据,定义TYPE RECORD 类型
    DECLARE
      TYPE EMP_RECORD IS RECORD(
            streamid log_agt_prepay.streamid%TYPE, custphone log_agt_prepay.custphone%TYPE
          );
          prepay_record EMP_RECORD;
        BEGIN
          Select STREAMID, CUSTPHONE INTO prepay_record FROM LOG_AGT_PREPAY Where opmoney = 3000;
          dbms_output.put_line(prepay_record.streamid || '|' || prepay_record.custphone);
        EXCEPTION
          when others then
            dbms_output.put_line('出错了:'||dbms_utility.format_error_backtrace);
        END;
    /

17. 游标包括隐含游标(SQL游标)和显式游标
    1)隐含游标 专门用于处理Select INTO, Insert, Update, Delete 语句
    2)显式游标 用于处理多行 Select 语句
    当PL/SQL块中执行Insert, Update, Delete 语句时,为了取得DML语句作用的结果,必须要使用SQL游标属性,
    SQL游标包括 SQL%FOUND, SQL%NOTFOUND, SQL%ROWCOUNT, SQL%ISOPEN 等四种属性。
    17.1.1 SQL%ISOPEN
    用于确定SQL游标是否已经打开。当PL/SQL块中执行Select INTO, Insert, Update, Delete 语句时,ORACLE会隐含地打开游标,
    并且执行完后会隐含地关闭游标,所以对开发人永远都是FALSE.
    17.1.2 SQL%FOUND
    用于确定SQL语句执行是否成功。是根据是否有作用行来判断,当有作用行时,属性值为TRUE, 当SQL语句没有,FALSE.
    17.1.3 SQL%NOTFOUND
        与 SQL%FOUND 反之。
    17.1.4 SQL%ROWCOUNT
        用于返回SQL语句所作用的总计行数

18. 复合数据类型
    开发人员可以自定义记录类型和记录变量,也可以使用%RowType属性直接定义记录变量
    -- 其中 IS RECORD 表示记录类型
    TYPE type_name IS RECORD(
      streamid  log_agt_prepay.streamid%TYPE
    );
    record_name_type type_name; -- 代表记录变量
  
    在oracle 9i 版本之前 , insert values语句中 只能使用记录成员 ,但在之后可以直接使用记录变量插入数据。
    当在Values子句中使用记录变量插入数据时,列的顺序,个数,类型必须与记录成员的顺序、个数、类型完全匹配。

    DECLARE
    prepay_record log_agt_prepay%ROWTYPE;    
    BEGIN
    prepay_record.streamid := 132556;
    prepay_record.contractno := '132987766';
    prepay_record.custphone := '13288888888';
    prepay_record.opmoney := 3000;
    prepay_record.opprofit := 3000;
    prepay_record.optime := sysdate;
    prepay_record.chnltype := '02';
    prepay_record.deptno := '12222';
    prepay_record.operno := '9993';
    prepay_record.state := 1;
    prepay_record.bossphone := '1328888888';
    prepay_record.paytype := '2';
    prepay_record.prepaychnl := '2';
    prepay_record.thirdstreamid :='0202';
    prepay_record.remark := NULL;
    insert into log_agt_prepay values prepay_record;
    commit;
    END;
    /

    2) set 子句中使用记录变量是 orACLE9i 新增加的特征,当在SET 子句中使用记录变量更新数据时,列的顺序、个数、类型必须要与记录成员的顺序、个数、类型完全匹配。
    DECLARE
    prepay_record log_agt_prepay%ROWTYPE;    
    BEGIN
    prepay_record.streamid := 132556;
    prepay_record.contractno := '132987766';
    prepay_record.custphone := '13277777777';
    prepay_record.opmoney := 3000;
    prepay_record.opprofit := 3000;
    prepay_record.optime := sysdate;
    prepay_record.chnltype := '02';
    prepay_record.deptno := '12222';
    prepay_record.operno := '9993';
    prepay_record.state := 1;
    prepay_record.bossphone := '1328888888';
    prepay_record.paytype := '2';
    prepay_record.prepaychnl := '2';
    prepay_record.thirdstreamid :='0202';
    prepay_record.remark := NULL;
    update log_agt_prepay set row = prepay_record where streamid = 132556;
    commit;
    END;
    /

    3) 为了处理单行单列的数据,可以使用标量变量,为了处理单行多列的数据,开发人员可以使用PL/SQL记录;为了处理单列多行数据,开发人员可以使用PL/SQL集合。
    集合类型包括索引表(PL/SQL表)、嵌套表(Nested Table) 和变长数组(VARRAY)等三种类型。
    1) 索引表  特点: 个数没有限制,并且下标可以为负值 , 索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。定义语法如下:
        TYPE type_name IS TABLE OF element_type
        [NOT NULL] INDEX BY key_type;
        identifier type_name;

        如上所示: type_name 自定义数据类型的名称(IS TABLE .. INDEX 表示索引表);element_type 用于指定索引表元素的数据类型;
        NOT NULL 表示不允许引用NULL元素,key_type 用于指定索引表元素下标的数据类型(BINARY_INTEGER、PLS_INTEGER或VARCHAR2);
        identifier用于定义索引表变量
        
        set serveroutput on
        declare
          TYPE opmoney_table_type IS TABLE OF log_agt_prepay.opmoney%TYPE
            INDEX BY binary_integer;
          opmoney_table opmoney_table_type;
        begin
          select opmoney into opmoney_table(-1) from log_agt_prepay where streamid = 132556;
          dbms_output.put_line(opmoney_table(-1));
        end;
        /
         2) 嵌套表 元素下标从1开始,并且元素个数没有限制。其中数组元素值可以是稀疏的。
        注意,索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为列表的数据类型使用。定义嵌套表的语法如下:
        TYPE type_name IS TABLE OF element_type;
        Indentifier type_name;
        如上所示,type_name 用于指定嵌套表的类型名; element_type 用于指定 嵌套表元素的数据类型,identifier 用于定义嵌套表变量

19.  错误管理
   PL/SQL 中有两种错误:编译错误和运行时错误

    

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 14

Oracle 读书笔记系列2

PL/SQL块

程序由三个块组成,即声明部分、执行部分、异常处理部分。

declare
/*声明部分
begin
/*执行部分
exception
/*异常处理
end;

PL/SQL块可以分三类
1. 无名块:动太构造,只能执行一次
2. 子程序:存储在数据库中的存储过程、函数及包等。
3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 20

Oracle 读书笔记系列1

set autotrace traceonly explain 只显示执行计划
set timing on 显示执行时间
set autotrace on 显示执行计划

2. 在 where 语句中避免使用 <> 和 !=  因为这样查询索引用不起来,会直接进行全表查询

3. Where 语句中避免使用 IS NULL 和 IS NOT NULL 关键字
   因为 NULL 在数据库中代表的是“无”,就是什么都没有。 NULL 值不存储在索引中,因此索引列上 IS NULL 条件的查询不会使用索引,而是 Table Access Full 操作解析查询语句。  IS NOT NULL 同理。

4. EXISTS 关键字与 IN 关键字比较
  当子查询结果比较小时,用 IN 关键字比较合理, 当 外部表 比较小时比较合理 select * from 外部表  exists (内部表);


5. TRUNCATE 关键字 和 DeleteD 关键字
   truncate 关键字:通过释放存储表数据所用的数据块来删除数据,并且只在事务日志中记录块的释放。
结论:在整表数据删除的时候,使用TRUNCATER 效率要远远高于Delete.
   trancate 缺点 无法UNDO.无法数据恢复。

6.避免隐性转换,不然在查询语句中会使索引失效

7. 索引列上 >= 代替 >
   低率 :select * from emp where deptno>3
   高率: select * from emp where deptno>=4

8.避免在索引列上计算
   select * from emp where sal*12>1000 这样会全表查询。
   select * from emp where sal<1000/12 这样会查索引, 将计算项放在索引列的右边。

  
  

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 28

oracle 建表空间

create tablespace TZINDEX
datafile
     '/home/oracle/oradata/vmdb/tz_index.dbf'
    size 10M
    autoextend on

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 50