Oracle的存储过程

Posted 新愚俗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle的存储过程相关的知识,希望对你有一定的参考价值。

【replace】【游标】【循环】【fetch】

在ORACLE 中, 若干个有联系的过程可以组合在一起构成程序包。

https://www.2cto.com/database/201610/559389.html

游标定义: cursor [游标名] is [sql语句]

在PL SQL里打开查询窗口,在解释器里输入过程名,按住ctrl点击过程名,就能调出源码。

***存储过程语句

CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION

错误处理部分]

END [过程名];

***删除存储过程 语法:

DROP PROCEDURE 存储过程名;

 

---将一个字段中有多个数据,有逗号隔开的,分别输出。

SELECT regexp_substr(‘1101,Yokohama,Japan,1.5.105‘, ‘[^,]+‘, 1, LEVEL) AS output ,‘内容‘ FROM dual 

CONNECT BY LEVEL <= length(‘1101,Yokohama,Japan,1.5.105‘) -length(REPLACE(‘1101,Yokohama,Japan,1.5.105‘, ‘,‘)) + 1;

结果:
     1101
     Yokohama
     Japan
     1.5.105

  

在PL SQL中循环过程中可以写多个游标定义多个循环,学习for循环,类似于

 cursor [游标名] is [sql语句]

 for  [循环名称] IN [游标名] loop---遍历游标,在打印出来

 DBMS_OUTPUT.put_line( );
 END LOOP;

***存储过程中SQL语句执行会加 【execute immediate】:

简单来说 就是你一个存储过程当中 创建了一个表 table_a 然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示有编译错误,因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到 execute immediate之后 则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。

----存储过程中参数

 ---存储过程的参数
        ---IN  定义一个输入参数变量,用于传递参数给存储过程   
        --OUT 定义一个输出参数变量,用于从存储过程获取数据   
        ---IN OUT  定义一个输入、输出参数变量,兼有以上两者的功能  
        --这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。
        例:---创建有参数的存储过程
     

 create or replace procedure test_param(p_id1 in VARCHAR2 default ‘0‘)
 as v_name varchar2(32);
 begin
 select t.name into v_name from TESTTABLE t where t.id1=p_id1;
 DBMS_OUTPUT.put_line(‘name:‘||v_name);
 end;

  


      ----执行存储过程
      begin
         test_param(‘1‘);
       end;
    
       default ‘0‘














以上是关于Oracle的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的存储过程,有啥作用,以及怎么在代码中使用?

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

oracle的存储过程

oracle form怎么调用oracle存储过程

怎样实现每天自动执行oracle的存储过程一次