`
lujiawu12
  • 浏览: 126968 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle pl/sql 备忘

阅读更多

 

通过sqlplus连接oracle及配置相关操作

1.sqlplus   name/ password [as sysdba]

2.进入sqlplus后: SQL> startup

3.shutdown immediate;      //关闭数据库 OR "dbshut" command)

4. define _editor=vi

5.set serveroutput on

6. clear screen

7.edit

8. /       运行

 

pl/sql 基础结构

declare

     变量名  变量类型;

申明基本变量

     var name varchar2(32);     

     var age  number:=22;

申明数组变量

     类似于高级语言的数组

TYPE tabletype IS TABLE OF type_name INDEX BY BINARY_INTEGER ;

申明record

     类似于高级语言的结构体

TYPE record_name IS RECORD(

         field1 type1

 field2 type2 );

申明一表结构类型变量

v_rowtype TABLE_NAME%ROWTYPE ;

 

申明一游标变量

 

     Type sp_cursor is ref cursor; --定义一个游标类型

    

 

CURSOR cur_name IS  select  …..

Begin

Open cur_name;

….

Close cur_name;

End;

 

declare

     cursor emp_cur is

      select first_name from s_emp ;

      v_first varchar2(32);

begin

      open emp_cur;

      while emp_cur%notfound=false loop

           fetch emp_cur into v_first;

           dbms_output.put_line(v_first);

       end loop;

       close emp_cur;

 end;

/

申明一异常

     e_name exception;

     pragma exception_init(e_child_found,-2292);

 

begin

 

 

 

exception

格式

抛出异常: raise exception_name;

exception

     when exception_name then

         dosth …. ;

eg:

 when dup_val_on_index then

 dbms_output.put_line('dup val on index');

 when e_child_found then

 dbms_output.put_line('e_child_found is raised');

 when e_custom then

 dbms_output.put_line('e_custom is raised');

 

end

 

条件

if

if  v_name is null then        -- bool 表达式

…. ;

for

for var in CursorName loop

     var.columnName … ;

end loop;

 

while

 

while bool 表达式 loop

 

end loop;

 

fetch   **   into  **

 

function

create or replace function fun2  (p_id number)

return number

is

     ss number;

begin

     select salary into ss from s_emp

     where id = p_id;

     return ss;

end;

 

trigger

create or replace trigger tri_test2

before insert on t_test

for each row

declare

begin

    select seq_test.nextval into :new.id

    from dual;

end;

 

sequence

-- Create sequence

create sequence SEQ_TEST

minvalue 0

maxvalue 999

start with 21

increment by 1

cache 20;

 

存储过程

create or replace procedure pro_create_table

is

begin

    execute immediate

        'create table pro_table ( id number primary key)';

end ;

 

create or replace procedure proc_inout

(p_in varchar2 , p_out out varchar2 , p_inout in out varchar2)

is

   v varchar2(10);

begin

   v := p_in;

   p_out := p_in||'out';

   p_inout := p_inout||'inout';

   dbms_output.put_line(p_out||p_inout);

end;

 

用于在逻辑上组合过程和函数,(类似于接口)

Create package pk_name as

     Procedure procedureName(arg type);

     Function fun_name(arg type) return number;

End;

包体

Create package body body_name

 is

     Procedure p_name(arg type)

Is

Begin

….

End;

Function f_name(arg type) return number

Is

V_number number;

Begin

End;

End;

 

 

返回结果集的过程

1.创建一个包,定义一个游标

Create or replace package test as

     Type test_curosr is ref cursor;

End test;

 

2.创建过程

Create or replace procedure p_test

(arg number,arg2 out test.test_cursor)

Is

Begin:

     Open arg2 for select …..;

     Execute immediate sql into v_cout;

End;

 

3.java中调用

CallableStatemt   cs = conn.prepareCall(“{call p_test(?,?)}”);

Cs.registerOUtputParameter(2,OracleType.Cursor);

Cs.execute();

//获取结果集

ResultSet rs = (resultset)cs.getObject(2);

 

 

job

创建测试表      

 SQL>   create   table   test(id number,cur_time   date);    

  表已创建。  

 

sequence

CREATE  SEQUENCE test_sequence

INCREMENT  BY   1    --  每次加几个

 START  WITH   1     --  1开始计数

 NOMAXVALUE     --  不设置最大值

 NOCYCLE      --  一直累加,不循环

 CACHE  10 ;

 

 

建触发器

create or replace trigger tri_test_id  

  before insert on test   --test 是表名  

  for each row  

declare  

  nextid number;  

begin  

  IF :new.id IS NULLor :new.id=0 THEN --id是列名  

    select test_sequence.nextval --SEQ_ID正是刚才创建的  

    into nextid  

    from sys.dual;  

    :new.id:=nextid;  

  end if;  

end tri_test_id;   

      

创建一个自定义过程    

SQL>   create   or   replace   procedure   proc_test   as    

     2     begin    

     3     insert   into   test(cur_time)   values(sysdate);    

     4     end;    

     5     /  

 

  

  过程已创建。 

  

创建JOB 

SQL> declare job1 number;  

     begin  

        dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次  

    end; 

 

  PL/SQL   JOB已成功完成。 

 

1 每分钟执行

 

Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)

 

2 每天定时执行

 

例如:每天的凌晨2点执行

 

Interval => TRUNC(sysdate) + 1 +2 / (24)

 

3 每周定时执行

 

例如:每周一凌晨2点执行

 

Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

 

4 每月定时执行

 

例如:每月1日凌晨2点执行

 

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

 

5 每季度定时执行

 

例如每季度的第一天凌晨2点执行

 

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24

 

6 每半年定时执行

 

例如:每年71日和11日凌晨2

 

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

 

7 每年定时执行

 

例如:每年11日凌晨2点执行

 

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

 

 

 

 

分享到:
评论

相关推荐

    Oracle+PlSql存储过程

    Oracle PL/SQL存储过程是Oracle数据库中的一种重要编程机制,用于封装复杂的数据库操作逻辑,提高数据库性能,并且便于代码管理和重用。以下是对Oracle存储过程的详细解释。 **Oracle存储过程基础知识** Oracle存储...

    Oracle PlSql存储过程

    Oracle PL/SQL 存储过程是Oracle数据库中一种强大的编程工具,它允许开发人员将一组相关的SQL和控制结构组合在一起,形成可重复使用的代码单元。这些过程可以提高应用程序的性能,减少网络流量,并且便于管理和维护...

    oracle 数据库工作备忘录

    - **PL/SQL**:Oracle扩展的编程语言,用于编写存储过程、函数、触发器等。 3. **性能优化** - **索引(Indexes)**:加快查询速度的数据结构,有B树、 bitmap、R树等多种类型。 - **分区(Partitioning)**:将...

    oracle存储过程学习经典[语法+实例+调用].docx

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的程序单元。这样的程序单元可以在需要的时候被调用执行,提高了代码的复用性和数据库的性能。...

    oracle存储过程学习经典入门.doc

    Oracle 存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一组SQL语句和PL/SQL代码,形成一个可重复使用的程序单元。存储过程可以提高数据库应用的性能,减少网络流量,并且提供更好的安全性。以下...

    oracle创建用户(备忘)

    在Oracle数据库管理中,创建用户是一...在日常工作中,可以借助工具如SQL*Plus、PL/SQL Developer或Toad等来简化这一过程,提高效率。同时,文档如《Oracle Database Administrator’s Guide》是学习和参考的重要资源。

    oracle存储过程学习经典

    Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储过程的一些关键知识点的深入解析: #### Oracle存储过程基本语法 ...

    常用oracle语句备忘

    这篇“常用Oracle语句备忘”将带你深入理解Oracle SQL的基本概念和常见操作,以提升你在数据库管理中的技能。 1. **Oracle SQL基础** Oracle SQL是用于与Oracle数据库交互的语言,它包括了DML(Data Manipulation ...

    oracle存储过程学习经典[语法+实例+调用]

    Oracle存储过程是Oracle数据库中一种用于封装SQL语句、PL/SQL语句或Java语句的程序单元,它可以包含一系列操作,使得商业规则和业务逻辑可以从应用程序中独立出来,集中存储在数据库中。存储过程的好处包括代码的...

    oracle存储过程(语法+实例).docx

    3. **关于 Oracle 存储过程的若干问题备忘** - 数据表别名不能使用`as`,应直接使用别名,如 `table t`。 - 在存储过程中,`SELECT` 后的字段必须跟 `INTO` 关键字,将结果保存到变量中,除非使用游标处理多行记录...

    Oracle第三方工具pl\sql developer绿色中文版

    并可以修改,有中文说明,oracle数据字典说明,函数说明,并且可以录入自己总结的备忘<br/><br/>资料,以备查看,还有帮助就是一本学习oracle的书,一步一步怎么操作,对各种对象的说明,链接其他参考资料,sql语<br/><br/>句,...

    oracle存储超详细速成学习资料(语法+实例+调用)

    3. **Oracle 存储过程的若干问题备忘** - 数据表别名不能使用`AS`关键字,应该直接写为`table_name alias_name`。 - 在存储过程中,`SELECT`后的字段必须跟`INTO`指定变量,除非使用游标处理整行记录。 - `SELECT...

    Oracle_PLSQL_存储过程

    ### Oracle PL/SQL 存储过程详解 #### Oracle存储过程基础知识 存储过程是数据库中预编译好的一段SQL或PL/SQL代码,它可以接受输入参数并返回结果,从而实现复杂的功能逻辑。存储过程的主要优势包括提高性能(因为...

    SQL注入攻击与防御(安全技术经典译丛)

     3.2.4 复查PL/SQL和T-SQL代码  3.3 自动复查源代码第1章 什么是SQL注入  3.3.1 YASCA  3.3.2 Pixy  3.3.3 AppCodeScan  3.3.4 LAPSE  3.3.5 SWAAT  3.3.6 Microsoft SQL注入源代码分析器  3.3.7 ...

    2022oracle存储过程procedure秘籍参照.pdf

    3. **关于Oracle存储过程的若干问题备忘**: - 数据表别名不加`AS`是Oracle的一个特性,可以直接使用`alias column_name`。 - `SELECT`语句在存储过程中,如果只选择单个字段,必须使用`INTO`将结果存入变量,如`...

    SQL注入攻击与防御

    3.2.4 复查PL/SQL和T-SQL代码 88 3.3 自动复查源代码第1章 什么是SQL注入 94 3.3.1 YASCA 96 3.3.2 Pixy 96 3.3.3 AppCodeScan 97 3.3.4 LAPSE 97 3.3.5 SWAAT 97 3.3.6 Microsoft SQL注入源代码分析器 98 3.3.7 CAT...

    oracle存储过程学习经典语法+实例+调用.doc

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL语句和PL/SQL块,以完成特定的任务。这些预编译的代码集合可以提高数据库操作的效率,减少网络流量,并提供更好的安全性和模块...

    Oracle存储过程学习经典[语法+实例+调用].

    #### 三、Oracle存储过程的若干问题备忘 **1. 数据表别名的使用** - **注意**: 在Oracle中,数据表别名不能使用关键字`AS`来指定。 **2. SELECT INTO语句的使用** - **要求**: 使用`SELECT INTO`时,必须确保...

Global site tag (gtag.js) - Google Analytics